派生自 projectDept/qhighschool

EricsHu
2022-12-05 068fc7f2e81178e55fa191a13709af64b1a163f6
处理编码
549个文件已修改
22587 ■■■■ 已修改文件
src/main/java/com/qxueyou/scc/admin/attendance/AttendanceService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/attendance/impl/AttendanceServiceImpl.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/classes/dao/ClassDAO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/classes/dao/ClassRepository.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/classes/model/ClsClass.java 124 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/classes/service/IClassService.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClassLectureService.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClsClassService.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/classroom/model/ClassRoom.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/classroom/service/IClassRoomService.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/classroom/service/impl/ClassRoomService.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/course/model/CourseSchedule.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/course/model/CourseScheduleDetail.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/course/model/CourseScheduleReCls.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/course/service/ICourseScheduleService.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/course/service/impl/CourseScheduleService.java 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/examroom/model/ExamRoom.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/examroom/service/IExamRoomService.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/examroom/service/impl/ExamRoomService.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/notice/dao/NoticeDAO.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/notice/service/INoticeService.java 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/notice/service/impl/NoticeService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/progress/dao/ProgressDAO.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/progress/model/SubjectLectureProgressDetail.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/schoolRoll/impl/SchoolRollServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/score/action/ScoreController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/score/service/IScoreService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/teacher/service/ITeacherService.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/teacher/service/impl/TeacherService.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/StsCtrl.java 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/dao/AbstractRedisTemplate.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/dao/BaseDAO.java 254 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/dao/CommonDAO.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/dao/CommonRedisCache.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/dao/CommonRedisTemplate.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/handler/QCacheCleaner.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/handler/QCacheMonitor.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/handler/QCacheReader.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/handler/QCacheRedis.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/handler/QLog.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/handler/QLogMonitor.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/handler/QXueyouExceptionHandler.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/model/ApiResult.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/model/CacheConstants.java 132 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/model/Constants.java 206 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/model/ExcelExportParam.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/model/FilePathConstants.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/model/FlowPrice.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/model/MsgTypeConstants.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/model/Pager.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/model/PaginationData.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/model/Param.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/model/Result.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/model/ResultJson.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/model/TransactException.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/model/UserCipher.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/model/UserInfoWrapper.java 124 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/model/WbCacheKey.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/model/WeixinContants.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/model/WxTemplateMsg.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/service/ICacheService.java 72 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/service/ICommonService.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/service/IDictionaryService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/service/IFileUploadService.java 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/service/IONSExceptionLogService.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/service/impl/CommonAppService.java 120 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/service/impl/DictionaryService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/service/impl/FileUploadService.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/service/impl/LicenseChecker.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/service/impl/LicenseService.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/service/impl/ONSExceptionLogService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/service/impl/RedisCacheBean.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/AESUtil.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/Base64Utils.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/ClientUtils.java 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/CollectionUtils.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/CommonUtils.java 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/DateTimeFormatUtils.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/DateTimeUtils.java 216 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/DateUtils.java 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/ExcelExportUtils.java 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/FreeMarkerMd5MethodDefine.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/HttpClient.java 88 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/ImageUtils.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/JacobUtil.java 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/MD5Utils.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/MyJsCssVersionUtils.java 118 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/NumRandomUtils.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/PageUtils.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/ParamsUtils.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/PhoneNOUtils.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/QBeanUtils.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/QFileUtils.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/QrCodeUtils.java 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/QueryDslOptionBuilder.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/RSAUtils.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/ReisUtils.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/RequestClientUtils.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/SerializeUtils.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/SpringUtil.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/StringMapUtils.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/TraceUtils.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/UUIDUtils.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/UserCodeUtils.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/WordExportUtils.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/WordProcessUtils.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/XmlUtils.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/base/util/docConverterUtil.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/config/Swagger2.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/AttendanceController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/ClassController.java 302 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/ClassRoomController.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/ClsLectureController.java 128 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/CourseScheduleController.java 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/CoursewareController.java 140 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/EvaluateController.java 106 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/ExamRoomController.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/FileController.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/IndexController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/MsgChatroomMsgCtrl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/MsgInfoController.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/NoticeController.java 72 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/ResController.java 98 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/SchoolRollController.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/SubjectController.java 108 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/TeacherController.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/UserController.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/controller/VideoLiveController.java 86 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/courseware/action/CourceCategoryController.java 150 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/courseware/action/CourceController.java 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/courseware/service/ICourceCategoryService.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/courseware/service/ICourseService.java 94 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/courseware/service/IOrgCourseService.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/courseware/service/impl/CourceCategoryAppService.java 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/courseware/service/impl/CourseService.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/courseware/service/impl/OrgCourseService.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/evaluate/action/EvaluateTemplateController.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/evaluate/dao/EvaluateRepository.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/evaluate/service/IEvaluateService.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/evaluate/service/IEvaluateTemplateService.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/evaluate/service/impl/EvaluateService.java 182 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/evaluate/service/impl/EvaluateTemplateService.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exam/action/ExamBatchController.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exam/action/ExamController.java 198 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exam/action/ExamPaperController.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exam/action/ExamPaperSectionController.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exam/dao/ExamDao.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exam/dao/ExamDaoImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exam/model/ExamBatchClassRe.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exam/model/ExamBatchInfo.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exam/model/ExamInfo.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exam/model/ExamPaperInfo.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exam/model/ExamPaperSectionInfo.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exam/model/ExamReExamPaper.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exam/service/IExamBatchService.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exam/service/IExamPaperSectionService.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exam/service/IExamPaperService.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exam/service/IExamService.java 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exam/service/impl/ExamBatchService.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exam/service/impl/ExamPaperSectionService.java 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exam/service/impl/ExamPaperService.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exam/service/impl/ExamService.java 176 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/action/ExerciseCompleteController.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/action/ExerciseController.java 768 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/action/ExerciseCorrectionController.java 86 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/action/ExerciseDeepAnaController.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/action/ExerciseExtendController.java 460 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/action/ExerciseGroupController.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/action/ExerciseInfoController.java 144 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/action/ExerciseItemController.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/dao/ExerciseDAO.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExciseAnswerResult.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExciseExtendReqData.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExciseExtendReqListData.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExciseExtendResult.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerGroupResponseData.java 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerItemResponseData.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseAddItemParams.java 134 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseAnalisisResult.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseAnswerData.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseChapter.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseCompleteInfo.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseCorrection.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseCorrectionImg.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseCorrectionResult.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseDataSubmitLog.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseDeepAnalysis.java 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseExamReGroup.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseExtendData.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseExtendRecordData.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultBook.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultRecord.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultStatistics.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseFavoriteBook.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseFavoriteRecord.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroup.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroupExtend.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroupShareInfo.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseImportResult.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseInfo.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseItem.java 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnalisiU.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnswerData.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnswerU.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemOption.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemStatis.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemStatistics.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseObjectImg.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseOptionStatistics.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseParse.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseParseResult.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseReCourse.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseRecord.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseSubmitAnswerData.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/model/ExerciseSubmitAnswerDataList.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/IExerciseCompleteService.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/IExerciseCorrectionService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/IExerciseDeepAnaService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/IExerciseExtendService.java 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/IExerciseGroupService.java 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/IExerciseInfoService.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/IExercisePyService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/IExerciseService.java 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/IExerciseVerService.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseCompleteService.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseCorrectionService.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseDeepAnaService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseExtendService.java 712 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseGroupAccuracyDealService.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseGroupService.java 132 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseInfoService.java 152 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseItemStatisticsDealService.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/ExercisePyService.java 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseService.java 778 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseStatisticsDealService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseSysMsgDealService.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseVerService.java 736 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/Handler.java 128 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/ParseResult.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/node/Doc.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/node/Item.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/parser/DocParser.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemAnalysisParser.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemAnswerParser.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemParser.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemTypeParser.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/service/impl/parser/OptionParser.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/timer/ExerciseTimer.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/exercise/util/ExerciseUtils.java 226 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/media/dao/MediaVideoDAO.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/media/model/MediaVideo.java 262 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/media/model/MediaVideoCache.java 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/media/model/MediaVideoReCourse.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/media/model/MediaVideoRecord.java 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/media/model/MediaVideoStatistic.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/media/model/MediaVideoTrans.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/media/model/MediaVideoViewVO.java 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/media/model/SchLiveReVideo.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/media/model/VideoConverTask.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/media/model/VideoInf.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/media/model/VideoLiveChatroom.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/media/model/VideoLiveViewVO.java 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/media/model/VideoRecordDTO.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/media/service/IMediaVideoService.java 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/msg/model/Message.java 58 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/msg/model/MsgChatroomMsg.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/msg/model/MsgFriend.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/msg/model/MsgGroup.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/msg/model/MsgGroupUserRe.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/msg/model/MsgInfo.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/msg/model/MsgUser.java 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/msg/service/IMsgInfoService.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/msg/service/impl/ChatroomMessageBean.java 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/msg/service/impl/MsgInfoService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/notice/model/Notice.java 110 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/operation/comment/mode/Comment.java 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/operation/comment/mode/CommentImg.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/operation/comment/mode/CommentObject.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/operation/comment/mode/CommentPraise.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/operation/comment/mode/SnsCommentToMe.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/operation/comment/mode/SnsMyComment.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/operation/comment/mode/SnsMyPraise.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/operation/comment/mode/SnsPraiseToMe.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/operation/topic/action/StuTopicController.java 208 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/operation/topic/model/TopicClassRe.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/operation/topic/model/TopicInfo.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/operation/topic/service/ITopicService.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/operation/topic/service/impl/TopicService.java 88 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/dao/OrgCourseDAO.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/dao/OrgDAO.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/DiscoverBanner.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/ExternelTeacherInfo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgAppInfo.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgAppMenu.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgBank.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgBankAccount.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgBanner.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgCategoryLevel.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgClass.java 96 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgClassBanner.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgClassQueryCm.java 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgClassReTeacher.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgClassReUser.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgClassUserCustom.java 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgCollege.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgCollegeCourse.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgCollegePublic.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgCourse.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgCourseCateData.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgCourseCategory.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgCourseData.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgCourseJsonData.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgMarketPrivilege.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgNewUserModel.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgPhotoalbum.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgPrivilege.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgReCollegePublic.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgSalesman.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgStringExtend.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgStudent.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgTeacher.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrgText.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/Organization.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/model/OrganizationExtend.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/service/IOrgClassService.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/service/IOrgClassTeacherService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/service/IOrgTextService.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/service/IOrganizationService.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/service/ITeacherService.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/service/impl/OrgClassTeacherService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/service/impl/OrgTextService.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/service/impl/OrganizationService.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/org/util/CourseMarketUtils.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/portal/information/model/Information.java 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/action/ArticleController.java 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/action/StudentScoreController.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/dao/EvaluateDAO.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/dao/HandoutDAO.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/dao/InteractDAO.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/dao/LessonDAO.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/dao/RankDAO.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/dao/SignDAO.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/helper/IJudgeLimitStrategy.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/helper/IJudgeUpdateStrategy.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/helper/judge/CommonJudgeStrategy.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/ClassCardTemplet.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/EvaluateStuStudentV.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/EvaluateStuStudentVId.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/HandoutAnswerData.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/HandoutAnswerResult.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/HandoutConverTask.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/InteractResultData.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/InterateAnswer.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/LessionSignStatistics.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchArticle.java 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchArticleReCourse.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchArticleStatistic.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchChapter.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchClassCard.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchClassCardTemplet.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchClassCourseware.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchClassSchedule.java 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchClassSubject.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchCourseware.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchEvaRecordRe.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchEvaluate.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchEvaluateDetail.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchEvaluateTemplate.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchFile.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchHandout.java 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchHandoutPage.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchHandoutReCourse.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchHandoutRecord.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchHandoutRecordDetail.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchHandoutStatistic.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchImg.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchInteract.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchInteractResult.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchNote.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchQRUrl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchRank.java 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchRankHis.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchRankVer.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchReClassUser.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchReLessonLiveVideo.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchReLessonPeriod.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchReLessonVideo.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchScheduleAddress.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchSchoolDay.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchSchoolDayItem.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchSchoolYear.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchSign.java 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchSignCode.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchSignItem.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchSignOrder.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchSignStatistics.java 88 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchSpreadFootprint.java 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchStudentAchievement.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchStudentSchedule.java 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchStudyReport.java 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchSubjectExtend.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchSubjectReCourse.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchTerm.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchTermReDay.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchVideoFile.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchYearReClass.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SchYearReOrg.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SignResult.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SignScreenResult.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/SignStatisResult.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/StudentEvaCategory.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/TeachEvaScoreData.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/TeachEvaScoreResult.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/viewvo/SchNoteViewVO.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/viewvo/SchSemesterViewVO.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/viewvo/SchStudentScheduleViewVO.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/viewvo/SchWeekScheduleViewVO.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/model/viewvo/SchYearViewVO.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/IArticleService.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/IClassCardService.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/IClassCircleService.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/ICourseWareService.java 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/IDocdealMsgSenderService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/IHandoutService.java 98 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/IInteractService.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/ILessonService.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/INoteService.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/IRankService.java 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/ISchoolDayService.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/ISchoolTermService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/ISchoolYearService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/IScoreChangeService.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/ISignService.java 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/ISpreadFootprintService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/IStudentScoreService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/IStudyReportService.java 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/impl/ArticleService.java 138 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/impl/ClassCardService.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/impl/ClassCircleService.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/impl/CoursewareService.java 120 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/impl/DocdealMsgDealService.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/impl/DocdealMsgSenderService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/impl/HandoutConvertPDFDealService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/impl/HandoutService.java 342 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/impl/InteactService.java 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/impl/LessonService.java 146 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/impl/NoteService.java 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/impl/RankMsgDealService.java 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/impl/RankService.java 108 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/impl/SchSignMsgDealService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/impl/SchoolDayService.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/impl/SchoolTermService.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/impl/SchoolYearService.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/impl/SignService.java 236 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/impl/SpreadFootprintService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/impl/StudentsScoreService.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/impl/StudyReportService.java 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/impl/VideoIssueStopDealService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/service/impl/WBONSProducer.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/util/StudentEvaUtils.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/school/util/StudyReportUtils.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/shorturl/util/ShortUrlUtils.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sms/model/Sms.java 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sms/model/SmsConfig.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sms/model/SmsContants.java 146 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sms/utils/SmsUtils.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/statistic/model/SchFlowStatisticDetail.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/stucontroller/HomePageController.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/stucontroller/StuExamController.java 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/stucontroller/StuExerciseController.java 98 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/stucontroller/StuLiveController.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/stucontroller/StuNoticeController.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/stucontroller/StuResController.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/stucontroller/StuSubjectController.java 206 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/action/ImgController.java 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/action/LoginController.java 256 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/model/CacheParamters.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/model/ResponseResult.java 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/model/SysButton.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/model/SysCondition.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/model/SysConfigFile.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/model/SysLog.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/service/IAuthorizeService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/service/IOssService.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/service/IPrivilegeService.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/service/ISysAttachmentService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/service/impl/OssService.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/service/impl/PriviledgeService.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/service/impl/SysAttachmentService.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/service/impl/VideoOssService.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/utils/AudioUtil.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/utils/DrawingUtil.java 106 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/utils/SpringContextHolder.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/sys/utils/VideoUtil.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLive.java 124 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveClip.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveClipVer.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveExtend.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveOrder.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveRecord.java 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveReplay.java 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveReplayReClip.java 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/live/service/IMediaLiveService.java 112 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/live/service/IMediaVideoLivePlayBackService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/live/service/impl/MediaLiveService.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/live/service/impl/MediaVideoLivePlayBackService.java 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/live/utils/FfmpegFileVO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/live/utils/FfmpegMediaHelper.java 176 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/live/utils/FfmpegVideoInfo.java 88 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/res/model/ResItemAudio.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/res/model/ResItemDoc.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/res/model/ResItemVideo.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/res/service/IFileService.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/res/service/IResAudioService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/res/service/IResItemService.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/res/service/IResService.java 200 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/res/service/impl/FileService.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/res/service/impl/ResService.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemAudioService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemDocService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemVideoService.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/student/model/StuStudent.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/student/service/IStudentService.java 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/student/service/impl/StudentService.java 174 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/subject/model/Subject.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/subject/model/SubjectUtils.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/subject/service/ILectureService.java 158 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/subject/service/ISubjectService.java 144 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectLectureService.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java 214 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/dao/RegistrationDAO.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/dao/UserRoleDAO.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/model/User.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/model/UserAuthorizeTrace.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/model/UserExtend.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/model/UserRegistration.java 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/model/UserSign.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/model/UserStudent.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/service/IUserOperateService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/service/IUserRegistrationService.java 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/service/IUserRoleService.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/service/IUserService.java 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/service/IUserSignService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/service/impl/UserOperateService.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/service/impl/UserRoleService.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/service/impl/UserService.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/user/util/ExcelReader.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/web/AuthorizeFilter.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.properties 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/qxueyou/scc/admin/attendance/AttendanceService.java
@@ -7,17 +7,17 @@
public interface AttendanceService {
    /**
     * 打卡
     * 打卡
     */
    String attendanceUpAndAdd(String studentId,String SubjectId);
    /**
     * 查询考勤信息
     * 查询考勤信息
     */
    List<StuStudent> findAttendanceList(Integer limit, Integer pageNum, String keyword, String subjectId);
    /**
     *修改打卡状态
     *修改打卡状态
     */
    Result updateAttendanceStatus(String studentId, String attendanceStatus);
src/main/java/com/qxueyou/scc/admin/attendance/impl/AttendanceServiceImpl.java
@@ -31,31 +31,31 @@
        try{
            SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
            //上课时间
            String s1 = "9:00:00";
            //如果上课时间(9点)>当前时间
            //上课时间
            String s1 = "9:00:00";
            //如果上课时间(9点)>当前时间
            String s2 = sdf.format(new Date());
            int compareTo = s1.compareTo(s2);
            if(compareTo>0)
            {
                s="签到时间已过,本节课按照旷课处理";
                stuStudent.setAttendanceStatus("旷课");
                s="签到时间已过,本节课按照旷课处理";
                stuStudent.setAttendanceStatus("旷课");
            }
            else
            {
                String s3 = "8:50:00";
                String s3 = "8:50:00";
                compareTo = s2.compareTo(s3);
                if(compareTo<0)
                {
                    s="未到签到时间,请与上课时间前10分钟签到";
                    stuStudent.setAttendanceStatus("未打卡");
                    s="未到签到时间,请与上课时间前10分钟签到";
                    stuStudent.setAttendanceStatus("未打卡");
                }
                else
                {
                    if(stuStudent!=null && subjectId!=null){
                        stuStudent.setSubjectId(subjectId);
                        stuStudent.setAttendanceStatus("已打卡");
                        s = "成功完成签到";
                        stuStudent.setAttendanceStatus("已打卡");
                        s = "成功完成签到";
                    }
                }
            }
src/main/java/com/qxueyou/scc/admin/classes/dao/ClassDAO.java
@@ -29,7 +29,7 @@
    /**
     * 获取这个通知的总人数
     * 获取这个通知的总人数
     */
    public int getStudentCount(List<String> classIds) {
@@ -44,7 +44,7 @@
    }
    /**
     * 获取通知的班级名称
     * 获取通知的班级名称
     */
    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);
src/main/java/com/qxueyou/scc/admin/classes/dao/ClassRepository.java
@@ -6,12 +6,12 @@
import com.qxueyou.scc.base.service.IBaseJpaRepository;
/**
 * 评估
 * 评估
 * @author zhiyong
 *
 */
@Repository
public interface ClassRepository extends IBaseJpaRepository<ClsClass>{
}
src/main/java/com/qxueyou/scc/admin/classes/model/ClsClass.java
@@ -32,7 +32,7 @@
/**
 * The persistent class for the org_class database table.
 *
 *
 */
@Entity
@Table(name = "cls_class")
@@ -41,46 +41,46 @@
     * 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 = "结束";
    /** 班级进度:报名 */
    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")
@@ -138,7 +138,7 @@
    @Column(name = "ARRANGEMENT", length = 255)
    private String arrangement;
    /** 班级优势 */
    /** 班级优势 */
    @Column(name = "ADVANTAGE", length = 255)
    private String advantage;
@@ -153,7 +153,7 @@
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
    private Date endTime;
    /** 当前已报名学生人数 */
    /** 当前已报名学生人数 */
    @Column(name = "STUDENT_COUNT")
    private int studentCount;
@@ -176,7 +176,7 @@
    @JsonIgnore
    private String updator;
    /** 是否推广 false:不推广 true:推广 */
    /** 是否推广 false:不推广 true:推广 */
    @Column(name = "EXTENDED")
    private boolean extended;
@@ -195,7 +195,7 @@
    @Column(name = "SCORE", precision = 10, scale = 2)
    private BigDecimal score;
    /** 学生总数 计划招生人数,用于机构 指定 */
    /** 学生总数 计划招生人数,用于机构 指定 */
    @Column(name = "STU_ALL_COUNT")
    private BigInteger stuAllCount;
@@ -205,67 +205,67 @@
    @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 **/
    /*** 商品ID **/
    @Column(name = "GOOD_ID", length = 32)
    private String goodId;
    /*** 产品ID **/
    /*** 产品ID **/
    @Column(name = "PRODUCT_ID", length = 255)
    private String productId;
    /*** 机构ID **/
    /*** 机构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;
@@ -284,63 +284,63 @@
    @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") },
    @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"
            )
            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;
src/main/java/com/qxueyou/scc/admin/classes/service/IClassService.java
@@ -9,14 +9,14 @@
import com.qxueyou.scc.base.model.Result;
/**
 * 班级管理服务层
 * 班级管理服务层
 *
 * @author chenjunliang
 */
public interface IClassService {
    /**
     * 新增班级
     * 新增班级
     *
     * @param course
     * @return
@@ -26,14 +26,14 @@
    /**
     *
     *新增补考分组
     *新增补考分组
     * @param classTypes
     * @return
     */
    Result insertReClass(String className, String classNumber, Date startTime, Date endTime, String subjectId,
                         String teacherId,String classTypes);
    /**
     * 修改班级
     * 修改班级
     *
     * @param course
     * @return
@@ -43,14 +43,14 @@
                       boolean canMultiExer, boolean needForum, String teacherId);
    /**
     * 获取班级列表
     * 获取班级列表
     *
     * @return
     */
    List<ClsClass> getClassLst(String keyword, String teacherId, Integer pageSize, Integer pageNum, Integer pageType);
    /**
     * 获取班级列表数量
     * 获取班级列表数量
     *
     * @return
     */
@@ -62,21 +62,21 @@
    List<ClsClass> listMyClass();
    /**
     * 获取班级考试、作业等活动信息
     * 获取班级考试、作业等活动信息
     *
     * @return
     */
    Map<String, Object> getClassActivityInfo(String classId);
    /**
     * 获取班级详情
     * 获取班级详情
     *
     * @return
     */
    ClsClass read(String classId);
    /**
     * 删除班级
     * 删除班级
     *
     * @param classIds
     * @return
@@ -84,15 +84,15 @@
    Result deleteClass(String[] classIds);
    /**
     * 新增学生
     * 新增学生
     *
     * @param count 学生数量
     * @param count 学生数量
     * @return
     */
    Result addStudent(String classId, int count);
    /**
     * 获取个人已加入班级的课程及学习情况
     * 获取个人已加入班级的课程及学习情况
     *
     * @param classId
     * @return
@@ -102,20 +102,20 @@
    Result getAllClassLst();
    /**
     * 老师获取班级列表
     * 老师获取班级列表
     */
    List<ClsClass> getClassLstByTeacherId();
    /**
     * 查询老师或管理员可用的班级ID和名称列表
     * @param teacherId  根据教师ID过滤
     * @param subjectId  根据课程ID过滤
     * 查询老师或管理员可用的班级ID和名称列表
     * @param teacherId  根据教师ID过滤
     * @param subjectId  根据课程ID过滤
     * @return
     */
    List<Map<String, Object>> queryAvailableClassIdAndName(String teacherId,String subjectId);
    /**
     * app教师端班级列表
     * app教师端班级列表
     *
     * @param keyword
     * @param limit
@@ -125,21 +125,21 @@
    Result classList(String keyword, Pager pager, int type);
    /**
     * 根据班级ID获取班级名字,顺序与传入的id顺序一致
     * 根据班级ID获取班级名字,顺序与传入的id顺序一致
     * @param classIds
     * @return
     */
    String [] queryClassNamesByIds(String[] classIds);
    /**
     * 根据用户ID查询所用户加入的班级
     * 根据用户ID查询所用户加入的班级
     * @param userId
     * @return
     */
    List<ClsClass> queryStudentClassesByUserId(String userId);
    /**
     * 查询所有班级信息
     * 查询所有班级信息
     * @return
     */
    List<Map<String, Object>> queryAllClassIdAndName();
src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClassLectureService.java
@@ -115,13 +115,13 @@
    }
    /**
     * 课程课件
     * 课程课件
     *
     */
    @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()) {//公开课课件
        if(Subject.TYPE_PUBLIC_SUBJECT == subject.getType()) {//公开课课件
            return this.listOpenLectureBySubjectOrderCreateTime(subjectId, sort, pager);
        }
@@ -152,7 +152,7 @@
    }
    /**
     * 公开课课件
     * 公开课课件
     *
     * @param subjectId
     * @param sort
@@ -207,9 +207,9 @@
    }
    /**
     * 删除单个章节
     * 删除单个章节
     *
     * @param chapterId 章节id
     * @param chapterId 章节id
     * @return
     */
    private Result deleteChapter(String chapterId) {
@@ -243,13 +243,13 @@
        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());
@@ -257,7 +257,7 @@
            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);
@@ -266,7 +266,7 @@
            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);
            msgInfoService.doSendTextMsgToUsers(lstUserIds.toArray(new String[lstUserIds.size()]),MsgInfo.TYPE_COURSEWARE,"发布了课件",attrs);
        }
    }
@@ -311,7 +311,7 @@
    }
    /**
     * @param lectureId 课件id
     * @param lectureId 课件id
     * @return
     */
    private Result deleteLecture(String lectureId) {
@@ -320,7 +320,7 @@
        TraceUtils.setUpdateTrace(lecture);
        lecture.setDeleteFlag(true);
        save(lecture);
        deleteProgress(lectureId);// 删除对应的进度
        deleteProgress(lectureId);// 删除对应的进度
        return new Result(true, "success");
    }
@@ -411,7 +411,7 @@
    }
    /**
     * 我的公开课课件查询
     * 我的公开课课件查询
     *
     * @param subjectId
     * @return
@@ -439,7 +439,7 @@
    }
    /**
     * 查询数量
     * 查询数量
     *
     * @param subjectId
     * @param classId
@@ -459,7 +459,7 @@
        ClsSubjectLecture lecture = read(ClsSubjectLecture.class, lectureId);
        String resItemId = null;
        if(lecture == null) {
            resItemId = read(SubjectLecture.class, lectureId).getResItemId();//班级课件
            resItemId = read(SubjectLecture.class, lectureId).getResItemId();//班级课件
        }else {
            resItemId = lecture.getResItemId();
        }
@@ -598,7 +598,7 @@
    @Override
    public Result listSubjectLecture(String classId, String sort, Pager pager) {
        if(StringUtils.isEmpty(classId)) {
            return new Result(false, "班级id不能为空");
            return new Result(false, "班级id不能为空");
        }
        QMyLectureV qMyLectureV = QMyLectureV.myLectureV;
@@ -614,7 +614,7 @@
        long count = query.fetchCount();
        // 获取查询结果集合
        // 获取查询结果集合
        QueryResults<MyLectureV> results = query.limit(pager.getPageSize()).offset(pager.getOffset()).orderBy(order).fetchResults();
        List<Map<String,Object>> resultLst =
@@ -648,7 +648,7 @@
    }
    /**
     * 删除对应的课件
     * 删除对应的课件
     *
     * @param chapterId
     * @return
@@ -663,7 +663,7 @@
    /**
     * 获取章节下的课件
     * 获取章节下的课件
     *
     * @param chapterLst
     * @param lectures
@@ -693,7 +693,7 @@
    }
    /**
     * 获取章节的第一层数据
     * 获取章节的第一层数据
     *
     * @param chapterLst
     * @return
@@ -742,7 +742,7 @@
    }
     /**
     * 课件按目录分类
     * 课件按目录分类
     *
     * @param classId
     * @param subjectId
@@ -752,9 +752,9 @@
    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()) {//公开课和管理员课程
        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);
@@ -766,15 +766,15 @@
                    try {
                        BeanUtils.copyProperties(objClsSubjectChapter, objSubjectChapter);
                    } catch (IllegalAccessException e) {
                        log.error("拷贝属性失败BeanUtils.copyProperties(objClsSubjectChapter, objSubjectChapter)", e);
                        log.error("拷贝属性失败BeanUtils.copyProperties(objClsSubjectChapter, objSubjectChapter)", e);
                    } catch (InvocationTargetException e) {
                        log.error("拷贝属性失败BeanUtils.copyProperties(objClsSubjectChapter, objSubjectChapter)", e);
                        log.error("拷贝属性失败BeanUtils.copyProperties(objClsSubjectChapter, objSubjectChapter)", e);
                    }
                    lstClsSubjectChapter.add(objClsSubjectChapter);
                }
            }
            //章节
            //章节
            List<ClsSubjectChapter> chapterLst = this.getChapterLectures(lstClsSubjectChapter, lectures);
            long count =  this.getQueryFactory().selectFrom(qSubjectLecture)
@@ -785,9 +785,9 @@
                    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,
src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClsClassService.java
@@ -34,7 +34,7 @@
import com.qxueyou.scc.teach.subject.model.Subject;
/**
 * 班级服务类
 * 班级服务类
 *
 * @author xiadehu
 */
@@ -57,7 +57,7 @@
    ILectureService lectureService;
    /**
     * 添加班级
     * 添加班级
     */
    @Override
    public Result insertClass(String className, String classNumber, Date startTime, Date endTime, String subjectId,
@@ -77,7 +77,7 @@
        return new Result(true, "success",CollectionUtils.newStringMap("classId",cls.getClassId()));
    }
    /**
     * 添加补考班级班级
     * 添加补考班级班级
     */
    @Override
    public Result insertReClass(String className, String classNumber, Date startTime, Date endTime, String subjectId,
@@ -136,7 +136,7 @@
    }
    /**
     * 获取班级列表
     * 获取班级列表
     */
    @Override
    public List<ClsClass> getClassLst(String keyword, String teacherId, Integer pageSize, Integer pageNum, Integer pageType) {
@@ -197,15 +197,15 @@
    }
    /**
     * 删除班级
     * 删除班级
     */
    @Override
    public Result deleteClass(String[] classIds) {
        for (String classId : classIds) {
            deleteClass(classId);
            //删除班级学员
            //删除班级学员
            this.deleteStudent(classId);
            //删除班级课程
            //删除班级课程
            this.deleteClassSubject(classId);
        }
@@ -213,21 +213,21 @@
    }
    /**
     * 删除班级学员
     * 删除班级学员
     */
    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
     * @param classId 班级id
     * @return
     */
    private Result deleteClass(String classId) {
@@ -317,7 +317,7 @@
    @Override
    public List<Map<String,Object>> queryAvailableClassIdAndName(String teacherId,String subjectId) {
        StringBuffer hql = new StringBuffer(1000);
        // and c.endTime>=sysdate() 增加条件过滤掉历史班级
        // 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());
@@ -356,22 +356,22 @@
    /**
     * 查询班级
     * 查询班级
     *
     * type 1正常班級,2历史班級
     * type 1正常班級,2历史班級
     */
    public Result classList(String keyword, Pager pager, int type) {
        //获取老师id
        //获取老师id
        String teacherId = teacherService.getTeacherIdByUserId(ClientUtils.getUserId());
        if (StringUtils.isEmpty(teacherId)) {
            return new Result(false, "非老师角色无法查看班级");
            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)
@@ -383,7 +383,7 @@
                        .and(qClsClassReSubject.subjectId.eq(qSubject.subjectId)))
                .groupBy(qClsClass.classId);
        //总数
        //总数
        long count = queryDsl.fetchCount();
        //listData
@@ -408,7 +408,7 @@
                                                .and(qSubjectProgressTreeV.nodeType.eq(Progress.PROGRESS_TYPE_SUBJECT)))
                                        .groupBy(qSubjectProgressTreeV.id.nodeId).fetchOne());
                    } else {
                        map.put("subjectName", "暂无开班课程");
                        map.put("subjectName", "暂无开班课程");
                        map.put("progressPercent", 0);
                    }
                    return map;
src/main/java/com/qxueyou/scc/admin/classroom/model/ClassRoom.java
@@ -30,7 +30,7 @@
    private static final long serialVersionUID = -8815707507227185401L;
    
    /*
     * 草稿 :0  已发布:1
     * 草稿 :0  已发布:1
     */
    public static final short STATUS_DRAFT = 0;
    
@@ -58,25 +58,25 @@
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /** 修改人ID */
    /** 修改人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")
src/main/java/com/qxueyou/scc/admin/classroom/service/IClassRoomService.java
@@ -10,82 +10,82 @@
public interface IClassRoomService {
    /**
     * 新增教室
     * 新增教室
     * 
     * @param ClassRoom 教室
     * @param ClassRoom 教室
     *            
     * @return
     */
    String add(ClassRoom classRoom);
    /**
     * 修改教室
     * 修改教室
     * 
     * @param ClassRoom 教室
     * @param ClassRoom 教室
     * 
     * @return
     */
    Result update(ClassRoom classRoom);
    /**
     * 删除教室
     * 删除教室
     * 
     * @param roomIds  课表ID数组
     * @param roomIds  课表ID数组
     *           
     */
    Result delete(String[] roomIds);
    /**
     * 发布教室
     * 发布教室
     * 
     * @param roomIds  教室ID数组
     * @param roomIds  教室ID数组
     *           
     */
    Result doRelease(String[] roomIds);
    /**
     * 撤回教室
     * 撤回教室
     * 
     * @param roomIds 教室id数组
     * @param roomIds 教室id数组
     *            
     */
    Result doCancel(String[] roomIds);
    /**
     * 查询教室
     * 查询教室
     * 
     * @param keyword   搜索文本(教室名称)
     * @param keyword   搜索文本(教室名称)
     *           
     * @param status  ״̬
     * @param status  状态
     *           
     * @param pageSize 页码
     * @param pageSize 页码
     *            
     * @param pageNum   每页显示行数
     * @param pageNum   每页显示行数
     *           
     * @return 返回课程列表
     * @return 返回课程列表
     */
    List<ClassRoom> list(String keyword,Short status,Integer pageSize, Integer pageNum);
    /**
     * 查询教室个数
     * 查询教室个数
     * 
     * @param keyword 搜索文本(教室名称)
     * @param keyword 搜索文本(教室名称)
     *            
     * @return 返回教室总数
     * @return 返回教室总数
     */
    int listCount(String keyword,Short status);
    /**
     * 读取教室详情
     * 读取教室详情
     * 
     * @param roomId 教室ID
     * @param roomId 教室ID
     *            
     * @return 返回教室详情信息
     * @return 返回教室详情信息
     */
    ClassRoom detail(String roomId);
    
    /**
     * 获取教室ID和名称列表
     * 获取教室ID和名称列表
     * @return
     */
    List<Map<String, Object>> queryAllRoomIdAndNames();
src/main/java/com/qxueyou/scc/admin/classroom/service/impl/ClassRoomService.java
@@ -31,7 +31,7 @@
        ClassRoom newClassRoom = read(ClassRoom.class, classRoom.getRoomId());
        if (newClassRoom == null) {
            return new Result(false, "教室不存在");
            return new Result(false, "教室不存在");
        }
        TraceUtils.setUpdateTrace(newClassRoom);
@@ -53,7 +53,7 @@
    @Override
    public Result doRelease(String[] roomIds) {
        if(roomIds==null || roomIds.length==0){
            return new Result(false, "没有选择要发布的教室");
            return new Result(false, "没有选择要发布的教室");
        }
        
        List<ClassRoom> lstClsRoom = this.findByComplexHql("from ClassRoom where roomId in (:roomIds)", 
@@ -61,7 +61,7 @@
        for (ClassRoom room : lstClsRoom) {
            if (ExamInfo.STATUS_DRAFT != room.getStatus()) {
                return new Result(false, "只有草稿状态的教室,才能发布。");
                return new Result(false, "只有草稿状态的教室,才能发布。");
            }
            room.setStatus(ClassRoom.STATUS_PUBLISH);
            TraceUtils.setUpdateTrace(room);
@@ -74,7 +74,7 @@
    @Override
    public Result doCancel(String[] roomIds) {
        if(roomIds==null || roomIds.length==0){
            return new Result(false, "没有选择要撤回的教室");
            return new Result(false, "没有选择要撤回的教室");
        }
        
        List<ClassRoom> lstClsRoom = this.findByComplexHql("from ClassRoom where roomId in (:roomIds)", 
@@ -82,7 +82,7 @@
        
        for (ClassRoom room : lstClsRoom) {
            if (ExamInfo.STATUS_PUBLISH != room.getStatus()) {
                return new Result(false, "只有发布状态的 教室,才能撤回");
                return new Result(false, "只有发布状态的 教室,才能撤回");
            }
            room.setStatus(ExamInfo.STATUS_DRAFT);
            TraceUtils.setUpdateTrace(room);
src/main/java/com/qxueyou/scc/admin/course/model/CourseSchedule.java
@@ -50,14 +50,14 @@
    private static final long serialVersionUID = -6281684815713519425L;
    /*
     * 草稿 :0  已发布:1
     * 草稿 :0  已发布:1
     */
    public static final short STATUS_DRAFT = 0;
    
    public static final short STATUS_PUBLISH = 1;
        
    /*
     * 非开放 :0  ,开放:1
     * 非开放 :0  ,开放:1
     */
    public static final short OPEN_FALSE = 0;
    
@@ -132,23 +132,23 @@
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /** 修改人ID */
    /** 修改人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;
src/main/java/com/qxueyou/scc/admin/course/model/CourseScheduleDetail.java
@@ -60,20 +60,20 @@
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /** 修改人ID */
    /** 修改人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;
src/main/java/com/qxueyou/scc/admin/course/model/CourseScheduleReCls.java
@@ -60,20 +60,20 @@
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /** 修改人ID */
    /** 修改人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;
src/main/java/com/qxueyou/scc/admin/course/service/ICourseScheduleService.java
@@ -9,82 +9,82 @@
public interface ICourseScheduleService {
    
    /**
     * 新增课表
     * 新增课表
     * 
     * @param courseSchedule 课表
     * @param courseSchedule 课表
     *            
     * @return
     */
    String add(CourseSchedule courseSchedule)  throws Exception;
    /**
     * 修改课表
     * 修改课表
     * 
     * @param courseSchedule 课表
     * @param courseSchedule 课表
     * 
     * @return
     */
    Result update(CourseSchedule courseSchedule)  throws Exception;
    /**
     * 删除课表
     * 删除课表
     * 
     * @param scheduleIds  课表ID数组
     * @param scheduleIds  课表ID数组
     *           
     */
    Result delete(String[] scheduleIds);
    /**
     * 发布课表
     * 发布课表
     * 
     * @param scheduleIds  课表ID数组
     * @param scheduleIds  课表ID数组
     *           
     */
    Result doRelease(String[] scheduleIds);
    /**
     * 撤回课表
     * 撤回课表
     * 
     * @param scheduleIds 课表id数组
     * @param scheduleIds 课表id数组
     *            
     */
    Result doCancel(String[] scheduleIds);
    /**
     * 查询课表
     * 查询课表
     * 
     * @param keyword   搜索文本(课程名称)
     * @param keyword   搜索文本(课程名称)
     *           
     * @param status  ״̬
     * @param status  状态
     *           
     * @param pageSize 页码
     * @param pageSize 页码
     *            
     * @param pageNum   每页显示行数
     * @param pageNum   每页显示行数
     *           
     * @return 返回课程列表
     * @return 返回课程列表
     */
    List<CourseSchedule> list(String keyword,Short status,Integer pageSize, Integer pageNum);
    /**
     * 查询课表个数
     * 查询课表个数
     * 
     * @param keyword 搜索文本
     * @param keyword 搜索文本
     *            
     * @return 返回课表总数
     * @return 返回课表总数
     */
    int listCount(String keyword,Short status);
    /**
     * 读取课表详情
     * 读取课表详情
     * 
     * @param scheduleId 课表ID
     * @param scheduleId 课表ID
     *            
     * @return 返回课表列表
     * @return 返回课表列表
     */
    CourseSchedule detail(String scheduleId);
    /**
     * 获取课程列表
     * 获取课程列表
     * @param date
     * @param pageSize
     * @param pageNum
@@ -94,7 +94,7 @@
    List<CourseSchedule> listTeacherOfSchedule(String date, Integer pageSize, Integer pageNum) throws Exception;
    
    /**
     * 获取课程列表数量
     * 获取课程列表数量
     * @param date
     * @param pageSize
     * @param pageNum
@@ -104,7 +104,7 @@
    int listTeacherOfScheduleCount(String date, Integer pageSize, Integer pageNum) throws ParseException;
    
    /**
     * 获取学生课表列表
     * 获取学生课表列表
     * @param date
     * @param pageSize
     * @param pageNum
@@ -114,7 +114,7 @@
    List<CourseSchedule> listStudentSchedule(String date, Integer pageSize, Integer pageNum) throws Exception;
    
    /**
     * 获取学生课表列表数量
     * 获取学生课表列表数量
     * @param date
     * @param pageSize
     * @param pageNum
@@ -124,7 +124,7 @@
    int listStudentScheduleCount(String date, Integer pageSize, Integer pageNum) throws Exception;
    
    /**
     * 查询有课日期标识
     * 查询有课日期标识
     * @param year
     * @param month
     * @return
src/main/java/com/qxueyou/scc/admin/course/service/impl/CourseScheduleService.java
@@ -47,7 +47,7 @@
        courseSchedule.setOrgId(ClientUtils.getOrgId());
        courseSchedule.setStatus(CourseSchedule.STATUS_DRAFT);
        
        //保存教师信息
        //保存教师信息
        UserTeacher teacher= teacherService.getTeacherByUserId(ClientUtils.getUserId());
        
        if(teacher!=null){
@@ -68,11 +68,11 @@
        
        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();
@@ -83,7 +83,7 @@
        CourseSchedule newCourseSchedule = read(CourseSchedule.class, courseSchedule.getScheduleId());
        if (newCourseSchedule == null) {
            return new Result(false, "课表不存在");
            return new Result(false, "课表不存在");
        }
        TraceUtils.setUpdateTrace(newCourseSchedule);
@@ -100,7 +100,7 @@
        newCourseSchedule.setSatTime(courseSchedule.getSatTime());
        newCourseSchedule.setSumTime(courseSchedule.getSumTime());
        
        //保存教师信息
        //保存教师信息
        UserTeacher teacher= teacherService.getTeacherByUserId(ClientUtils.getUserId());
                
        if(teacher!=null){
@@ -123,18 +123,18 @@
        
        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
     */
@@ -142,7 +142,7 @@
        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());  
        }
@@ -171,7 +171,7 @@
    @Override
    public Result doRelease(String[] scheduleIds) {
        if(scheduleIds==null || scheduleIds.length==0){
            return new Result(false, "没有选择要发布的课表");
            return new Result(false, "没有选择要发布的课表");
        }
        
        List<CourseSchedule> lstCourseSchedule = this.findByComplexHql("from CourseSchedule where scheduleId in (:scheduleIds)", 
@@ -179,7 +179,7 @@
        for (CourseSchedule schedule : lstCourseSchedule) {
            if (CourseSchedule.STATUS_DRAFT != schedule.getStatus()) {
                return new Result(false, "只有草稿状态的课表,才能发布。");
                return new Result(false, "只有草稿状态的课表,才能发布。");
            }
            schedule.setStatus(ClassRoom.STATUS_PUBLISH);
            TraceUtils.setUpdateTrace(schedule);
@@ -192,7 +192,7 @@
    @Override
    public Result doCancel(String[] scheduleIds) {
        if(scheduleIds==null || scheduleIds.length==0){
            return new Result(false, "没有选择要撤回的课表");
            return new Result(false, "没有选择要撤回的课表");
        }
        
        List<CourseSchedule> lstCourseSchedule = this.findByComplexHql("from CourseSchedule where scheduleId in (:scheduleIds)", 
@@ -200,7 +200,7 @@
        
        for (CourseSchedule schedule : lstCourseSchedule) {
            if (CourseSchedule.STATUS_PUBLISH != schedule.getStatus()) {
                return new Result(false, "只有发布状态的课表,才能撤回");
                return new Result(false, "只有发布状态的课表,才能撤回");
            }
            schedule.setStatus(ExamInfo.STATUS_DRAFT);
            TraceUtils.setUpdateTrace(schedule);
@@ -247,7 +247,7 @@
        return this.read(CourseSchedule.class, courseScheduleId);
    }
    
    //查询当前的课表明细信息,
    //查询当前的课表明细信息,
    @Override
    public List<CourseSchedule> listTeacherOfSchedule(String date,Integer pageSize, Integer pageNum) throws Exception{
        
@@ -275,7 +275,7 @@
        return findList(hql.toString(),new Pager(pageSize, pageNum),params, CourseSchedule.class);
    }    
    
    //查询当前的课表明细信息
    //查询当前的课表明细信息
    @Override
    public int listTeacherOfScheduleCount(String date,Integer pageSize, Integer pageNum) throws ParseException{
        
@@ -301,7 +301,7 @@
        return findCount(hql.toString(),params);
    }
    
    //查询当前的课表明细信息
    //查询当前的课表明细信息
    @Override
    public List<CourseSchedule> listStudentSchedule(String date,Integer pageSize, Integer pageNum) throws Exception{
        StringBuffer hql = new StringBuffer(1000);
@@ -323,7 +323,7 @@
        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);
@@ -345,12 +345,12 @@
    }
    
    //生成明细数据
    //生成明细数据
    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);
@@ -358,7 +358,7 @@
            this.bulkUpdateInLoop("delete from CourseScheduleDetail  where detailId=?", detailIdLst.toArray());  
        }
            
        //重新生成新的明细
        //重新生成新的明细
        Calendar cal = Calendar.getInstance();
        cal.setTime(courseSchedule.getBeginTime());
        cal.set(Calendar.HOUR, 0);
src/main/java/com/qxueyou/scc/admin/examroom/model/ExamRoom.java
@@ -23,7 +23,7 @@
    private static final long serialVersionUID = -8815707507227185401L;
    
    /*
     * 草稿 :0  已发布:1
     * 草稿 :0  已发布:1
     */
    public static final short STATUS_DRAFT = 0;
    
@@ -57,25 +57,25 @@
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /** 修改人ID */
    /** 修改人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() {
src/main/java/com/qxueyou/scc/admin/examroom/service/IExamRoomService.java
@@ -9,82 +9,82 @@
public interface IExamRoomService {
    /**
     * 新增考场
     * 新增考场
     * 
     * @param examRoom 考场
     * @param examRoom 考场
     *            
     * @return
     */
    String add(ExamRoom examRoom);
    /**
     * 修改考场
     * 修改考场
     * 
     * @param examRoom 考场
     * @param examRoom 考场
     * 
     * @return
     */
    Result update(ExamRoom examRoom);
    /**
     * 删除考场
     * 删除考场
     * 
     * @param roomIds  课表ID数组
     * @param roomIds  课表ID数组
     *           
     */
    Result delete(String[] roomIds);
    /**
     * 发布考场
     * 发布考场
     * 
     * @param roomIds  考场ID数组
     * @param roomIds  考场ID数组
     *           
     */
    Result doRelease(String[] roomIds);
    /**
     * 撤回考场
     * 撤回考场
     * 
     * @param roomIds 考场id数组
     * @param roomIds 考场id数组
     *            
     */
    Result doCancel(String[] roomIds);
    /**
     * 查询考场
     * 查询考场
     * 
     * @param keyword   搜索文本(考场名称)
     * @param keyword   搜索文本(考场名称)
     *           
     * @param status  ״̬
     * @param status  状态
     *           
     * @param pageSize 页码
     * @param pageSize 页码
     *            
     * @param pageNum   每页显示行数
     * @param pageNum   每页显示行数
     *           
     * @return 返回课程列表
     * @return 返回课程列表
     */
    List<ExamRoom> list(String roomId, String keyword, Short status, Integer pageSize, Integer pageNum);
    /**
     * 查询考场个数
     * 查询考场个数
     *
     * @param keyword 搜索文本(考场名称)
     * @param keyword 搜索文本(考场名称)
     *
     * @return 返回考场总数
     * @return 返回考场总数
     */
    int listCount(String roomId,String keyword, Short status);
    /**
     * 读取考场详情
     * 读取考场详情
     * 
     * @param roomId 考场ID
     * @param roomId 考场ID
     *            
     * @return 返回考场详情信息
     * @return 返回考场详情信息
     */
    ExamRoom detail(String roomId);
    
    /**
     * 获取考场ID和名称列表
     * 获取考场ID和名称列表
     * @return
     */
    List<Map<String, Object>> queryAllRoomIdAndNames();
src/main/java/com/qxueyou/scc/admin/examroom/service/impl/ExamRoomService.java
@@ -30,7 +30,7 @@
        ExamRoom newExamRoom = read(ExamRoom.class, examRoom.getExamroomId());
        if (newExamRoom == null) {
            return new Result(false, "考场不存在");
            return new Result(false, "考场不存在");
        }
        TraceUtils.setUpdateTrace(newExamRoom);
@@ -52,7 +52,7 @@
    @Override
    public Result doRelease(String[] examroomIds) {
        if(examroomIds==null || examroomIds.length==0){
            return new Result(false, "没有选择要发布的考场");
            return new Result(false, "没有选择要发布的考场");
        }
        
        List<ExamRoom> lstClsRoom = this.findByComplexHql("from ExamRoom where examroomId in (:examroomIds)",
@@ -60,7 +60,7 @@
        for (ExamRoom room : lstClsRoom) {
            if (ExamInfo.STATUS_DRAFT != room.getStatus()) {
                return new Result(false, "只有草稿状态的考场,才能发布。");
                return new Result(false, "只有草稿状态的考场,才能发布。");
            }
            room.setStatus(ExamRoom.STATUS_PUBLISH);
            TraceUtils.setUpdateTrace(room);
@@ -73,7 +73,7 @@
    @Override
    public Result doCancel(String[] examroomIds) {
        if(examroomIds==null || examroomIds.length==0){
            return new Result(false, "没有选择要撤回的考场");
            return new Result(false, "没有选择要撤回的考场");
        }
        
        List<ExamRoom> lstClsRoom = this.findByComplexHql("from ExamRoom where examroomId in (:examroomIds)",
@@ -81,7 +81,7 @@
        
        for (ExamRoom room : lstClsRoom) {
            if (ExamInfo.STATUS_PUBLISH != room.getStatus()) {
                return new Result(false, "只有发布状态的 考场,才能撤回");
                return new Result(false, "只有发布状态的 考场,才能撤回");
            }
            room.setStatus(ExamInfo.STATUS_DRAFT);
            TraceUtils.setUpdateTrace(room);
src/main/java/com/qxueyou/scc/admin/notice/dao/NoticeDAO.java
@@ -47,18 +47,18 @@
    }
    /**
     * 记录已读的学员
     * 记录已读的学员
     *
     * @param noticeId
     * @param userId
     */
    public void addReadCount(String noticeId, String userId) {
        cache.lstRemove("noticeReadCount" + noticeId, userId);//删除用户之前查看的记录,避免重复记录;
        cache.lstRemove("noticeReadCount" + noticeId, userId);//删除用户之前查看的记录,避免重复记录;
        cache.lstRightPush("noticeReadCount" + noticeId, userId);
    }
    /**
     * 获取已读的学员人数
     * 获取已读的学员人数
     */
    public int getReadCount(String noticeId) {
        List<Object> lstAll = cache.lstAll("noticeReadCount" + noticeId);
@@ -66,7 +66,7 @@
    }
    /**
     * 删除cache的key
     * 删除cache的key
     */
    public void deleteNoticeForCache(String noticeId) {
        cache.delete("noticeReadCount" + noticeId);
src/main/java/com/qxueyou/scc/admin/notice/service/INoticeService.java
@@ -9,124 +9,124 @@
public interface INoticeService {
    /**
     * 新增通知
     * 新增通知
     *
     * @param name     通知名称
     * @param content  通知介绍
     * @param type     通知类型
     * @param classIds 班级ids
     * @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
     * @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
     * @param noticeId 通知Id
     * @return
     */
    Notice read(String noticeId);
    /**
     * 查询通知
     * 查询通知
     *
     * @param noticeIdLst ֪ͨId
     * @param noticeIdLst 通知Id
     * @return
     */
    List<Notice> readByStatus(Collection<String> noticeIdLst, short status);
    /**
     * 查询通知
     * 查询通知
     *
     * @param keyword  查询关键字
     * @param pageNum  页码
     * @param pageSize 每页数据大小
     * @param sort     排序
     * @param keyword  查询关键字
     * @param pageNum  页码
     * @param pageSize 每页数据大小
     * @param sort     排序
     * @return
     */
    List<Notice> list(String keyword, Integer pageNum, Integer pageSize, String createId, String sort);
    /**
     * 查询通知总数
     * 查询通知总数
     *
     * @param keyword 查询关键字
     * @param keyword 查询关键字
     * @return
     */
    int listCount(String keyword, String createId);
    /**
     * 删除通知
     * 删除通知
     *
     * @param noticeId ֪ͨID
     * @param noticeId 通知ID
     * @return
     */
    Result delete(String noticeId);
    /**
     * 删除通知
     * 删除通知
     *
     * @param noticeIds 通知ID数组
     * @param noticeIds 通知ID数组
     * @return
     */
    Result delete(String[] noticeIds);
    /**
     * 发布通知
     * 发布通知
     *
     * @param noticeId ֪ͨID
     * @param noticeId 通知ID
     * @return
     */
    Result doIssue(String noticeId);
    /**
     * 发布通知
     * 发布通知
     *
     * @param noticeId ֪ͨID
     * @param noticeId 通知ID
     * @return
     */
    Result doIssue(String[] noticeIds);
    /**
     * 取消通知
     * 取消通知
     *
     * @param noticeId ֪ͨID
     * @param noticeId 通知ID
     * @return
     */
    Result doCancel(String noticeId);
    /**
     * 取消通知
     * 取消通知
     *
     * @param noticeId ֪ͨID
     * @param noticeId 通知ID
     * @return
     */
    Result doCancel(String[] noticeIds);
    /**
     * 读取通知班级
     * 读取通知班级
     *
     * @param noticeId ֪ͨID
     * @param noticeId 通知ID
     * @return
     */
    List<String> getNoticeClasses(String noticeId);
    /**
     * 查看通知
     * 查看通知
     *
     * @param noticeId ֪ͨID
     * @param noticeId 通知ID
     * @return
     */
    Result view(String noticeId);
src/main/java/com/qxueyou/scc/admin/notice/service/impl/NoticeService.java
@@ -150,7 +150,7 @@
        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);
@@ -160,7 +160,7 @@
                    "creator",notice.getCreator(),"noticeTypeName",notice.getNoticeTypeName());
                
            msgInfoService.doSendTextMsgToUsers(lstUserIds.toArray(new String[lstUserIds.size()]), 
                                            MsgInfo.TYPE_NOTICE," 发布了公告", attrs);
                                            MsgInfo.TYPE_NOTICE," 发布了公告", attrs);
        }
    }
    
src/main/java/com/qxueyou/scc/admin/progress/dao/ProgressDAO.java
@@ -29,12 +29,12 @@
    }
    /**
     * 根据targetId和learnerId获取进度
     * 根据targetId和learnerId获取进度
     *
     * @param targetId
     *            targetId
     * @param learnerId
     *            学习者id
     *            学习者id
     * @return
     */
    @Cacheable(value = "progress", key = "#targetId+#learnerId")
@@ -59,7 +59,7 @@
    }
    /**
     * 获取学生的各个节点的学习进度,进度值
     * 获取学生的各个节点的学习进度,进度值
     *
     * @param parentId
     * @param userId
@@ -75,7 +75,7 @@
    }
    /**
     * 获取当前节点下的父节点
     * 获取当前节点下的父节点
     *
     * @param nodeId
     * @return
@@ -88,7 +88,7 @@
    }
    /**
     * 根据subjectId获取章节列表
     * 根据subjectId获取章节列表
     *
     * @param parentId
     * @param userId
@@ -101,7 +101,7 @@
    }
    /**
     * 获取progress 对象
     * 获取progress 对象
     */
    public Progress getProgressObject(String targetId, String userId) {
        return findUniqueByHql(
@@ -110,7 +110,7 @@
    }
    /**
     * 记录用户每个课程学习的位置
     * 记录用户每个课程学习的位置
     */
    @CachePut(value = "lastStudied", key = "#userId + #subjectId + #classId")
    public Map<String, Object> putStudyById(String userId, String subjectId, String lectureId, String lectureParentId,
@@ -137,7 +137,7 @@
    }
    /**
     * 获取用户每个课程上次学习的数据
     * 获取用户每个课程上次学习的数据
     */
    @Cacheable(value = "lastStudied", key = "#userId + #subjectId +#classId")
    public Map<String, Object> getStudyById(String userId, String subjectId, String classId) {
@@ -145,7 +145,7 @@
    }
    /**
     * 获取用户上次学习的数据
     * 获取用户上次学习的数据
     */
    @Cacheable(value = "lastStudied", key = "#userId")
    public Map<String, Object> getStudyByUserId(String userId) {
src/main/java/com/qxueyou/scc/admin/progress/model/SubjectLectureProgressDetail.java
@@ -18,7 +18,7 @@
import com.qxueyou.scc.base.model.ITrace;
/**
 * 学习进度明细
 * 学习进度明细
 *
 * @author sven
 *
src/main/java/com/qxueyou/scc/admin/schoolRoll/impl/SchoolRollServiceImpl.java
@@ -68,7 +68,7 @@
                stuStudent.setClassId(classId);
                save(stuStudent);
            }else {
                return new Result(false,"班级不存在或学生不存在");
                return new Result(false,"班级不存在或学生不存在");
            }
        }
@@ -85,7 +85,7 @@
        List<StuStudent> stuStudents = find(hql.toString(), args, StuStudent.class);
        ExcelExportUtils<StuStudent> ex = new ExcelExportUtils<StuStudent>();
        String[] headers = { "姓名", "性别" ,"手机号" ,"身份证"};
        String[] headers = { "姓名", "性别" ,"手机号" ,"身份证"};
        List<StuStudent> dataset = new ArrayList<StuStudent>();
        for (StuStudent stuStudent:
        stuStudents) {
@@ -106,7 +106,7 @@
            obj.setOut(out);
            ex.exportExcel(obj);
            out.close();
            System.out.println("excel导出成功!");
            System.out.println("excel导出成功!");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
@@ -122,7 +122,7 @@
            obj.setOut(out);
            ex.exportExcelByColomn(obj);
            out.close();
            System.out.println("excel指定列导出成功!");
            System.out.println("excel指定列导出成功!");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
src/main/java/com/qxueyou/scc/admin/score/action/ScoreController.java
@@ -30,13 +30,13 @@
import java.util.List;
import java.util.Map;
@Api(tags = "成绩管理接口")
@Api(tags = "成绩管理接口")
@Controller
@CrossOrigin(origins="*",maxAge=3600)
@RequestMapping(value = "admin/score")
public class ScoreController {
    // 分页查询中,默认记录条数和页数
    // 分页查询中,默认记录条数和页数
    private static final int DEFAULT_PAGE_SIZE = 10;
    private static final int DEFAULT_PAGE_NUM = 1;
@@ -63,7 +63,7 @@
        List<Map<String,Object>> mapList = new ArrayList<>();
        List<ExamResultV> examResultVS =  scoreService.allExamResultV(classId);
        List<ExerciseResultV> exerciseResultVS = scoreService.allExerciseResultV(classId);
        //总成绩数量
        //总成绩数量
        int totalCount = scoreService.findCount("from ExamResultV where class_Id Like ? and score != null and score != 0",CollectionUtils.newList(classId));
        if (examResultVS.size() < exerciseResultVS.size()){
            totalCount = exerciseResultVS.size();
src/main/java/com/qxueyou/scc/admin/score/service/IScoreService.java
@@ -10,27 +10,27 @@
public interface IScoreService {
    /**
     * 获取班级考试成绩信息
     * 获取班级考试成绩信息
     * @param classId
     * @return
     */
    Map<String,Object> queryClassExamScoreInfo(String classId);
    /**
     * 获取班级作业成绩信息
     * 获取班级作业成绩信息
     * @param classId
     * @return
     */
    Map<String,Object> queryClassHomeworkScoreInfo(String classId);
    /**
     * 获取考试成绩信息
     * 获取考试成绩信息
     * @return
     */
    List<ExamResultV> allExamResultV(String classId);
    /**
     *获取作业成绩信息
     *获取作业成绩信息
     */
    List<ExerciseResultV> allExerciseResultV(String classId);
src/main/java/com/qxueyou/scc/admin/teacher/service/ITeacherService.java
@@ -8,23 +8,23 @@
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);
@@ -36,12 +36,12 @@
    int findTeacherCount(String keyword);
    /**
     * 新增班级获取教师列表
     * 新增班级获取教师列表
     */
    List<UserTeacher> LstTeacher4Cls();
    /**
     * 角色管理获取教师列表
     * 角色管理获取教师列表
     * 
     * @param keyword
     * @param pageSize
@@ -51,7 +51,7 @@
    List<Map<String, Object>> findLstToRole(String keyword, Integer pageSize, Integer pageNum, String roleId);
    /**
     * 角色管理获取教师总条数
     * 角色管理获取教师总条数
     * 
     * @param roleId
     * @param keyword
@@ -60,17 +60,17 @@
    int findLstCountToRole(String roleId, String keyword);
    /**
     * 获取userId
     * 获取userId
     */
    String getTeacherIdByUserId(String teacherId);
    /**
     * 获取userId
     * 获取userId
     */
    UserTeacher getTeacherByUserId(String userId);
    
    /**
     * 获取教师信息
     * 获取教师信息
     * 
     * @param teacherId
     * @return
src/main/java/com/qxueyou/scc/admin/teacher/service/impl/TeacherService.java
@@ -37,13 +37,13 @@
    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, "老师编号已存在或被其他用户占用");
            return new Result(false, "老师编号已存在或被其他用户占用");
        }
        User user = userService.insertUser(teacherName, teacherNo, mobilePhone, password, Boolean.FALSE, ClientUtils.getOrgId());
@@ -64,13 +64,13 @@
    }
    /**
     * 更新
     * 更新
     */
    @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, "手机号已存在");
            return new Result(false, "手机号已存在");
        }
        UserTeacher teacher = read(UserTeacher.class, teacherId);
@@ -94,7 +94,7 @@
    }
    /**
     * 教师管理显示列表
     * 教师管理显示列表
     */
    @Override
    public List<UserTeacher> lstTeacher(String keyword, Integer pageSize, Integer pageNum) {
@@ -108,7 +108,7 @@
    }
    
    /**
     * 获取教师总条数
     * 获取教师总条数
     */
    @Override
    public int findTeacherCount(String keyword) {
@@ -139,7 +139,7 @@
    }
    /**
     * 教师管理 删除教师
     * 教师管理 删除教师
     */
    @Override
    public Result deleteTeacher(String[] teacherIds) {
@@ -205,7 +205,7 @@
        User u = this.read(User.class, ClientUtils.getUserId());
        String teacherId = this.getTeacherIdByUserId(u.getUserId());
        if(StringUtils.isEmpty(teacherId)) {
            return new Result(false, "当前用户无教师角色信息");
            return new Result(false, "当前用户无教师角色信息");
        }
        
        long subjectCount = this.getQueryFactory().selectDistinct(subject.subjectId).from(subject)
src/main/java/com/qxueyou/scc/base/StsCtrl.java
@@ -24,7 +24,7 @@
import com.qxueyou.scc.sys.service.IOssService;
/**
 * aliyun资源临时授权
 * aliyun资源临时授权
 * @author cyq
 *
 */
@@ -45,13 +45,13 @@
    IOssService ossService;
    
    /**
     * 公共数据访问对象
     * 公共数据访问对象
     */
    @Autowired
    private CommonDAO commonDAO;
    
    /**
     * 获取视频的m3u8访问权限,用获取临时访问权限的key路径作为解密密钥,临时生成m3u8文件,并上传到阿里云,并返回路径
     * 获取视频的m3u8访问权限,用获取临时访问权限的key路径作为解密密钥,临时生成m3u8文件,并上传到阿里云,并返回路径
     * @param videoId
     * @param definition
     * @return
@@ -59,11 +59,11 @@
    @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, "参数错误");
            return new Result(false, "参数错误");
        }
        
//        json.put("result", "success");
//        // 检查缓存中是否有可用的url,如果有,则直接返回
//        // 检查缓存中是否有可用的url,如果有,则直接返回
//        String urlCache = cacheService.get("sts_url_" + resId, String.class);
//        if (StringUtils.isNotEmpty(urlCache)) {
//            json.put("url", urlCache);
@@ -76,14 +76,14 @@
            MediaVideo video = commonDAO.read(MediaVideo.class, videoId);
            
            if (video == null) {
                return new Result(false, "资源不存在");
                return new Result(false, "资源不存在");
            }
            
            String resId = "";
            String resUrl = null;
            JSONObject json = null;
            
            //判断是否是mp3等音乐格式文件,如果是则直接返回original地址
            //判断是否是mp3等音乐格式文件,如果是则直接返回original地址
            if(checkIsVoiceMedia(video)){
                json =  new JSONObject();
                json.put("result", "success");
@@ -94,14 +94,14 @@
            
            resUrl = this.getM3u8ResUrl(def, video);
            
            //判断是否是加密视频,未加密则直接返回视频地址
            //判断是否是加密视频,未加密则直接返回视频地址
            if(StringUtils.isEmpty(video.getSecretKey())){
                //如果未转码加密,且m3u8视频不存在,则尝试读取MP4视频。
                //如果未转码加密,且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, "资源不存在");
                        return new Result(false, "资源不存在");
                    }
                }
                
@@ -110,9 +110,9 @@
                json.put("url", video.getOrigUrl().substring(video.getOrigUrl().indexOf("/video/") + 1));
                json.put("isConver",false);
            }else{
                //如果转码加密后,依然不能读取到M3U8视频或读取到的是MP4直接返回,提示视屏不存在
                //如果转码加密后,依然不能读取到M3U8视频或读取到的是MP4直接返回,提示视屏不存在
                if (StringUtils.isEmpty(resUrl)||resUrl.endsWith(MP4)) {
                    return new Result(false, "资源不存在");
                    return new Result(false, "资源不存在");
                }
                
                resId = resUrl.substring(resUrl.indexOf("/video/") + 1);
@@ -125,13 +125,13 @@
                
//                String resDir = resId.substring(0, resId.lastIndexOf('/'));
                
                //获取原视频VideoId
                //获取原视频VideoId
//                String keyAddr = video.getOriginVideoId();
//                if(StringUtils.isBlank(keyAddr)){
//                    keyAddr = video.getVideoId();
//                }
                
//                // 获取解密key的临时访问权限
//                // 获取解密key的临时访问权限
//                if(StringUtils.isNotEmpty(video.getM3u8KeyPath())){
//                    json.put("url", video.getM3u8KeyPath().substring(video.getM3u8KeyPath().indexOf("/video/") + 1));
//                }else{
@@ -169,7 +169,7 @@
    
    
    /**
     * 获取视频的m3u8访问权限,用获取临时访问权限的key路径作为解密密钥,临时生成m3u8文件,并上传到阿里云,并返回路径
     * 获取视频的m3u8访问权限,用获取临时访问权限的key路径作为解密密钥,临时生成m3u8文件,并上传到阿里云,并返回路径
     * @param videoId
     * @param definition
     * @return
@@ -178,7 +178,7 @@
    @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, "参数错误");
            return new Result(false, "参数错误");
        }        
        
        BufferedReader bf = null;
@@ -188,14 +188,14 @@
            MediaVideo video = commonDAO.read(MediaVideo.class, videoId);
            
            if (video == null) {
                return new Result(false, "资源不存在");
                return new Result(false, "资源不存在");
            }
            
            String resId = "";
            String resUrl = null;
            JSONObject json = null;
            
            //判断是否是mp3等音乐格式文件,如果是则直接返回original地址
            //判断是否是mp3等音乐格式文件,如果是则直接返回original地址
            if(checkIsVoiceMedia(video)){
                json =  new JSONObject();
                json.put("result", "success");
@@ -206,14 +206,14 @@
            
            resUrl = this.getMp4ResUrl(def, video);
            
            //如果转码地址不存在,并且源码地址是mp4则直接使用原视频地址播放
            //如果转码地址不存在,并且源码地址是mp4则直接使用原视频地址播放
            if(StringUtils.isEmpty(resUrl) && video.getOrigUrl().endsWith(MP4)){
                    resUrl =  video.getOrigUrl().substring(video.getOrigUrl().indexOf("/video/") + 1);
            }
            
            //查看原视频是否是MP4
            //查看原视频是否是MP4
            if (StringUtils.isEmpty(resUrl)) {
                return new Result(false, "资源不存在");
                return new Result(false, "资源不存在");
            }
            
            json =  new JSONObject();
@@ -233,7 +233,7 @@
    
    
    /**
     * 获取resurl
     * 获取resurl
     * 
     * @param def
     * @param video
@@ -244,7 +244,7 @@
    }
    
    /**
     * 获取resurl
     * 获取resurl
     * 
     * @param def
     * @param video
@@ -255,7 +255,7 @@
    }
    
    /**
     * 判断是否是音频media,精确判断需要枚举音频格式
     * 判断是否是音频media,精确判断需要枚举音频格式
     * @return
     */
    private  boolean checkIsVoiceMedia(MediaVideo media){
@@ -272,7 +272,7 @@
    }
    
    /**
     * 测试接口专用
     * 测试接口专用
     * @param request
     * @return
     */
src/main/java/com/qxueyou/scc/base/dao/AbstractRedisTemplate.java
@@ -32,14 +32,14 @@
    }
    /**
     * 设置过期时间的set方法
     * 设置过期时间的set方法
     * 
     * @param key
     *            键
     *            键
     * @param value
     *            value
     * @param timeout
     *            过期时间 单位(s)
     *            过期时间 单位(s)
     */
    public void setex(String key, String value, int timeout) {
        ShardedJedis client = null;
@@ -80,7 +80,7 @@
        return expire(key, timeOut);
    }
    /** 根据键获取字符串值 */
    /** 根据键获取字符串值 */
    public String get(String key) {
        ShardedJedis client = null;
        String value = "";
@@ -93,7 +93,7 @@
        return value;
    }
    /** 获取并删除键 */
    /** 获取并删除键 */
    public String getAndDel(String key) {
        ShardedJedis client = null;
        String value = "";
@@ -107,7 +107,7 @@
        return value;
    }
    /** 删除键 */
    /** 删除键 */
    public void del(String key) {
        ShardedJedis client = null;
        try {
@@ -118,7 +118,7 @@
        }
    }
    /** 获取并删除键 */
    /** 获取并删除键 */
    public void del(String[] keys) {
        ShardedJedis client = null;
        try {
@@ -311,7 +311,7 @@
    }
    /**
     * 多长时间内尝试获取锁
     * 多长时间内尝试获取锁
     * 
     * @param key
     * @param timeOut
@@ -326,7 +326,7 @@
                return false;
            }
            try {
                // 每隔200ms秒尝试获取锁
                // 每隔200ms秒尝试获取锁
                Thread.sleep(200);
            } catch (InterruptedException e) {
                throw e;
@@ -451,7 +451,7 @@
    }
    
    /**
     * 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
     * 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
     * 
     * @param key
     * @param start
src/main/java/com/qxueyou/scc/base/dao/BaseDAO.java
@@ -1,8 +1,8 @@
/******************************************************************************
 * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
 * All Rights Reserved.
 * 本软件为深圳企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
 * 不得使用、复制、修改或发布本软件.
 * 本软件为深圳企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
 * 不得使用、复制、修改或发布本软件.
 *****************************************************************************/
package com.qxueyou.scc.base.dao;
@@ -31,19 +31,19 @@
import com.qxueyou.scc.base.model.Result;
/**
 * 基础DAO类,自动注入sessionFactory
 * 基础DAO类,自动注入sessionFactory
 *
 * @author 夏德虎
 * @author 夏德虎
 * @since JDK1.6
 * @history 2010-07-28 夏德虎 新建
 * @history 2010-07-28 夏德虎 新建
 */
public class BaseDAO extends HibernateDaoSupport {
    
    /** 注释 rawtypes  */
    /** 注释 rawtypes  */
    private static final String RAW_TYPES = "rawtypes";
    
    /**
     * 注入sessionFactory
     * 注入sessionFactory
     *
     * @param sessionFactory
     */
@@ -53,12 +53,12 @@
    }
    /**
     * 读取对象
     * 读取对象
     *
     * @param <T> 泛型类型
     * @param clz VO CLASS类型
     * @param key VO 主键
     * @return 查找到的结果,如果没找到,返回null
     * @param <T> 泛型类型
     * @param clz VO CLASS类型
     * @param key VO 主键
     * @return 查找到的结果,如果没找到,返回null
     */
    public <T> T read(Class<T> clz, Serializable key) {
        if(key==null){
@@ -68,28 +68,28 @@
    }
    /**
     * 保存对象
     * 保存对象
     */
    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){
@@ -98,17 +98,17 @@
    }
    /**
     * 保存或更新对象
     * 保存或更新对象
     */
    public void deleteAll(@SuppressWarnings(RAW_TYPES) Collection col) {
        this.getHibernateTemplate().deleteAll(col);
    }
    
    /**
     * 根据hql查询,并返回执行类型的列表结果
     * 根据hql查询,并返回执行类型的列表结果
     *
     * @param hql 查询语句
     * @param cls 返回类型
     * @param hql 查询语句
     * @param cls 返回类型
     * @return
     */
    @SuppressWarnings("unchecked")
@@ -117,11 +117,11 @@
    }
    
    /**
     * 根据hql查询,并返回执行类型的列表结果
     * 根据hql查询,并返回执行类型的列表结果
     *
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @return
     */
    public <T> List<T> find(final String hql,final List<Object> args,final Class<T> cls) {
@@ -142,11 +142,11 @@
    }
    
    /**
     * 根据hql查询,并返回执行类型的列表
     * 根据hql查询,并返回执行类型的列表
     *
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @return
     */
    @SuppressWarnings("unchecked")
@@ -155,11 +155,11 @@
    }
    
    /**
     * 根据hql查询,返回列表数据总数
     * 根据hql查询,返回列表数据总数
     *
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @return
     */
    public int findCount(final String hql, final List<Object> args) {
@@ -184,11 +184,11 @@
    }
    
     /**
     * 根据hql查询,返回列表数据总数
     * 根据hql查询,返回列表数据总数
     *
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @return
     */
    public int findCountBySql(final String sql, final List<Object> args) {
@@ -213,11 +213,11 @@
    }
    
    /**
     * 根据hql查询,返回列表分页数据
     * 根据hql查询,返回列表分页数据
     *
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @return
     */
    @SuppressWarnings({ "unchecked" })
@@ -238,11 +238,11 @@
    }
    
    /**
     * 根据hql查询,返回唯一的数据
     * 根据hql查询,返回唯一的数据
     *
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @return
     */
    @SuppressWarnings({ RAW_TYPES, "unchecked" })
@@ -265,11 +265,11 @@
    }
    /**
     * 根据hql查询,并返回执行类型的列表结果
     * 根据hql查询,并返回执行类型的列表结果
     *
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @return
     */
    @SuppressWarnings({ RAW_TYPES})
@@ -289,11 +289,11 @@
    }
    
    /**
     * 根据hql查询,并返回执行类型的列表结果
     * 根据hql查询,并返回执行类型的列表结果
     *
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @return
     */
    @SuppressWarnings({ RAW_TYPES})
@@ -316,11 +316,11 @@
    
    
    /**
     * hql只含单一参数
     * hql只含单一参数
     *
     * @param hql 查询语句
     * @param args 参数数组
     * @param cls 返回类型
     * @param hql 查询语句
     * @param args 参数数组
     * @param cls 返回类型
     * @return
     */
    public Result bulkUpdateInLoop(String hql, Object args[]) {
@@ -336,11 +336,11 @@
    }
    
    /**
     * hql只含单一参数
     * hql只含单一参数
     *
     * @param hql 查询语句
     * @param args 参数数组
     * @param cls 返回类型
     * @param hql 查询语句
     * @param args 参数数组
     * @param cls 返回类型
     * @return
     */
    public Result bulkUpdate(String hql, Object args[]) {
@@ -353,10 +353,10 @@
    }
    
    /**
     * 存储过程语句
     * 存储过程语句
     *
     * @param hql call 存储语句 sql语句
     * @param args 参数数组
     * @param hql call 存储语句 sql语句
     * @param args 参数数组
     * @return
     */
    public Result executeProduce(final String sql, final Object args[]) {
@@ -379,10 +379,10 @@
    }
    
    /**
     * 执行sql删除
     * 执行sql删除
     *
     * @param hql 查询语句
     * @param args 参数数组
     * @param hql 查询语句
     * @param args 参数数组
     * @return
     */
    public int executeSqlDelete(final String sql, final Object args[]) {
@@ -404,16 +404,16 @@
    }
    
    /**
     * 根据hql查询,并返回执行类型的列表结果
     * 根据hql查询,并返回执行类型的列表结果
     *
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @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);
@@ -421,7 +421,7 @@
                    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[]){  
@@ -438,11 +438,11 @@
    }   
    
    /**
     * 根据hql查询,返回列表数据总数
     * 根据hql查询,返回列表数据总数
     *
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @return
     */
    public int findCountByComplexHql(final String hql, final Map<String, Object> map) {
@@ -457,7 +457,7 @@
                    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[]){  
@@ -478,11 +478,11 @@
    }
    
     /**
     * 根据sql查询,返回列表数据总数
     * 根据sql查询,返回列表数据总数
     *
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @return
     */
    public int findCountByComplexSql(final String hql, final Map<String, Object> map) {
@@ -497,7 +497,7 @@
                    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[]){  
@@ -518,11 +518,11 @@
    }
    
    /**
     * 根据hql查询,并返回执行类型的列表结果
     * 根据hql查询,并返回执行类型的列表结果
     *
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @return
     */
    public <T> List<T> findByComplexHql(final String hql, final Map<String, Object> map, Class<T> cls) {
@@ -533,14 +533,14 @@
    }
    
    /**
     * 复杂hql
     * 复杂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")
@@ -550,7 +550,7 @@
                    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[]){  
@@ -578,10 +578,10 @@
    }
    
    /**
     * 根据hql查询,并返回执行类型的列表结果,列表数据为Map
     * 根据hql查询,并返回执行类型的列表结果,列表数据为Map
     *
     * @param hql 查询语句
     * @param args 参数
     * @param hql 查询语句
     * @param args 参数
     * @return
     */
    public List<Map<String,Object>> findListWithMapByHql(final String hql, final Map<String, Object> map) {
@@ -593,15 +593,15 @@
    }
    
    /**
     * 根据hql查询,并返回执行类型的列表结果,列表数据为Map
     * 根据hql查询,并返回执行类型的列表结果,列表数据为Map
     *
     * @param hql 查询语句
     * @param args 参数
     * @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);
@@ -609,7 +609,7 @@
                    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[]){  
@@ -630,16 +630,16 @@
    }
    
    /**
     * 根据hql查询,并返回唯一一条结果
     * 根据hql查询,并返回唯一一条结果
     *
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @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);
@@ -647,7 +647,7 @@
                    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[]){  
@@ -669,11 +669,11 @@
    
    /**
     * 根据Sql查询,并返回执行类型的列表结果
     * 根据Sql查询,并返回执行类型的列表结果
     *
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @return
     */
    public <T> List<T> findByComplexSql(final String sql, final Map<String, Object> map, Class<T> cls) {
@@ -685,16 +685,16 @@
    
    
    /**
     * 根据Sql查询,并返回执行类型的列表结果
     * 根据Sql查询,并返回执行类型的列表结果
     *
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @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);
@@ -702,7 +702,7 @@
                    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[]){  
@@ -721,16 +721,16 @@
    }
    
    /**
     * 根据hql查询,并返回执行类型的列表结果
     * 根据hql查询,并返回执行类型的列表结果
     *
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @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);
@@ -738,7 +738,7 @@
                    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[]){  
@@ -755,7 +755,7 @@
        });
        
        // 组装结果
        // 组装结果
        List<T> result = new ArrayList<T>();
        for (Object obj : lst) {
            result.add(cls.cast(obj));
@@ -764,16 +764,16 @@
    }
    
    /**
     * 根据Sql查询,并返回执行类型的列表结果
     * 根据Sql查询,并返回执行类型的列表结果
     *
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @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);
@@ -781,7 +781,7 @@
                    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[]){  
@@ -798,7 +798,7 @@
        });
        
        // 组装结果
        // 组装结果
        List<T> result = new ArrayList<T>();
        for (Object obj : lst) {
            result.add(cls.cast(obj));
src/main/java/com/qxueyou/scc/base/dao/CommonDAO.java
@@ -1,8 +1,8 @@
/******************************************************************************
O * Copyright (C) 2014 Shenzhen Penguin Network Technology Co., Ltd
 * All Rights Reserved.
 * 本软件为深圳企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
 * 不得使用、复制、修改或发布本软件.
 * 本软件为深圳企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
 * 不得使用、复制、修改或发布本软件.
 *****************************************************************************/
package com.qxueyou.scc.base.dao;
@@ -17,16 +17,16 @@
@Repository(value="commonDao")
/**
 * 通用DAO类
 * 通用DAO类
 *
 * @author  夏德虎
 * @author  夏德虎
 * @since   JDK1.7
 * @history 2014-11-18 夏德虎 新建
 * @history 2014-11-18 夏德虎 新建
 */
public class CommonDAO extends BaseDAO{
    
    /**
     * 根据配置key查询value值
     * 根据配置key查询value值
     * @param key
     * @return
     */
@@ -44,7 +44,7 @@
    }
    
    /**
     * 根据字典类型查询字典内容的list
     * 根据字典类型查询字典内容的list
     * @param dicType
     * @return
     */
src/main/java/com/qxueyou/scc/base/dao/CommonRedisCache.java
@@ -10,7 +10,7 @@
import redis.clients.jedis.ShardedJedis;
/***
 * redis常用操作类
 * redis常用操作类
 * 
 * @author kevin
 * @date 2017-05-15 17:00
@@ -30,7 +30,7 @@
                jedisClient = reidsSharedPoolWrapper.getResource();
            }
        } catch (Exception e) {
            log.error("获取redisClient异常!");
            log.error("获取redisClient异常!");
        }
        return jedisClient;
    }
@@ -41,7 +41,7 @@
                jedisClient.close();
            }
        } catch (Exception e) {
            log.error("关闭redis连接失败");
            log.error("关闭redis连接失败");
        }
    }
src/main/java/com/qxueyou/scc/base/dao/CommonRedisTemplate.java
@@ -8,7 +8,7 @@
import redis.clients.jedis.ShardedJedis;
/***
 * redis常用操作类
 * redis常用操作类
 * 
 * @author kevin
 * @date 2017-05-15 17:00
@@ -28,7 +28,7 @@
                jedisClient = reidsSharedPoolWrapper.getResource();
            }
        } catch (Exception e) {
            log.error("获取redisClient异常!");
            log.error("获取redisClient异常!");
        }
        return jedisClient;
    }
@@ -39,7 +39,7 @@
                jedisClient.close();
            }
        } catch (Exception e) {
            log.error("关闭redis连接失败");
            log.error("关闭redis连接失败");
        }
    }
src/main/java/com/qxueyou/scc/base/handler/QCacheCleaner.java
@@ -10,12 +10,12 @@
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface QCacheCleaner {
    //阀值(暂不用)
    //阀值(暂不用)
    public int threshold() default 0;
     
    //需要清理的keyTag
    //需要清理的keyTag
    public String clearBucket() default "";
    
    //tag分割正则表达式
    //tag分割正则表达式
    public String bucketSplitReg() default "";     
}
src/main/java/com/qxueyou/scc/base/handler/QCacheMonitor.java
@@ -47,12 +47,12 @@
    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;
@@ -86,9 +86,9 @@
            
            excuteMethodKey = this.getExecuteMethodKey(pjp);
            
            //读取缓存的注解
            //读取缓存的注解
            annoQCacheReader = AnnotationUtils.findAnnotation(methodSignature.getMethod(), QCacheReader.class);
            //清理缓存注解
            //清理缓存注解
            annoQCacheCleaner = AnnotationUtils.findAnnotation(methodSignature.getMethod(), QCacheCleaner.class);
            
            if(annoQCacheReader!=null && annoQCacheCleaner==null){
@@ -104,7 +104,7 @@
                this.processReadCache(pjp, annoQCacheReader, methodSignature);
            }
        } catch (Exception e) {
            logger.error("缓存处理失败,msg=" + e.getMessage(), e);
            logger.error("缓存处理失败,msg=" + e.getMessage(), e);
        }
        
        return clearAndReturnMethodResult(pjp,excuteMethodKey);
@@ -120,7 +120,7 @@
            
            strCacheKey = this.checkAndGenerateCacheKey(pjp.getTarget().getClass(), qCacheReader.cacheKey(), methodSignature,
                    converToParamMap(pjp.getArgs()));
            //执行方法对应的key值
            //执行方法对应的key值
            String excuteMethodKey =  this.getExecuteMethodKey(pjp);
            if (StringUtils.isNotEmpty(strCacheKey)) {
@@ -138,7 +138,7 @@
                                targetMethodResult.get().get(excuteMethodKey), expireTime);
                    }
                }else{
                    //如果result存在,则直接放入targetMethodResult中
                    //如果result存在,则直接放入targetMethodResult中
                    Map<String,Object> map = new HashMap<String,Object>();
                    map.put(excuteMethodKey, result);
                    targetMethodResult.set(map);
@@ -147,7 +147,7 @@
                executeTargetMethod(pjp,excuteMethodKey);
            }
        } catch (Throwable e) {
            throw new Exception("添加缓存发生异常,strCacheKey=" + strCacheKey, e);
            throw new Exception("添加缓存发生异常,strCacheKey=" + strCacheKey, e);
        }
    }
@@ -169,11 +169,11 @@
                for (int i = 0; i < strClearBucketArr.length; i++) {
                    strClearBucketArr[i] = CacheConstants.QXY_SERVICE_CACHE_NS.concat(strClearBucketArr[i]);
                }
                logger.info("清理的bucket:"+ArrayUtils.toString(strClearBucketArr));
                logger.info("清理的bucket:"+ArrayUtils.toString(strClearBucketArr));
                this.qCacheRedis.del(strClearBucketArr);
            }
        } catch (Throwable e) {
            logger.error("清理缓存发生异常,strClearBucketArr" + ArrayUtils.toString(strClearBucketArr, ""), e);
            logger.error("清理缓存发生异常,strClearBucketArr" + ArrayUtils.toString(strClearBucketArr, ""), e);
        }
    }
@@ -182,16 +182,16 @@
        String strNewKey = null;
        if (StringUtils.isNotEmpty(key)) {
            logger.info("处理前的key:" + key);
            logger.info("处理前的key:" + key);
            // 对部分参数进行替换处理
            // 对部分参数进行替换处理
            strNewKey = replaceArgInfo(key, paramMap);
            // freeMarker解析cackeKey
            // freeMarker解析cackeKey
            strNewKey = parseCacheKey(strNewKey, targetClass, methodSignature, paramMap);
            logger.info("处理后的key:" + strNewKey);
            logger.info("处理后的key:" + strNewKey);
            if (strNewKey.length() > MAX_KEY_LENGTH) {
                throw new Exception("Service缓存时Key过长,大于250个字符");
                throw new Exception("Service缓存时Key过长,大于250个字符");
            }
        }
        return strNewKey;
@@ -227,7 +227,7 @@
            out.flush();
            return new String(stream.toByteArray(), "UTF-8");
        } catch (Exception e) {
            logger.error("使用freemark解析cacheKey失败", e);
            logger.error("使用freemark解析cacheKey失败", e);
            throw e;
        } finally {
            IoUtils.closeQuietly(stream);
@@ -241,17 +241,17 @@
        String strParamName = null;
        Class<?> paramClz = null;
        logger.info("替换前的key:" + strCacheKey);
        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类型的对象");
                            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)) {
@@ -262,11 +262,11 @@
                        }
                    }
                } else {
                    throw new Exception("错误:参数表达式中存在不合法的参数");
                    throw new Exception("错误:参数表达式中存在不合法的参数");
                }
            }
            matcher.appendTail(sbBuffer);
            logger.info("替换后的key:" + sbBuffer.toString());
            logger.info("替换后的key:" + sbBuffer.toString());
            return sbBuffer.toString();
        }else{
            return strCacheKey;
@@ -305,7 +305,7 @@
    }
    
    /**
     * 执行目标方法,只允许执行一次,并保存当前结果
     * 执行目标方法,只允许执行一次,并保存当前结果
     * @param pjp
     * @param key
     * @throws Throwable
@@ -315,7 +315,7 @@
        if(StringUtils.isEmpty(excuteMethodKey)){
            excuteMethodKey = this.getExecuteMethodKey(pjp);
        }
        //是否需要判断是否是void方法
        //是否需要判断是否是void方法
        if(targetMethodResult.get()==null || !targetMethodResult.get().containsKey(excuteMethodKey)){
            Map<String,Object> map = new HashMap<String,Object>();
            map.put(excuteMethodKey, pjp.proceed());
@@ -324,7 +324,7 @@
    }
    
    /**
     * 返回并清理ThreadLocal<Map<String, Object>>的MAP中的KEY
     * 返回并清理ThreadLocal<Map<String, Object>>的MAP中的KEY
     * @param pjp
     * @param key
     * @throws Throwable
@@ -335,7 +335,7 @@
        if(StringUtils.isEmpty(excuteMethodKey)){
            excuteMethodKey = getExecuteMethodKey(pjp);
        }
        //是否需要判断是否是void方法(TODO)
        //是否需要判断是否是void方法(TODO)
        if(targetMethodResult.get()!=null && targetMethodResult.get().containsKey(excuteMethodKey)){
            result =targetMethodResult.get().get(excuteMethodKey);
            targetMethodResult.get().remove(excuteMethodKey);
@@ -346,7 +346,7 @@
    }
    
    /**
     * 返回当前目标方法的执行结果存储在ThreadLocal<Map<String, Object>>的MAP中的KEY
     * 返回当前目标方法的执行结果存储在ThreadLocal<Map<String, Object>>的MAP中的KEY
     * @param pjp
     * @return key
     */
@@ -382,7 +382,7 @@
//                }
//                es.shutdown();
//                if(es.awaitTermination(1, java.util.concurrent.TimeUnit.HOURS)){
//                    System.out.println("线程执行完成");
//                    System.out.println("线程执行完成");
//                }
//                long end = System.currentTimeMillis();
//                System.out.println(start-end);
src/main/java/com/qxueyou/scc/base/handler/QCacheReader.java
@@ -10,24 +10,24 @@
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface QCacheReader {
    //缓存时间单位枚举(秒,分,时)
    //缓存时间单位枚举(秒,分,时)
    public enum TimeUnit{SECOND,MINUTE,HOUR,DAY};
        
    public enum ClearStrategy {KEY,TAG};
    
     //缓存的KEY
     //缓存的KEY
    public String cacheKey();
    
    //标签 方便多数据的清理
    //标签 方便多数据的清理
    public String bucket() default "";
    
    //阀值(暂不用)
    //阀值(暂不用)
    public int threshold() default 0;
    
    //缓存时长
    //缓存时长
    public int cacheTime() default 60;
     
    //缓存时间单位(默认秒)
    //缓存时间单位(默认秒)
    public TimeUnit timeUnit() default TimeUnit.SECOND;
     
}
src/main/java/com/qxueyou/scc/base/handler/QCacheRedis.java
@@ -34,9 +34,9 @@
//            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{
@@ -74,9 +74,9 @@
        }
    }
    
    /** 校验是否过期 */
    /** 校验是否过期 */
    private boolean checkIsExpire(long expireTime){
        //负数表示永不过期
        //负数表示永不过期
        if(expireTime>0){
            return new Date(expireTime).compareTo(Calendar.getInstance().getTime())==-1;    
        }else{
src/main/java/com/qxueyou/scc/base/handler/QLog.java
@@ -10,19 +10,19 @@
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface QLog {
    //日志类型枚举 SYS:系统,BUSINESS:业务
    //日志类型枚举 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 "";
    
     
src/main/java/com/qxueyou/scc/base/handler/QLogMonitor.java
@@ -82,15 +82,15 @@
                strModule = parserSpel(qLog.module(), joinPoint);
                qLogType = qLog.type();
            }
            // 默认为参数相关信息
            // 默认为参数相关信息
            if (StringUtils.isEmpty(strContent)) {
                strContent = createDefaultContentInfo(joinPoint, methodSignature);
            }
            // 默认为请求的URI信息
            // 默认为请求的URI信息
            if(StringUtils.isEmpty(strDesp) && request!=null){
                strDesp =request.getRequestURI();
            }
            // 默认为:控制器模块注解value值+方法名
            // 默认为:控制器模块注解value值+方法名
            if (StringUtils.isEmpty(strModule)) {
                strModule = createDefaultModuleInfo(joinPoint);
            }
@@ -99,7 +99,7 @@
            this.saveLog(strContent, strDesp, strModule.toUpperCase(), sLogType, ip,userAgent);
        } catch (Exception e) {
            logger.error("记录action操作日志发生异常!,errMsg:" + e.getMessage(), e);
            logger.error("记录action操作日志发生异常!,errMsg:" + e.getMessage(), e);
        }
    }
@@ -203,7 +203,7 @@
        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())) {
src/main/java/com/qxueyou/scc/base/handler/QXueyouExceptionHandler.java
@@ -11,8 +11,8 @@
import org.springframework.web.servlet.ModelAndView;
/**
 * Spring MVC 异常处理类
 * @author 德虎
 * Spring MVC 异常处理类
 * @author 德虎
 *
 */
@ControllerAdvice
@@ -25,7 +25,7 @@
            throws Exception {
        long exepCode = System.currentTimeMillis();
        log.error(req.getRequestURL() + ",诊断代码:" + exepCode + ":" + e.getMessage(), e);
        log.error(req.getRequestURL() + ",诊断代码:" + exepCode + ":" + e.getMessage(), e);
        if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null) {
            throw e;
src/main/java/com/qxueyou/scc/base/model/ApiResult.java
@@ -1,25 +1,25 @@
package com.qxueyou.scc.base.model;
/**
 * api专用返回结果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);            // 数据不存在
        Success(1),                        // 成功
        UserNotExist(40001),            // 用户不存在
        PasswordInvalid(40002),            // 密码不正确
        TokenInvalid(50001),            // Token无效
        ParamInvalid(60001),            // 参数无效
        SystemException(60002),            // 系统异常
        DataNotExist(60003);            // 数据不存在
        
        private Integer resultCode;
@@ -36,12 +36,12 @@
    private boolean result;
    
    /**
     * 40001用户不存在
     * 40002密码错误
     * 50001token无效
     * 60001参数错误
     * 60001系统异常
     * 60003数据不存在
     * 40001用户不存在
     * 40002密码错误
     * 50001token无效
     * 60001参数错误
     * 60001系统异常
     * 60003数据不存在
     */
    private int code = 1;
    
src/main/java/com/qxueyou/scc/base/model/CacheConstants.java
@@ -2,205 +2,205 @@
/**
 * 缓存常量实体类
 * 缓存常量实体类
 * @author ody.yuan
 *
 */
public class CacheConstants {
    /** 业务缓存模块,通过模块删除对应的key
     *  1.app机构介绍
    /** 业务缓存模块,通过模块删除对应的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短信最小间隔时间-缓存时间 */
    /** 手机、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短信同一天最多次数 -缓存前缀*/
    /** IP短信同一天最多次数 -缓存前缀*/
    public static final String SMS_IP_DAY_MAX_PREFIX = "SMS_IP_DAY_MAX_";
    
    /** IP短信同一天最多次数-最大次数 */
    /** IP短信同一天最多次数-最大次数 */
    public static final Integer SMS_IP_DAY_MAX_TIME = 20;
    
    /** 机构层级删除缓存orgIds 缓存前缀 */
    /** 机构层级删除缓存orgIds 缓存前缀 */
    public static final String ORG_DELETE_ORGIDS_PREFIX = "ORG_DEL_ORG_IDS_";
    
    /** 机构层级删除缓存classIds 缓存前缀 */
    /** 机构层级删除缓存classIds 缓存前缀 */
    public static final String ORG_DELETE_CLASSIDS_PREFIX = "ORG_DEL_CLS_IDS_";
    
    /** 机构层级删除缓存classIds 缓存时间 3小时 */
    /** 机构层级删除缓存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 */
    /** 流量班级对应机构ID */
    public static final String FLOW_CLASS_ORG_ID_PREFIX = "FLOW_CLASS_ORG_ID_";
    
    /** 流量班级对应顶层机构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 */
    /** 流量班级对应顶层机构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 */
    /** 流量班级对应顶层机构、机构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 */
    /** 流量班级对应顶层机构、机构ID缓存时间  1 HOUR */
    public static final Integer FLOW_ORG_RMB_ACCOUNT_VALIDATE_TIME = 60 * 60  ;
    
    /** 激活学员:缓存班级key前缀 */
    /** 激活学员:缓存班级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接口) */
    /** 业务数据缓存:机构介绍(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 */
    /** 签到:缓存签到时长 , 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 */
    /** 签到:缓存签到第一页明细时长 , 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 */
    /** 签到:缓存签到活动时长 , 10min */
    public static final Integer SCH_SIGN_ACTIVITY_TIME = 60 * 10 ;
    
    /** 签到:缓存签到机构前缀 */
    /** 签到:缓存签到机构前缀 */
    public static final String SCH_SIGN_ORG_PREFIX = "SCH_SIGN_ORG_";
    
    /** 签到:缓存签到机构时长 , 10min */
    /** 签到:缓存签到机构时长 , 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 */
    /** 签到:缓存签到活动第一页明细时长 , 10min */
    public static final Integer SCH_SIGN_STATISTICS_FIRST_ACTPAGE_TIME = 60 * 10 ;
    
    /** 获取地址:调用百度IP缓存Key:已达当日最大上限 */
    /** 获取地址:调用百度IP缓存Key:已达当日最大上限 */
    public static final String USER_OPERATE_LAT_LNG_MAX = "USER_OPERATE_IP_LAT_LNG_MAX_NUM";
    
    /** 获取地址:调用百度IP缓存Key:获取地址失败 */
    /** 获取地址:调用百度IP缓存Key:获取地址失败 */
    public static final String USER_OPERATE_LAT_LNG_FAIL = "USER_OPERATE_IP_LAT_LNG_FAIL_";
    
    /** 签到:缓存签到活动第一页明细时长 , 24小时 */
    /** 签到:缓存签到活动第一页明细时长 , 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首页:推荐讲义缓存前缀 */
    /** app首页:推荐讲义缓存前缀 */
    public static final String APP_INDEX_HANDOUT_RECOMMEND_PREFIX = "APP_INDEX_HANDOUT_RECOMMEND_CLASSID_";
    
    /** app首页:推荐视频缓存前缀 */
    /** app首页:推荐视频缓存前缀 */
    public static final String APP_INDEX_VIDEO_RECOMMEND_PREFIX = "APP_INDEX_VIDEO_RECOMMEND_CLASSID_";
    
    /** app首页:推荐直播缓存前缀 */
    /** app首页:推荐直播缓存前缀 */
    public static final String APP_INDEX_LIVE_RECOMMEND_PREFIX = "APP_INDEX_LIVE_RECOMMEND_CLASSID_";
    
    /** app首页:推荐讲义、直播及直播缓存时间  一天 */
    /** app首页:推荐讲义、直播及直播缓存时间  一天 */
    public static final Integer APP_INDEX_CONTENT_RECOMMEND_PREFIX = 60 * 60 * 24 ;
    
    /** ping++ 消息处理错误次数缓存前缀 */
    /** ping++ 消息处理错误次数缓存前缀 */
    public static final String PINGPP_MQ_EXCEPTION_COUNT_PREFIX = "PINGPP_MQ_EXCEPTION_COUNT_" ;
    
    /** ping++ 消息处理错误次数缓存时间*/
    /** 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_";
}
src/main/java/com/qxueyou/scc/base/model/Constants.java
@@ -6,27 +6,27 @@
import com.qxueyou.scc.base.util.CollectionUtils;
/**
 * 常量实体类
 * 常量实体类
 * @author zhiyong
 *
 */
public class Constants {
    /** 实体类 */
    /** 实体类 */
    
    /** int型常量  */
    /** int型常量  */
    public static final int INT_0 = 0;
    
    public static final int INT_1 = 1;
    
    /**定时发送消息类型 :1、修改班级进度*/
    /**定时发送消息类型 :1、修改班级进度*/
    public static final String MSG_TYPE_CLASS_PROGRESS = "progress";
    
    /** 虚拟一个 错题 收藏本的groupId */
    /** 虚拟一个 错题 收藏本的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";
@@ -37,7 +37,7 @@
    /** 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*/
@@ -67,25 +67,25 @@
    /** score day max limit  */
    public static final String CONFIG_QXY_SCORE_DYA_LIMIT = "scoreDayLimit";
    
    /** 游客班级id */
    /** 游客班级id */
    public static final String VISITOR_CLASS_ID="1";
    
    /** 游客用户id */
    /** 游客用户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  */
@@ -94,245 +94,245 @@
    /** boolean:true */
    public static final boolean BOOLEAN_FLAG_TRUE = true;
    
    /** 签到码时效性开启时的具体值,前后几天 */
    /** 签到码时效性开启时的具体值,前后几天 */
    public static final Integer SIGN_CODE_VALIDATE_VALUE = 1;
    
    /** 文档处理URL */
    /** 文档处理URL */
    public static final String CONFIG_DOC_DEAL_URL = "docdealUrl";
    
    /** 积分,QXUEYOU积分账户userId  */
    /** 积分,QXUEYOU积分账户userId  */
    public static final String COMMON_TRASACT_USER_ID = "admin.qie";
    
    /** Q学友机构编码  */
    /** 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签到有效获取积分额度 */
    /** 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 统计按钮的统计 */
    /**  刷新统计缓存键值 :根据groupId 统计按钮的统计 */
    public static final String REFRESH_STATIS_GROUPID_CACHE_KEY = "refresh_statis_groupid_cache_key";
    
    /**  刷新统计缓存键值 :根据groupId 学员提交数据的统计 */
    /**  刷新统计缓存键值 :根据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自定义菜单基础数据 :获取菜单缓存 */
    /**  系统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:家庭作业) */
    /** 练习来源(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:错题优先) */
    /** 做题方式(1:未做题优先  2:错题优先) */
    public static final String EXERCISE_STRATEGY_NO_DO = "1";
    
    public static final String EXERCISE_STRATEGY_FAULT = "2";
    
    /** 问答排名CACHE key */
    /** 问答排名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 */
    /** 注册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加入班级*/
    /** 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端       */
    /** 不加入班级(内容分享、课程分享、直播互动)    wx端       */
    public static final String REG_MODE_NOT_CLASS_SHARE_WX ="share_wx";
    
    /** 不加入班级(直播互动)    其他:PC、手机浏览器       */
    /** 不加入班级(直播互动)    其他:PC、手机浏览器       */
    public static final String REG_MODE_NOT_CLASS_OTHER="other";
    
    /** Q学友账号用户初始化key  */
    /** Q学友账号用户初始化key  */
    public static final String QXUEYOU_ACCOUNT_MAX_VALUE = "qxy_account_max_value";
    
    /** Q学友账号用户初始化值  */
    /** Q学友账号用户初始化值  */
    public static final int QXUEYOU_ACCOUNT_INIT_VALUE = 20000;
    
    /** Q学友账号用户初始化值  */
    /** Q学友账号用户初始化值  */
    public static final String WEIXIN_MICRO_DOMAIN = "wx";
    
    /** ffmpeg转码及截图缓存的key  */
    /** ffmpeg转码及截图缓存的key  */
    public static final String FFMPEG_VIDEO_LIST_KEY_PREFIX = "qxueyou-ffmpeg-transcode-list-";
    
    /** ffmpeg转码及截图缓存的key  */
    /** ffmpeg转码及截图缓存的key  */
    public static final String FFMPEG_VIDEO_TRANSCODEING_KEY_PREFIX = "qxueyou-ffmpeg-transcode-executing-";
    
    /** ffmpeg转码及截图临时存放oss原始video及转码文件的路径  */
    /** ffmpeg转码及截图临时存放oss原始video及转码文件的路径  */
    public static final String FFMPEG_VIDEO_FILE_DIR = "/usr/qxueyou/ossVideo/";
    
    /** 获取媒体信息缓存服务  默认缓存时间1天 */
    /** 获取媒体信息缓存服务  默认缓存时间1天 */
    public static final Integer FFMPEG_TRANS_LIST_CACHE_TIME = 86400;
    
    /** 使用ffmpeg转码 */
    /** 使用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_SUCCESS = "成功";
    
    /** 流米回调结果标识 失败  */
    public static final String FLOW_ORDER_FAILED = "失败";
    /** 流米回调结果标识 失败  */
    public static final String FLOW_ORDER_FAILED = "失败";
    
    /** 默认缓存登录信息时长:三小时  */
    /** 默认缓存登录信息时长:三小时  */
    public static final int SYS_DEFAULT_LOGOUT_TIME = 3 * 60 * 60;
    
    /** 练习成绩统计更新时间,5分钟更新一次   */
    /** 练习成绩统计更新时间,5分钟更新一次   */
    public static final int EXE_STATIS_UPDATE_MINUTES = 300;
    
    /** 后台登录:获取菜单缓存 更新时间,5秒钟更新一次   */
    /** 后台登录:获取菜单缓存 更新时间,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",
@@ -344,49 +344,49 @@
            "HANDOUT","8",
            "COMMON","9");
    
    /** 消息队列:同时接收消息线程数  1,5,10*/
    /** 消息队列:同时接收消息线程数  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++ 消息处理错误重发次数 */
    /** ping++ 消息处理错误重发次数 */
    public static final Integer PINGPP_MQ_EXCEPTION_COUNT = 2 ;
    
    /** 活动报名来源  */
    public static final String ACTIVITYS_REG_IMPORT = "后台导入" ;
    /** 活动报名来源  */
    public static final String ACTIVITYS_REG_IMPORT = "后台导入" ;
    
    public static final String ACTIVITYS_REG_WEIXIN = "微信报名" ;
    public static final String ACTIVITYS_REG_WEIXIN = "微信报名" ;
    
    /**-------- 登录平台------  */
    /**-------- 登录平台------  */
    /** APP  */
    public static final String LOGIN_PLATFORM_APP = "app" ;
    
    /** web后台  */
    /** web后台  */
    public static final String LOGIN_PLATFORM_WEB = "web" ;
    
    /** Q慧眼 直播  */
    /** 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" ;
src/main/java/com/qxueyou/scc/base/model/ExcelExportParam.java
@@ -7,38 +7,38 @@
/**
 * 导出excel时的参数
 * 导出excel时的参数
 * 
 */
public class ExcelExportParam<T> implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    //导出文件名称
    //导出文件名称
    private String fileName;
    
    //sheet页名称
    //sheet页名称
    private String title;
    
    //导出的题头
    //导出的题头
    private String[] headers;
    
    //需要导出的内容
    //需要导出的内容
    private Collection<T> colData;
    
    //输出流
    //输出流
    private OutputStream out;
    
    //如果需要格式化日期,默认"yyyy-MM-dd"
    //如果需要格式化日期,默认"yyyy-MM-dd"
    private String pattern;
    
    //数字类型是否使用需要格式化
    //数字类型是否使用需要格式化
    private boolean numberFormat;
    
    //导出指定列
    //导出指定列
    private List<String> lstColumn;
    
    //指定各列宽度
    //指定各列宽度
    private List<Integer> lstColumnWidth;
    public String getFileName() {
src/main/java/com/qxueyou/scc/base/model/FilePathConstants.java
@@ -4,37 +4,37 @@
import java.util.Map;
/**
 * app及后台默认图片设置
 * 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");
@@ -45,7 +45,7 @@
        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));
    }
src/main/java/com/qxueyou/scc/base/model/FlowPrice.java
@@ -1,13 +1,13 @@
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;
@@ -18,7 +18,7 @@
    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;
@@ -29,7 +29,7 @@
    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;
src/main/java/com/qxueyou/scc/base/model/MsgTypeConstants.java
@@ -2,21 +2,21 @@
/**
 * 消息类型常量实体类
 * 消息类型常量实体类
 * @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";
}
src/main/java/com/qxueyou/scc/base/model/Pager.java
@@ -3,17 +3,17 @@
public class Pager {
    
    /*
     * 每页显示条数
     * 每页显示条数
     */
    private int pageSize;
    
    /*
     * 当前页码
     * 当前页码
     */
    private int pageNum;
    
    /*
     * 记录总数
     * 记录总数
     */
    private int totalCount;
    
@@ -55,7 +55,7 @@
    }
    /**
     * 计算总页数
     * 计算总页数
     * @return
     */
    public int getPageCount(){
@@ -63,7 +63,7 @@
    }
    
    /**
     * 计算分页栏起始页
     * 计算分页栏起始页
     * @return
     */
    public int getPageDispayStart(){
@@ -80,7 +80,7 @@
    }
    
    /**
     * 计算分页栏结束页
     * 计算分页栏结束页
     * @return
     */
    public int getPageDispayEnd(){
src/main/java/com/qxueyou/scc/base/model/PaginationData.java
@@ -4,51 +4,51 @@
import io.swagger.annotations.ApiModelProperty;
/**
 * 后端分页时使用,接收前端传来分页信息
 * 后端分页时使用,接收前端传来分页信息
 * @author ody.yuan
 *
 */
@ApiModel(description="接收前台分页、查询和排序")
@ApiModel(description="接收前台分页、查询和排序")
public class PaginationData {
    
    //从第几条记录开始(从0开始)
    @ApiModelProperty(name="从第几条记录开始(从0开始)",  value="offset")
    //从第几条记录开始(从0开始)
    @ApiModelProperty(name="从第几条记录开始(从0开始)",  value="offset")
    private Integer offset;
    
    //每页显示记录数
    @ApiModelProperty(name="每页显示记录数",  value="limit")
    //每页显示记录数
    @ApiModelProperty(name="每页显示记录数",  value="limit")
    private Integer limit;
    
    //排序字段
    @ApiModelProperty(name="排序字段", example="createTime",  value="sort")
    //排序字段
    @ApiModelProperty(name="排序字段", example="createTime",  value="sort")
    private String sort;
    
    //排序方式,默认升序
    @ApiModelProperty(name="排序方式,默认升序", example="desc",  value="order")
    //排序方式,默认升序
    @ApiModelProperty(name="排序方式,默认升序", example="desc",  value="order")
    private String order = "asc";
    
    //总记录数
    @ApiModelProperty(name="总记录数",  value="total")
    //总记录数
    @ApiModelProperty(name="总记录数",  value="total")
    private Integer total;
    
    //查询输入框
    @ApiModelProperty(name="查询输入框",  value="keyword")
    //查询输入框
    @ApiModelProperty(name="查询输入框",  value="keyword")
    private String keyword = "";
    
    //查询输入框
    @ApiModelProperty(name="查询输入框",  value="search")
    //查询输入框
    @ApiModelProperty(name="查询输入框",  value="search")
    private String search = "";
    
    /*
     * 每页显示条数
     * 每页显示条数
     */
    @ApiModelProperty(name="每页显示记录数",  value="pageSize")
    @ApiModelProperty(name="每页显示记录数",  value="pageSize")
    private Integer pageSize;
    
    /*
     * 当前页码
     * 当前页码
     */
    @ApiModelProperty(name="从第几条记录开始(从0开始)",  value="pageNum")
    @ApiModelProperty(name="从第几条记录开始(从0开始)",  value="pageNum")
    private Integer pageNum;
    
    public String getKeyword() {
src/main/java/com/qxueyou/scc/base/model/Param.java
@@ -1,19 +1,19 @@
package com.qxueyou.scc.base.model;
/**
 * 查询参数
 * 查询参数
 * @author ody.yuan
 *
 */
public class Param {
    
    //查询字段
    //查询字段
    private String name;
    
    //
    private String code;
    
    //查询值
    //查询值
    private String value;
    
    public Param(){
src/main/java/com/qxueyou/scc/base/model/Result.java
@@ -5,12 +5,12 @@
import java.util.Map;
/**
 * 操作结果类 接口统一返回数据类型
 * 操作结果类 接口统一返回数据类型
 * 
 * {
     *     "result": 返回结果(boolean值),
     *  "data": 返回数据(object),
     *  "msg": 返回消息,
     *     "result": 返回结果(boolean值),
     *  "data": 返回数据(object),
     *  "msg": 返回消息,
 * }
 * 
 * @author zhiyong
@@ -20,20 +20,20 @@
    
    private static final long serialVersionUID = -9024761391789730558L;
    /** 成功:true,失败:false */
    /** 成功:true,失败:false */
    private boolean success;
    
    /** 返回编码 */
    /** 返回编码 */
    private int resultCode ;
    
    /** 返回消息 */
    /** 返回消息 */
    private String msg;
    
    /** 结果数据  */
    /** 结果数据  */
    private Object data;
    
    /**
     * 非法请求状态码
     * 非法请求状态码
     */
    public static final int CODE_FORBIDDEN = 403;
    
src/main/java/com/qxueyou/scc/base/model/ResultJson.java
@@ -3,12 +3,12 @@
import java.io.Serializable;
/**
 * 操作结果类 接口统一返回数据类型
 * 操作结果类 接口统一返回数据类型
 * 
 * {
     *     "result": 返回结果(boolean值),
     *  "data": 返回数据(object),
     *  "msg": 返回消息,
     *     "result": 返回结果(boolean值),
     *  "data": 返回数据(object),
     *  "msg": 返回消息,
 * }
 * 
 * @author zhiyong
@@ -18,16 +18,16 @@
    
    private static final long serialVersionUID = -9024761391789730558L;
    /** 成功:true,失败:false */
    /** 成功:true,失败:false */
    private boolean result;
    
    /** 返回编码 */
    /** 返回编码 */
    private int resultCode ;
    
    /** 返回消息 */
    /** 返回消息 */
    private String msg;
    
    /** 结果数据  */
    /** 结果数据  */
    private Object data;
    
    public ResultJson() {
src/main/java/com/qxueyou/scc/base/model/TransactException.java
@@ -1,7 +1,7 @@
package com.qxueyou.scc.base.model;
/**
 * 自定义事务异常
 * 自定义事务异常
 * @author zhiyong
 *
 */
src/main/java/com/qxueyou/scc/base/model/UserCipher.java
@@ -18,20 +18,20 @@
    private static final long serialVersionUID = 898178024362728710L;
    // 用户ID
    // 用户ID
    @Id
    @Column(name = "user_id", unique = true, nullable = false, length = 32)
    private String userId;
    
    // RSA密钥模
    // RSA密钥模
    @Column(name = "MODULUS", length = 255)
    private String modulus;
    
    // RSA公钥指数
    // RSA公钥指数
    @Column(name = "PUBLIC_EXPONENT", length = 255)
    private String publicExponent;
    
    // RSA私钥指数
    // RSA私钥指数
    @Column(name = "PRIVATE_EXPONENT", length = 255)
    private String privateExponent;
    
src/main/java/com/qxueyou/scc/base/model/UserInfoWrapper.java
@@ -13,8 +13,8 @@
import com.qxueyou.scc.user.model.User;
/**
 * 保存用户缓存信息
 * @author 德虎
 * 保存用户缓存信息
 * @author 德虎
 *
 */
public class UserInfoWrapper implements Serializable{
@@ -25,121 +25,121 @@
    private boolean admin = false;
    /** 用户信息map */
    /** 用户信息map */
    private final Map<String,Object> currentUser = new HashMap<String,Object>(10);
    /** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */
    /** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */
    public final static String INF_ROLE = "role";
    /** "roleId":session中UserInfoWrapper保存的key */
    /** "roleId":session中UserInfoWrapper保存的key */
    public static final String SESSION_USER_INFO_KEY = "SESSION_USER_INFO_KEY";
    /**保存当前在线用户ID与sessionID*/
    /**保存当前在线用户ID与sessionID*/
    public static final String REDIS_USER_ONLINE_MAP_KEY="redis.user.online.map.key";
    /** "roleId":角色ID */
    /** "roleId":角色ID */
    public final static String INF_ROLE_ID = "roleId";
    /** "roleIsAdmin":是否为管理员 */
    /** "roleIsAdmin":是否为管理员 */
    public final static String INF_ROLE_IS_ADMIN = "roleIsAdmin";
    /** "roleValue":"角色值" */
    /** "roleValue":"角色值" */
    public final static String INF_ROLE_VALUE = "roleValue";
    /** "roleValue":"角色" */
    /** "roleValue":"角色" */
    public final static String INF_ROLE_ENAME = "roleEname";
    /** "userId":"用户ID" */
    /** "userId":"用户ID" */
    public final static String INF_USER_ID = "userId";
    /** "userName":"用户名" */
    /** "userName":"用户名" */
    public final static String INF_USER_NAME = "userName";
    /** "userNickName":"用户昵称" */
    /** "userNickName":"用户昵称" */
    public final static String INF_USER_NICK_NAME = "userNickName";
    /** "userMobilePhone":"手机号" */
    /** "userMobilePhone":"手机号" */
    public final static String INF_USER_MOBILE_PHONE = "userMobilePhone";
    /** "userAccount":"帐号" */
    /** "userAccount":"帐号" */
    public final static String INF_USER_ACCOUNT = "userAccount";
    /** "userHeadImg":"头像" */
    /** "userHeadImg":"头像" */
    public final static String INF_USER_HEAD_IMG = "userHeadImg";
    /** "orgId":"机构ID" */
    /** "orgId":"机构ID" */
    public final static String INF_ORG_ID = "orgId";
    /** "topOrgId":"最上层机构ID" */
    /** "topOrgId":"最上层机构ID" */
    public final static String INF_TOP_ORG_ID = "topOrgId";
    /** "orgName":"机构名称" */
    /** "orgName":"机构名称" */
    public final static String INF_ORG_NAME = "orgName";
    /** "orgShortName":"机构简称" */
    /** "orgShortName":"机构简称" */
    public final static String INF_ORG_SHORT_NAME = "orgShortName";
    /** "orgCode":"机构代码" */
    /** "orgCode":"机构代码" */
    public final static String INF_ORG_CODE = "orgCode";
    /** "orgType":"机构类型" */
    /** "orgType":"机构类型" */
    public final static String INF_ORG_TYPE = "orgType";
    /** "orgLogPath":"机构LOGO" */
    /** "orgLogPath":"机构LOGO" */
    public final static String INF_ORG_LOGO_PATH = "orgLogPath";
    /** "courseId":"科目ID" */
    /** "courseId":"科目ID" */
    public final static String INF_COURSE_ID = "courseId";
    /** "courseCode":"科目代码" */
    /** "courseCode":"科目代码" */
    public final static String INF_COURSE_CODE = "courseCode";
    /** "courseName":"科目名称" */
    /** "courseName":"科目名称" */
    public final static String INF_COURSE_NAME = "courseName";
    /** "courseType":"科目类型" */
    /** "courseType":"科目类型" */
    public final static String INF_COURSE_TYPE = "courseType";
    /** "classId":"班级ID" */
    /** "classId":"班级ID" */
    public final static String INF_CLASS_ID = "classId";
    /** "className":"班级名" */
    /** "className":"班级名" */
    public final static String INF_CLASS_NAME = "className";
    /** "classCharger":"班主任" */
    /** "classCharger":"班主任" */
    public final static String INF_CLASS_CHARGER = "classCharger";
    /** "teacher":"讲师" */
    /** "teacher":"讲师" */
    public final static String ROLE_TEACHER = "teacher";
    /** "assistantTeacher":"助理讲师" */
    /** "assistantTeacher":"助理讲师" */
    public final static String ROLE_ASSISTANT_TEACHER = "assistantTeacher";
    /** "salesman":"销售" */
    /** "salesman":"销售" */
    public final static String ROLE_SALESMAN = "salesman";
    /** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */
    /** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */
    public final static String ROLE_CHARGER = "charger";
    /** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */
    /** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */
    public final static String ROLE_ADMIN = "admin";
    /** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */
    /** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */
    public final static String ROLE_STUDENT = "student";
    /** "role":"角色", [STUDENT,CHARGER,TEACHER,SALESMAN,ADMIN] */
    /** "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" */
    /** "loginIp":"登录IP" */
    public final static String INF_LOGIN_IP = "loginIp";
    /** "loginPlatForm":"登录平台" */
    /** "loginPlatForm":"登录平台" */
    public final static String INF_LOGIN_PLAT_FORM = "loginPlatForm";
    /** "loginCacheIpFlag":"是否需要在过滤器对当前用户增加缓存(用于保证一个用户只能在一个IP上登录)" */
    /** "loginCacheIpFlag":"是否需要在过滤器对当前用户增加缓存(用于保证一个用户只能在一个IP上登录)" */
    public final static String INF_LOGIN_CACHE_IP_FLAG = "loginCacheIpFlag";
    /** "rolesKey":"",  */
@@ -149,7 +149,7 @@
    private final Map<String,List<Map<String,Object>>> roles = new HashMap<String,List<Map<String,Object>>>(5);
    /**
     * 根据key值获取当前用户信息
     * 根据key值获取当前用户信息
     * @param key
     * @return
     */
@@ -158,7 +158,7 @@
    }
    /**
     * 获取当前用户角色
     * 获取当前用户角色
     * @param key
     * @return
     */
@@ -167,7 +167,7 @@
    }
    /**
     * 获取当前用户角色ID
     * 获取当前用户角色ID
     * @param key
     * @return
     */
@@ -176,7 +176,7 @@
    }
    /**
     * 获取当前用户角色值
     * 获取当前用户角色值
     * @param key
     * @return
     */
@@ -185,7 +185,7 @@
    }
    /**
     * 根据key值设置当前用户信息
     * 根据key值设置当前用户信息
     * @param key
     * @return
     */
@@ -194,7 +194,7 @@
    }
    /**
     * 设置用户信息
     * 设置用户信息
     * @param key
     * @return
     */
@@ -210,7 +210,7 @@
    }
    /**
     * 设置机构信息
     * 设置机构信息
     * @param key
     * @return
     */
@@ -235,7 +235,7 @@
    }
    /**
     * 设置班级信息
     * 设置班级信息
     * @param key
     * @return
     */
@@ -254,7 +254,7 @@
    }
    /**
     * 设置科目信息
     * 设置科目信息
     * @param key
     * @return
     */
@@ -275,7 +275,7 @@
    }
    /**
     * 设置当前客户是否编辑过角色的按钮权限信息
     * 设置当前客户是否编辑过角色的按钮权限信息
     * @param key
     * @return
     */
@@ -291,7 +291,7 @@
    }
    /**
     * 获取当前用户角色是否处理过按钮权限
     * 获取当前用户角色是否处理过按钮权限
     * @param key
     * @return
     */
@@ -300,8 +300,8 @@
    }
    /**
     * 设置用户登录IP信息
     * @param cacheIpFlag 是否需要缓存
     * 设置用户登录IP信息
     * @param cacheIpFlag 是否需要缓存
     * @param ip
     */
    public void setLoginInfo(boolean cacheIpFlag,String ip, String platForm){
@@ -311,7 +311,7 @@
    }
    /**
     * 获取当前用户登录IP
     * 获取当前用户登录IP
     * @param key
     * @return
     */
@@ -320,7 +320,7 @@
    }
    /**
     * 获取当前用户是否需要缓存
     * 获取当前用户是否需要缓存
     * @param key
     * @return
     */
@@ -329,7 +329,7 @@
    }
    /**
     * 获取当前登录平台
     * 获取当前登录平台
     * @param key
     * @return
     */
@@ -338,7 +338,7 @@
    }
    /**
     * 添加角色
     * 添加角色
     * @param key
     * @param value
     * @return
@@ -348,7 +348,7 @@
    }
    /**
     * 获取最高优先级角色
     * 获取最高优先级角色
     * @return
     */
    public List<Map<String,Object>> getDefaultRole(){
@@ -364,7 +364,7 @@
    }
    /**
     * 获取指定角色的信息
     * 获取指定角色的信息
     * @return
     */
    public List<Map<String,Object>> getRoleInfo(String roleKey){
@@ -380,7 +380,7 @@
    }
    /**
     * 获取最高优先级角色名字
     * 获取最高优先级角色名字
     * @return
     */
    public String getDefaultRoleName(){
@@ -396,7 +396,7 @@
    }
    /**
     * 获取所有菜单
     * 获取所有菜单
     * @return
     */
    public List<SysMenu> getMenus() {
@@ -404,7 +404,7 @@
    }
    /**
     * 设置所有菜单
     * 设置所有菜单
     * @return
     */
    public void setMenus(List<SysMenu> menus) {
src/main/java/com/qxueyou/scc/base/model/WbCacheKey.java
@@ -16,7 +16,7 @@
import com.fasterxml.jackson.annotation.JsonIgnore;
/**
 * 微商缓存表
 * 微商缓存表
 * @author zhiyong
 *
 */
@@ -36,15 +36,15 @@
    @Column(name="cache_key", length=255)
    private String cacheKey;
    /** 课程id  */
    /** 课程id  */
    @Column(name="SUBJECT_ID", length=32)
    private String subjectId;
    
    /** 对象id  */
    /** 对象id  */
    @Column(name="object_id", length=32)
    private String objectId;
    /**  对象type 1:机构 2:班级 */
    /**  对象type 1:机构 2:班级 */
    @Column(name="OBJECT_TYPE")
    private int objectType;
    
@@ -52,13 +52,13 @@
    
    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;
src/main/java/com/qxueyou/scc/base/model/WeixinContants.java
@@ -1,19 +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";
    
}
src/main/java/com/qxueyou/scc/base/model/WxTemplateMsg.java
@@ -4,8 +4,8 @@
import java.util.Map;
/**
 * 微信模板消息
 * @author 德虎
 * 微信模板消息
 * @author 德虎
 */
public class WxTemplateMsg  extends BaseVO {
    
src/main/java/com/qxueyou/scc/base/service/ICacheService.java
@@ -6,29 +6,29 @@
import java.util.concurrent.TimeUnit;
/**
 * 缓存服务接口
 * 缓存服务接口
 * 
 * @author 德虎
 * @author 德虎
 *
 */
public interface ICacheService {
    /**
     * 根据key值获取指定类型对象
     * 根据key值获取指定类型对象
     * 
     * @param key
     *            对象key值
     *            对象key值
     * @param cls
     *            对象类型
     *            对象类型
     * @return
     */
    <T> T get(String key, Class<T> cls);
    /**
     * 根据key值获取指定类型对象
     * 根据key值获取指定类型对象
     * 
     * @param key
     *            对象key值
     *            对象key值
     * @return
     */
    <T> T get(String key);
@@ -40,7 +40,7 @@
    Long decr(String key);
    /**
     * 根据key值获取指定类型对象
     * 根据key值获取指定类型对象
     * 
     * @param keys
     * @return
@@ -48,90 +48,90 @@
    Map<String, Object> getBulk(String... keys);
    /**
     * 将对象缓存到缓存池
     * 将对象缓存到缓存池
     * 
     * @param key
     *            对象key值
     *            对象key值
     * @param expiredTime
     *            超时时间,单位秒
     *            超时时间,单位秒
     * @param obj
     *            要缓存的对象
     *            要缓存的对象
     * @return
     */
    void set(String key, int expiredTime, Object obj);
    /**
     * 将对象缓存到缓存池,永不过期
     * 将对象缓存到缓存池,永不过期
     * 
     * @param key
     *            对象key值
     *            对象key值
     * @param obj
     *            要缓存的对象
     *            要缓存的对象
     * @return
     */
    void set(String key, Object obj);
    /**
     * 将对象缓存到缓存池
     * 将对象缓存到缓存池
     * 
     * @param key
     *            cache名称
     *            cache名称
     * @param hashKey
     *            键值
     *            键值
     * @param obj
     *            要缓存的对象
     *            要缓存的对象
     * @return
     */
    void set(String key, String hashKey, Object obj);
    /**
     * 将对象缓存到缓存池
     * 将对象缓存到缓存池
     * 
     * @param key
     *            对象key值
     *            对象key值
     * @param expiredTime
     *            超时时间,单位秒
     *            超时时间,单位秒
     * @param obj
     *            要缓存的对象
     *            要缓存的对象
     * @return
     */
    boolean add(String key, int expiredTime, Object obj);
    /**
     * 将对象从缓存池删除
     * 将对象从缓存池删除
     * 
     * @param key
     *            对象key值
     *            对象key值
     * @return
     */
    void delete(String key);
    /**
     * 追加缓存池的值
     * 追加缓存池的值
     * 
     * @param key
     *            对象key值
     *            对象key值
     * @return
     */
    void append(String key, String value);
    /**
     * 获取list缓存中key所有value值
     * 获取list缓存中key所有value值
     */
    <T> List<T> lstAll(String key);
    /**
     * 向list缓存中放入值
     * 向list缓存中放入值
     */
    void lstRightPush(String key, Object value);
    /**
     * 向list缓存中放入值
     * 向list缓存中放入值
     */
    <T> void lstRightPushAll(String key, Collection<T> values);
    /**
     * 从列表获取指定范围内的数据
     * 从列表获取指定范围内的数据
     * 
     * @param key
     * @param start
@@ -145,17 +145,17 @@
    void lstClear(String key);
    /**
     * 根据key,index删除list中的value
     * 根据key,index删除list中的value
     */
    void lstRemove(String key, Object value);
    /**
     * 通过key返回list中的值,并移除值
     * 通过key返回list中的值,并移除值
     */
    String lstLeftPop(String key);
    
    /**
     * 向hash缓存中存入对象
     * 向hash缓存中存入对象
     *
     * @param key
     * @param hashKey
@@ -164,7 +164,7 @@
    void putKeyForHash(Object key, Object hashKey, Object value);
    
    /**
     * 对key设置过其实键
     * 对key设置过其实键
     * @param key
     * @param timeout
     * @param unit
@@ -172,7 +172,7 @@
    void expire(String key, long timeout, TimeUnit unit);
    
    /**
     * 如果不存在就添加
     * 如果不存在就添加
     * @param key
     * @param obj
     * @return
src/main/java/com/qxueyou/scc/base/service/ICommonService.java
@@ -1,8 +1,8 @@
/******************************************************************************
 * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
 * All Rights Reserved.
 * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
 * 不得使用、复制、修改或发布本软件.
 * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
 * 不得使用、复制、修改或发布本软件.
 *****************************************************************************/
package com.qxueyou.scc.base.service;
@@ -13,33 +13,33 @@
import com.qxueyou.scc.base.model.Result;
/**
 * 通用服务
 * @history 2010-09-12 夏德虎 新建
 * 通用服务
 * @history 2010-09-12 夏德虎 新建
 *
 */
public interface ICommonService {
    /**
     * 读取对象
     * @param <T> 泛型
     * @param clz 实体类型
     * @param pk 实体主键
     * @return 查询结果
     * 读取对象
     * @param <T> 泛型
     * @param clz 实体类型
     * @param pk 实体主键
     * @return 查询结果
     */
    <T> T read(Class<T> clz,Serializable pk);
    /**
     * 保存对象
     * @return 查询结果
     * 保存对象
     * @return 查询结果
     */
    public Result save(Object obj);
    /**
     * 根据hql查询,并返回执行类型的列表结果
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * 根据hql查询,并返回执行类型的列表结果
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @return
     */
    <T> List<T> find(String hql,List<Object> args,Class<T> cls);
src/main/java/com/qxueyou/scc/base/service/IDictionaryService.java
@@ -5,14 +5,14 @@
public interface IDictionaryService {
    
    /**
     * 获取配置
     * 获取配置
     * @param key
     * @return
     */
    String getConfig(String key);
    
    /**
     * 更新配置
     * 更新配置
     * @param key
     * @param value
     * @return
src/main/java/com/qxueyou/scc/base/service/IFileUploadService.java
@@ -5,7 +5,7 @@
import com.qxueyou.scc.base.model.Result;
/**
 * 所有文件上传的操作,单独到文件上传工程后,后续业务操作需要下载文件调用的方法
 * 所有文件上传的操作,单独到文件上传工程后,后续业务操作需要下载文件调用的方法
 * @author ody.yuan
 *
 */
@@ -13,54 +13,54 @@
    
    
    /**
     * 从oss将文件拿到应用服务器
     * @param key           相对路径
     * @param directory        拿到应用服务器的存储路径
     * @param module        调用业务模块编码
     * @param userId        操作人
     * 从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        操作人
     * 从杭州 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        操作人
     * 操作完之后,删除临时文件
     * @param derectory        拿到应用服务器的存储路径
     * @param module        调用业务模块编码
     * @param userId        操作人
     * @return
     */
    Result doDeleteTempOssFile(String directory,String module,String userId);
    
    /**
     * 操作完之后,删除临时文件
     * @param file            拿到应用服务器的文件
     * @param module        调用业务模块编码
     * @param userId        操作人
     * 操作完之后,删除临时文件
     * @param file            拿到应用服务器的文件
     * @param module        调用业务模块编码
     * @param userId        操作人
     * @return
     */
    Result doDeleteTempOssFile(File file,String module,String userId);
    /**
     * 更新上传文件使用轨迹
     * @param fullPath 路径
     * 更新上传文件使用轨迹
     * @param fullPath 路径
     * @param module 
     * @param useFlag 使用状态
     * @param bussinessId 业务ID
     * @param useFlag 使用状态
     * @param bussinessId 业务ID
     * @return
     */
    Result updateUploadTrace(String fullPath,String module,int useFlag,String bussinessId);
    
    /**
     * 通过路径下载微信图像到服务器
     * 通过路径下载微信图像到服务器
     * @return
     */
    String downloadWxImg(String strUrl,String openId);
src/main/java/com/qxueyou/scc/base/service/IONSExceptionLogService.java
@@ -3,7 +3,7 @@
import com.qxueyou.scc.base.model.Result;
/**
 * ONS严格异常处理,消息处理都捕获Exception,并且不抛出,将异常存入表中
 * ONS严格异常处理,消息处理都捕获Exception,并且不抛出,将异常存入表中
 * @author ody.yuan
 *
 */
@@ -11,12 +11,12 @@
    
    
    /**
     * ONS 日志记录
     * ONS 日志记录
     * 
     * @param topic        订阅主题
     * @param msgType    同一订阅主题支撑多个业务类型时,业务类型
     * @param businessId异常堆栈:自定义ID
     * @param desp        参数列表
     * @param topic        订阅主题
     * @param msgType    同一订阅主题支撑多个业务类型时,业务类型
     * @param businessId异常堆栈:自定义ID
     * @param desp        参数列表
     * @return
     */
    Result logSaveExceptionLog(String topic, String msgType, String businessId, String desp);
src/main/java/com/qxueyou/scc/base/service/impl/CommonAppService.java
@@ -1,8 +1,8 @@
/******************************************************************************
 * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
 * All Rights Reserved.
 * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
 * 不得使用、复制、修改或发布本软件.
 * 本软件为深圳市企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
 * 不得使用、复制、修改或发布本软件.
 *****************************************************************************/
package com.qxueyou.scc.base.service.impl;
@@ -30,19 +30,19 @@
@Service(value = "commonAppService")
/**
 * @author 夏德虎
 * @author 夏德虎
 * @since JDK1.7
 * @history 2014-11-18 夏德虎 新建
 * @history 2014-11-18 夏德虎 新建
 */
public class CommonAppService implements ICommonService {
    /**
     * 获取事务管理器
     * 获取事务管理器
     */
    @PersistenceContext
    public EntityManager em;
    
    /**
     * 获取querydsl 查询工厂
     * 获取querydsl 查询工厂
     */
    public JPAQueryFactory queryFactory;
    
@@ -59,7 +59,7 @@
    /**
     * 删除实体
     * 删除实体
     * @param trace
     */
    public void deleteTrace(ITrace trace) {
@@ -69,7 +69,7 @@
    }
    /**
     * 删除实体集合
     * 删除实体集合
     * @param traces
     */
    public <T extends ITrace> void  deleteTraces(List<T> traces) {
@@ -79,7 +79,7 @@
    }
    /**
     * 依赖注入
     * 依赖注入
     *
     * @param commonDAO
     */
@@ -90,11 +90,11 @@
    }
    /**
     * 读取对象
     * @param <T> 泛型
     * @param clz 实体类型
     * @param pk 实体主键
     * @return 查询结果
     * 读取对象
     * @param <T> 泛型
     * @param clz 实体类型
     * @param pk 实体主键
     * @return 查询结果
     */
    public <T> T read(Class<T> clz,Serializable pk){
        return this.commonDAO.read(clz, pk);
@@ -102,8 +102,8 @@
    
    /**
     * 保存对象
     * @return 查询结果
     * 保存对象
     * @return 查询结果
     */
    public Result save(Object obj){
        this.commonDAO.saveOrUpdate(obj);
@@ -112,30 +112,30 @@
    }
    
    /**
     * 刷新对象 手动提交
     * @return 查询结果
     * 刷新对象 手动提交
     * @return 查询结果
     */
    public void flush(){
        getCommonDAO().getHibernateTemplate().flush();
    }
    
    /**
     * 清除缓存
     * 清除缓存
     */
    public void clearCache(){
        getCommonDAO().getHibernateTemplate().clear();
    }
    
    /**
     * 清除单个缓存
     * 清除单个缓存
     */
    public void evict(Object obj){
        getCommonDAO().getHibernateTemplate().evict(obj);
    }
    
    /**
     * 保存对象
     * @return 查询结果
     * 保存对象
     * @return 查询结果
     */
    public Result insert(Object obj){
        this.commonDAO.save(obj);
@@ -144,8 +144,8 @@
    }
    
    /**
     * 保存对象
     * @return 查询结果
     * 保存对象
     * @return 查询结果
     */
    @SuppressWarnings("rawtypes")
    public Result saveOrUpdateAll(Collection collection){
@@ -155,10 +155,10 @@
    }
    
    /**
     * 根据hql查询,并返回执行类型的列表结果
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * 根据hql查询,并返回执行类型的列表结果
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @return
     */
    public <T> List<T> find(String hql,List<Object> args,Class<T> cls){
@@ -166,10 +166,10 @@
    }
    
    /**
     * 根据hql查询,并返回执行类型的列表结果
     * 根据hql查询,并返回执行类型的列表结果
     *
     * @param hql 查询语句
     * @param cls 返回类型
     * @param hql 查询语句
     * @param cls 返回类型
     * @return
     */
    public int findCount(String hql, List<Object> args) {
@@ -178,17 +178,17 @@
    
    
    /**
     * 保存或更新对象
     * 保存或更新对象
     */
    public void deleteAll(@SuppressWarnings("rawtypes") Collection col) {
        this.commonDAO.deleteAll(col);
    }
    
    /**
     * 根据hql查询,并返回执行类型的唯一结果
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * 根据hql查询,并返回执行类型的唯一结果
     * @param hql 查询语句
     * @param args 参数
     * @param cls 返回类型
     * @return
     */
    public <T> T findUnique(String hql,List<Object> args,Class<T> cls){
@@ -196,7 +196,7 @@
    }
    /**
     * 使用sql查询结果
     * 使用sql查询结果
     * @param sql
     * @param args
     * @return
@@ -207,7 +207,7 @@
    }
    
    /**
     * 使用sql查询结果
     * 使用sql查询结果
     * @param sql
     * @param args
     * @return
@@ -218,7 +218,7 @@
    }
    
    /**
     * 使用sql查询结果
     * 使用sql查询结果
     * @param sql
     * @param args
     * @return
@@ -240,11 +240,11 @@
    }
    
    /**
     * hql只含单一参数
     * hql只含单一参数
     *
     * @param hql 查询语句
     * @param args 参数数组
     * @param cls 返回类型
     * @param hql 查询语句
     * @param args 参数数组
     * @param cls 返回类型
     * @return
     */
    public Result bulkUpdateInLoop(String hql, Object args[]) {
@@ -252,7 +252,7 @@
    }
    
    /**
     * 复杂hql
     * 复杂hql
     * @param sql
     * @param map
     * @param cls
@@ -263,7 +263,7 @@
    }
    
    /**
     * 复杂hql
     * 复杂hql
     * @param sql
     * @param map
     * @param cls
@@ -274,7 +274,7 @@
    }
    
    /**
     * 复杂hql
     * 复杂hql
     * @param sql
     * @param map
     * @param cls
@@ -285,10 +285,10 @@
    }
    
    /**
     * 返回个数 复杂hql
     * 返回个数 复杂hql
     *
     * @param hql 查询语句
     * @param cls 返回类型
     * @param hql 查询语句
     * @param cls 返回类型
     * @return
     */
    public int findCountByComplexHql(final String hql, final Map<String, Object> map) {
@@ -296,10 +296,10 @@
    }
    
     /**
     * 返回个数 复杂sql
     * 返回个数 复杂sql
     *
     * @param hql 查询语句
     * @param cls 返回类型
     * @param hql 查询语句
     * @param cls 返回类型
     * @return
     */
    public int findCountByComplexSql(final String hql, final Map<String, Object> map) {
@@ -307,7 +307,7 @@
    }
    
    /**
     * 复杂sql
     * 复杂sql
     * @param sql
     * @param map
     * @param cls
@@ -318,7 +318,7 @@
    }
    
    /**
     * 复杂hql
     * 复杂hql
     * @param sql
     * @param map
     * @param cls
@@ -329,7 +329,7 @@
    }
    
    /**
     * 根据hql查询,并返回执行类型的列表结果,列表数据为Map
     * 根据hql查询,并返回执行类型的列表结果,列表数据为Map
     * @param hql
     * @param map
     * @return
@@ -339,7 +339,7 @@
    }
    
    /**
     * 根据hql查询,并返回执行类型的列表结果,列表数据为Map
     * 根据hql查询,并返回执行类型的列表结果,列表数据为Map
     * @param hql
     * @param args
     * @return
@@ -349,7 +349,7 @@
    }
    
    /**
     * 分页查询
     * 分页查询
     * @param hql
     * @param page
     * @param args
@@ -361,7 +361,7 @@
    }
    
    /**
     * 查询
     * 查询
     * @param hql
     * @param args
     * @return
@@ -372,7 +372,7 @@
    
    /**
     * 根据配置key查询value值
     * 根据配置key查询value值
     * @param key
     * @return
     */
@@ -381,7 +381,7 @@
    }
    
    /**
     * 根据字典类型查询字典内容的list
     * 根据字典类型查询字典内容的list
     * @param dicType
     * @return
     */
src/main/java/com/qxueyou/scc/base/service/impl/DictionaryService.java
@@ -8,7 +8,7 @@
import com.qxueyou.scc.base.util.CollectionUtils;
/**
 * 配置服务,读取配置项
 * 配置服务,读取配置项
 * 
 * @author lyl
 *
src/main/java/com/qxueyou/scc/base/service/impl/FileUploadService.java
@@ -25,7 +25,7 @@
/**
 * 所有文件上传的操作,单独到文件上传工程后,后续业务操作需要下载文件调用的方法
 * 所有文件上传的操作,单独到文件上传工程后,后续业务操作需要下载文件调用的方法
 * @author ody.yuan
 *
 */
@@ -53,7 +53,7 @@
            file = ossService.getObject(key, directory);
            return file;
        }catch( Exception e ){
            log.error(userId + "失败:OSS下载路径:" + key + " ;应用服务器路径:" + directory  + " ; errMsg=" + e.getMessage() , e );
            log.error(userId + "失败:OSS下载路径:" + key + " ;应用服务器路径:" + directory  + " ; errMsg=" + e.getMessage() , e );
            return file ;
        }
        
@@ -66,7 +66,7 @@
            file = ossVideoService.getObject(key, directory);
            return file;
        }catch( Exception e ){
            log.error(userId + "失败:OSSVideo下载路径:" + key + " ;应用服务器路径:" + directory  + " ; errMsg=" + e.getMessage() , e );
            log.error(userId + "失败:OSSVideo下载路径:" + key + " ;应用服务器路径:" + directory  + " ; errMsg=" + e.getMessage() , e );
            return file ;
        }
        
@@ -78,7 +78,7 @@
        Boolean result = FileUtils.deleteQuietly(new File(directory));
        
        if( result ){
            this.insertUploadLog(userId,"成功删除:OSS-OSSVideo0:" + directory  , module );
            this.insertUploadLog(userId,"成功删除:OSS-OSSVideo0:" + directory  , module );
            return new Result(true);
        }else{
            return new Result(false);
@@ -91,11 +91,11 @@
        Boolean result = FileUtils.deleteQuietly(file);
        
        if( result ){
            this.insertUploadLog(userId,"成功删除:OSS-OSSVideo1:" + file.getAbsolutePath()  , module );
            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 );
            log.error(userId + "失败:OSS-OSSVideo删除本地文件1:" + file.getAbsolutePath()   );
            this.insertUploadLog(userId,"失败删除:OSS-OSSVideo1:"  + file.getAbsolutePath()   , module );
            return new Result(false);
        }
        
@@ -103,9 +103,9 @@
    }
    
    /**
     * 插入本地文件下载日志
     * @param content        内容
     * @param desp            上传模块
     * 插入本地文件下载日志
     * @param content        内容
     * @param desp            上传模块
     * @return
     */
    private Result insertUploadLog(String userId ,String content, String desp ){
@@ -126,11 +126,11 @@
    }
    
    /**
     * 更新上传文件使用轨迹
     * @param fullPath 路径
     * 更新上传文件使用轨迹
     * @param fullPath 路径
     * @param module 
     * @param useFlag 使用状态
     * @param bussinessId 业务ID
     * @param useFlag 使用状态
     * @param bussinessId 业务ID
     * @return
     */
    public Result updateUploadTrace(String fullPath,String module,int useFlag,String bussinessId){
@@ -147,7 +147,7 @@
    }
    
    /**
     * 通过路径下载微信图像到服务器
     * 通过路径下载微信图像到服务器
     * @return
     */
    @SuppressWarnings("unused")
@@ -161,7 +161,7 @@
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();  
            conn.setRequestMethod("GET");  
            conn.setConnectTimeout(5 * 1000);  
            InputStream inStream = conn.getInputStream();//通过输入流获取图片数据
            InputStream inStream = conn.getInputStream();//通过输入流获取图片数据
            String uuid = UUIDUtils.generateUUID();
            String imgPath = "/web/res/img/user/"+uuid+"/" + openId + ".png";
//            Result result = ossService.uplpadImage(inStream, "png", imgPath);
@@ -171,7 +171,7 @@
//            }
        } catch (Exception e) {  
            e.printStackTrace();  
            log.error("微信头像上传失败" + e);
            log.error("微信头像上传失败" + e);
        }  
        
       return null;
src/main/java/com/qxueyou/scc/base/service/impl/LicenseChecker.java
@@ -138,7 +138,7 @@
    private void exit(String msg) {
        log.error("license invalid:"+msg);
        /**
         * 临时屏蔽
         * 临时屏蔽
         */
//        System.exit(-1);
    }
src/main/java/com/qxueyou/scc/base/service/impl/LicenseService.java
@@ -21,7 +21,7 @@
    public boolean isValid() {
        return true;
        /**
         * 临时屏蔽
         * 临时屏蔽
         */
//        if(isLicenseNull()) {
//            return false;
@@ -32,7 +32,7 @@
    private boolean isLicenseNull() {
        return false;
        /**
         * 临时屏蔽
         * 临时屏蔽
         */
//        if(license==null && (license=checker.getLicense())==null) {
//            return true;
@@ -43,9 +43,9 @@
    @Override
    public String getCustomerName() {
        /**
         * 临时屏蔽
         * 临时屏蔽
         */
        return "开发公司";
        return "开发公司";
//        if(isLicenseNull()) {
//            return null;
//        }
@@ -55,9 +55,9 @@
    @Override
    public String getProductName() {
        /**
         * 临时屏蔽
         * 临时屏蔽
         */
        return "开发产品";
        return "开发产品";
//        if(isLicenseNull()) {
//            return null;
//        }
src/main/java/com/qxueyou/scc/base/service/impl/ONSExceptionLogService.java
@@ -13,7 +13,7 @@
import com.qxueyou.scc.sys.service.ISysLogService;
/**
 * ONS严格异常处理,消息处理都捕获Exception,并且不抛出,将异常存入表中
 * ONS严格异常处理,消息处理都捕获Exception,并且不抛出,将异常存入表中
 * @author ody.yuan
 *
 */
@@ -27,7 +27,7 @@
    @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 ;
        
src/main/java/com/qxueyou/scc/base/service/impl/RedisCacheBean.java
@@ -22,9 +22,9 @@
import javax.annotation.Resource;
/**
 * 阿里云OCS缓存服务
 * 阿里云OCS缓存服务
 *
 * @author 德虎
 * @author 德虎
 *
 */
@Service
src/main/java/com/qxueyou/scc/base/util/AESUtil.java
@@ -50,7 +50,7 @@
    }
    /**
     * 将16进制转换为二进制
     * 将16进制转换为二进制
     * 
     * @param hexStr
     * @return
@@ -69,7 +69,7 @@
    }
    /**
     * 将二进制转换成16进制
     * 将二进制转换成16进制
     * 
     * @param buf
     * @return
@@ -87,7 +87,7 @@
    }
    
    /**
     * AES解密
     * AES解密
     */
    public static String decode(String aesKey, String encryptText) {
        try {
src/main/java/com/qxueyou/scc/base/util/Base64Utils.java
@@ -9,7 +9,7 @@
    private static final String UTF8 = "utf-8";  
  
    /** 
     * BASE64编码
     * BASE64编码
     * @param src 
     * @return 
     * @throws Exception 
@@ -20,7 +20,7 @@
    }  
      
    /** 
     * BASE64解码
     * BASE64解码
     * @param dest 
     * @return 
     * @throws Exception 
src/main/java/com/qxueyou/scc/base/util/ClientUtils.java
@@ -32,21 +32,21 @@
/**
 * 客户端信息处理工具类
 * @author 德虎 2014-12-29
 * 客户端信息处理工具类
 * @author 德虎 2014-12-29
 *
 */
public final class ClientUtils {
    /*
     * 线程变量: 用户信息
     * 线程变量: 用户信息
     */
    private static ThreadLocal<UserInfoWrapper> threadLocalUserInfo = new ThreadLocal<UserInfoWrapper>();
    private static UserInfoWrapper wrapper = threadLocalUserInfo.get();
    private static RedisTemplate redisTemplate = (RedisTemplate)SpringContextHolder.getBean("redisTemplate");
    /** 得到用户信息*/
    /** 得到用户信息*/
    public static UserInfoWrapper getUserInfo() {
//        UserInfoWrapper wrapper = threadLocalUserInfo.get();
//        if(wrapper == null) {
@@ -54,7 +54,7 @@
        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);
@@ -69,13 +69,13 @@
    }
    /** 设置用户信息*/
    /** 设置用户信息*/
    public static void setUserInfo(UserInfoWrapper wrapper) {
        threadLocalUserInfo.remove();
        threadLocalUserInfo.set(wrapper);
    }
    /** 得到userId*/
    /** 得到userId*/
    public static String getUserId(){
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        HttpSession session = request.getSession();
@@ -86,7 +86,7 @@
        return info;
    }
    /** 得到userName*/
    /** 得到userName*/
    public static String getUserName(){
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        HttpSession session = request.getSession();
@@ -97,23 +97,23 @@
        return info;
    }
    /** 得到用户头像*/
    /** 得到用户头像*/
    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*/
    /** 得到classId*/
    public static String getClassId(){
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        HttpSession session = request.getSession();
@@ -125,7 +125,7 @@
//        return getUserInfo().getInfo(UserInfoWrapper.);
    }
    /** 得到className*/
    /** 得到className*/
    public static String getClassName(){
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        HttpSession session = request.getSession();
@@ -143,73 +143,73 @@
        return getUserInfo().getInfo(UserInfoWrapper.INF_CLASS_CHARGER);
    }
    /** 得到科目ID*/
    /** 得到科目ID*/
    public static String getCourseId(){
        return getUserInfo().getInfo(UserInfoWrapper.INF_COURSE_ID);
    }
    /** 得到科目Name*/
    /** 得到科目Name*/
    public static String getCourseName(){
        return getUserInfo().getInfo(UserInfoWrapper.INF_COURSE_NAME);
    }
    /** 得到机构ID*/
    /** 得到机构ID*/
    public static String getOrgId(){
        return "1";
    }
    /** 得到最上层机构ID*/
    /** 得到最上层机构ID*/
    public static String getTopOrgId(){
        return getUserInfo().getInfo(UserInfoWrapper.INF_TOP_ORG_ID);
    }
    /** 得到机构CODE*/
    /** 得到机构CODE*/
    public static String getOrgCode(){
        return getUserInfo().getInfo(UserInfoWrapper.INF_ORG_CODE);
    }
    /** 得到机构NAME*/
    /** 得到机构NAME*/
    public static String getOrgName(){
        return getUserInfo().getInfo(UserInfoWrapper.INF_ORG_NAME);
    }
    /** 得到机构SHORTNAME*/
    /** 得到机构SHORTNAME*/
    public static String getOrgShortName(){
        return getUserInfo().getInfo(UserInfoWrapper.INF_ORG_SHORT_NAME);
    }
    /** 得到机构LOGO*/
    /** 得到机构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*/
    /** 得到当前角色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();
    }
@@ -219,18 +219,18 @@
        return getUserInfo().getButtonPrivilegeEdit();
    }
    /** 当前登录IP*/
    /** 当前登录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 );
@@ -239,7 +239,7 @@
    }
    /**
     * 是否为管理员
     * 是否为管理员
     * @return
     */
    public static boolean isAdmin(){
src/main/java/com/qxueyou/scc/base/util/CollectionUtils.java
@@ -8,7 +8,7 @@
public final class CollectionUtils {
    /**
     * 构造list
     * 构造list
     * @param objs
     * @return
     */
@@ -23,7 +23,7 @@
    }
    
    /**
     * 构造list
     * 构造list
     * @param objs
     * @return
     */
@@ -39,8 +39,8 @@
    }
    
    /**
     * 构造Map
     * @param objs 数组串
     * 构造Map
     * @param objs 数组串
     * @return
     */
    public static Map<String,String> newStringMap(String... objs){
@@ -64,8 +64,8 @@
    }
    
    /**
     * 构造Map
     * @param objs 数组串
     * 构造Map
     * @param objs 数组串
     * @return
     */
    public static Map<String,Object> newObjectMap(Object... objs){
src/main/java/com/qxueyou/scc/base/util/CommonUtils.java
@@ -13,16 +13,16 @@
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(){
@@ -32,7 +32,7 @@
    }
    
    /**
     * 课程表显示图形颜色 自定义
     * 课程表显示图形颜色 自定义
     * @return
     */
    public static String[] getRGBColors(){
@@ -43,7 +43,7 @@
    }
    
    /**
     * 换算为2位小数
     * 换算为2位小数
     * @return
     */
    public static String formatDecimalFormat(Object obj, String parten){
@@ -52,7 +52,7 @@
    }
    
    /**
     * 删除字符最后的符号
     * 删除字符最后的符号
     * @return
     */
    public static String removeStrLastComma(String string){
@@ -70,7 +70,7 @@
    }
    
    /**
     * 转换答案值 0,1,2
     * 转换答案值 0,1,2
     * @param correct
     * @return
     */
@@ -78,18 +78,18 @@
        byte value;
        
        if("true".equals(correct)){
            value=ExerciseItemAnswerU.CORRECT_RIGHT;//正确
            value=ExerciseItemAnswerU.CORRECT_RIGHT;//正确
        }else if("false".equals(correct)){
            value=ExerciseItemAnswerU.CORRECT_ERROR;//错误
            value=ExerciseItemAnswerU.CORRECT_ERROR;//错误
        }else{
            value=7;//δ֪
            value=7;//未知
        }
        
        return value;
    }
    
    /**
     *   // 进行加法运算
     *   // 进行加法运算
     * @param d1
     * @param d2
     * @return
@@ -102,7 +102,7 @@
    }
    
    /**
     * // 进行减法运算
     * // 进行减法运算
     * @param d1
     * @param d2
     * @return
@@ -115,7 +115,7 @@
    }
    
    /**
     * // 进行乘法运算
     * // 进行乘法运算
     * @param d1
     * @param d2
     * @return
@@ -128,12 +128,12 @@
    }
    
     /**
     * // 进行除法运算 四舍五入
     * // 进行除法运算 四舍五入
     * @param d1
     * @param d2
     * @return
     */
    public static double divide(double d1,double d2,int len) {// 进行除法运算
    public static double divide(double d1,double d2,int len) {// 进行除法运算
        BigDecimal b1 = new BigDecimal(String.valueOf(d1));
        BigDecimal b2 = new BigDecimal(String.valueOf(d2));
        
@@ -141,12 +141,12 @@
    }
    
     /**
     * // 进行除法运算 四舍五入
     * // 进行除法运算 四舍五入
     * @param d1
     * @param d2
     * @return
     */
    public static double divide(String d1,String d2,int len) {// 进行除法运算
    public static double divide(String d1,String d2,int len) {// 进行除法运算
        BigDecimal b1 = new BigDecimal(d1);
        BigDecimal b2 = new BigDecimal(d2);
        
@@ -155,12 +155,12 @@
    
    
     /**
     * // 进行除法运算 四舍五入
     * // 进行除法运算 四舍五入
     * @param d1
     * @param d2
     * @return
     */
    public static BigDecimal divide(BigDecimal b1,BigDecimal b2,int len) {// 进行除法运算
    public static BigDecimal divide(BigDecimal b1,BigDecimal b2,int len) {// 进行除法运算
        
        return b1.divide(b2, new MathContext(len));
    }
@@ -169,7 +169,7 @@
    }
    /*
     * 
     * 按指定长度截取源字符串,若源字符串不大于指定长度,则原样返回
     * 按指定长度截取源字符串,若源字符串不大于指定长度,则原样返回
     */
    public static String cutString(String res, Integer length, String suffix) {
        if (StringUtils.isEmpty(res)) {
@@ -182,7 +182,7 @@
    }
    
    /**
     * 生成流水号 :  module+时间戳 + 5位随机数,长度20位
     * 生成流水号 :  module+时间戳 + 5位随机数,长度20位
     */
    public static String generateNo(String module){
        
@@ -198,7 +198,7 @@
    }
    
    /**
     * 计算单位数字
     * 计算单位数字
     * 
     * @param number
     * @return
@@ -209,27 +209,27 @@
            return "0";
        }
        
        if(number.compareTo(new BigInteger("10000")) < 0){// 小于1万
        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万
                && number.compareTo(new BigInteger("100000000")) < 0){// 大于1万 小于一亿    前进1位为1.2万
            
            return Math.ceil(number.doubleValue()/1000)/10 + "万";
            return Math.ceil(number.doubleValue()/1000)/10 + "万";
            
        }
        
        if(number.compareTo(new BigInteger("100000000")) >= 0){// 大于一亿    前进1位为1.2亿
        if(number.compareTo(new BigInteger("100000000")) >= 0){// 大于一亿    前进1位为1.2亿
            
            return Math.ceil(number.doubleValue()/1000000)/10 + "亿";
            return Math.ceil(number.doubleValue()/1000000)/10 + "亿";
        }
        
        return "0";
    }
    
    /**
     * 格式化文本
     * 格式化文本
     * @param str
     * @return
     */
@@ -246,7 +246,7 @@
        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);
@@ -263,7 +263,7 @@
    }
    
    /**
     * 银行卡验证
     * 银行卡验证
     * 
     * @param cardNo
     * @return
@@ -273,7 +273,7 @@
    }
    
    /**
     * ftl-返回错误信息页面
     * ftl-返回错误信息页面
     * @param mv
     * @param msg
     * @return
@@ -284,7 +284,7 @@
        return mv;
    }
    
    /** 得到classId*/
    /** 得到classId*/
    public static String getClassId(String classId){
        return StringUtils.isEmpty(classId)?(StringUtils.isEmpty(ClientUtils.getClassId())?StringUtils.EMPTY:ClientUtils.getClassId()):classId;
    }
src/main/java/com/qxueyou/scc/base/util/DateTimeFormatUtils.java
@@ -7,11 +7,11 @@
import org.apache.commons.lang3.StringUtils;
/**
 * 提供日期或者是时间格式化处理工具类。
 * 提供日期或者是时间格式化处理工具类。
 *
 * @author 邓志永
 * @author 邓志永
 * @since JDK1.6
 * @history 2014-11-28 邓志永 新建
 * @history 2014-11-28 邓志永 新建
 */
public final class DateTimeFormatUtils {
    /** ISO_DATETIME_FORMAT*/
@@ -27,24 +27,24 @@
    }
    /**
     * 根据配置的默认日期时间格式来获取指定的对象的字符串信息。
     * 根据配置的默认日期时间格式来获取指定的对象的字符串信息。
     *
     * @param value
     *            需要被转换的日期时间对象引用。
     * @return 返回的是格式化后的字符串。
     *            需要被转换的日期时间对象引用。
     * @return 返回的是格式化后的字符串。
     */
    public static String formatDateTime(Timestamp value) {
        return formatDateTime(value, ISO_DATETIME_FORMAT);
    }
    /**
     * 根据配置的默认日期时间格式来获取指定的对象的字符串信息。
     * 根据配置的默认日期时间格式来获取指定的对象的字符串信息。
     *
     * @param value
     *            需要被转换的日期时间对象引用。
     *            需要被转换的日期时间对象引用。
     * @param defaultFormat
     *            按照指定的格式来处理当前的日期时间对象。
     * @return 返回的是格式化后的字符串。
     *            按照指定的格式来处理当前的日期时间对象。
     * @return 返回的是格式化后的字符串。
     */
    public static String formatDateTime(Timestamp value, String defaultFormat) {
        if (value == null) {
src/main/java/com/qxueyou/scc/base/util/DateTimeUtils.java
@@ -16,16 +16,16 @@
import org.apache.commons.lang3.StringUtils;
/**
 * 扩展有关日期工具类的方法。
 * 扩展有关日期工具类的方法。
 *
 * @author 邓志永
 * @author 邓志永
 * @since JDK1.6
 * @history 2014-11-28 邓志永 新建
 * @history 2014-11-28 邓志永 新建
 */
public class DateTimeUtils {
    /**
     * 设置 UTC time zone (often referred to as GMT)区域.
     * 设置 UTC time zone (often referred to as GMT)区域.
     */
    public static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone("GMT");
@@ -35,22 +35,22 @@
    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;
@@ -114,24 +114,24 @@
    
    /**
     * 根据配置的默认日期时间格式来获取指定的对象的字符串信息。
     * 根据配置的默认日期时间格式来获取指定的对象的字符串信息。
     *
     * @param value
     *            需要被转换的日期时间对象引用。
     * @return 返回的是格式化后的字符串。
     *            需要被转换的日期时间对象引用。
     * @return 返回的是格式化后的字符串。
     */
    public static String formatDateTime(Timestamp value) {
        return formatDateTime(value, ISO_DATETIME_FORMAT);
    }
    /**
     * 根据配置的默认日期时间格式来获取指定的对象的字符串信息。
     * 根据配置的默认日期时间格式来获取指定的对象的字符串信息。
     *
     * @param value
     *            需要被转换的日期时间对象引用。
     *            需要被转换的日期时间对象引用。
     * @param defaultFormat
     *            按照指定的格式来处理当前的日期时间对象。
     * @return 返回的是格式化后的字符串。
     *            按照指定的格式来处理当前的日期时间对象。
     * @return 返回的是格式化后的字符串。
     */
    public static String formatDateTime(Timestamp value, String defaultFormat) {
        if (value == null) {
@@ -212,13 +212,13 @@
    }
    /**
     * 确定两个日期是否是同一天
     * 确定两个日期是否是同一天
     *
     * @param dateSource
     *            需要执行判断的第一个日期时间
     *            需要执行判断的第一个日期时间
     * @param dateDesti
     *            需要执行的第二个日期时间。
     * @return true 如果两个日期都代表了同一天,那么将会返回true。
     *            需要执行的第二个日期时间。
     * @return true 如果两个日期都代表了同一天,那么将会返回true。
     */
    public static boolean isSameDay(Date dateSource, Date dateDesti) {
        if (dateSource == null || dateDesti == null) {
@@ -457,7 +457,7 @@
            date.setTime(time);
            val.setTime(date);
        }
        //子方法
        //子方法
        modifyChild(val, field, round);
        
        throw new IllegalArgumentException("The field " + field + " is not supported");
@@ -516,10 +516,10 @@
    }
    /**
     * 得到指定周的第一天(周日)00:00:00秒,返回对应的Timestamp,可以用作时间区间的计算
     * 得到指定周的第一天(周日)00:00:00秒,返回对应的Timestamp,可以用作时间区间的计算
     *
     * @param cal
     *            Calendar对象,如果为null,则使用本地JVM中的Calendar对象
     *            Calendar对象,如果为null,则使用本地JVM中的Calendar对象
     * @param week
     * @return
     */
@@ -537,10 +537,10 @@
    }
    /**
     * 得到指定周的最后一天(周日)23:23:59秒,返回对应的Timestamp,可以用作时间区间的计算
     * 得到指定周的最后一天(周日)23:23:59秒,返回对应的Timestamp,可以用作时间区间的计算
     *
     * @param cal
     *            Calendar对象,如果为null,则使用本地JVM中的Calendar对象
     *            Calendar对象,如果为null,则使用本地JVM中的Calendar对象
     * @param week
     * @return
     */
@@ -558,10 +558,10 @@
    }
    /**
     * 得到当前周在一年中的周数
     * 得到当前周在一年中的周数
     *
     * @param cal
     *            Calendar对象,如果为null,则使用本地JVM中的Calendar对象
     *            Calendar对象,如果为null,则使用本地JVM中的Calendar对象
     * @return
     */
    public static int getCurrentWeek() {
@@ -570,10 +570,10 @@
    }
    /**
     * 得到当前周在一年中的周数
     * 得到当前周在一年中的周数
     *
     * @param cal
     *            Calendar对象,如果为null,则使用本地JVM中的Calendar对象
     *            Calendar对象,如果为null,则使用本地JVM中的Calendar对象
     * @return
     */
    public static int getCurrentWeek(Calendar calen) {
@@ -596,13 +596,13 @@
    }
    /**
     * 得到指定Timestamp代表的日期第一年中第几周
     * 得到指定Timestamp代表的日期第一年中第几周
     *
     * @param cal
     *            Calendar对象,如果为null,则使用本地JVM中的Calendar对象
     *            Calendar对象,如果为null,则使用本地JVM中的Calendar对象
     * @param ts
     *            指定Timestamp
     * @return 周数
     *            指定Timestamp
     * @return 周数
     */
    public static int getWeekOfYear(Calendar cale, Timestamp ts) {
        Calendar cal =cale;
@@ -614,9 +614,9 @@
    }
    /**
     * 得到当前年份
     * 得到当前年份
     *
     * @return 年
     * @return 年
     */
    public static int getCurrentYear() {
        Calendar calendar = new GregorianCalendar();
@@ -631,9 +631,9 @@
    }
    /**
     * 得到当前月份
     * 得到当前月份
     *
     * @return 月份
     * @return 月份
     */
    public static int getCurrentMonth() {
        Calendar calendar = new GregorianCalendar();
@@ -654,7 +654,7 @@
    }
    /**
     * 获取指定时间的前后多少天的日期以分秒
     * 获取指定时间的前后多少天的日期以分秒
     */
    public static Timestamp getTimestamp(Timestamp timestamp, int day, int hour, int minute) {
        Calendar calendar = new GregorianCalendar();
@@ -670,15 +670,15 @@
    }
    /**
     * 给出两个日期,计算他们之间相差的年数|月数|天数
     * 给出两个日期,计算他们之间相差的年数|月数|天数
     *
     * @param c1
     *            日期1
     *            日期1
     * @param c2
     *            日期2
     *            日期2
     * @param what
     *            比较模式,如果是Calendar.YEAR则在年份上比较; 如果是Calendar.MONTH则在月数上比较; 如果是Calendar.DATE则在天数上比较(默认情形)
     * @return 相差的年数或月数或天数
     *            比较模式,如果是Calendar.YEAR则在年份上比较; 如果是Calendar.MONTH则在月数上比较; 如果是Calendar.DATE则在天数上比较(默认情形)
     * @return 相差的年数或月数或天数
     */
    public static int compare(Calendar c1, Calendar c2, int what) {
        int number = 0;
@@ -701,41 +701,41 @@
    }
    /*
     * 得到指定日期的所在年份的最后一天
     * 得到指定日期的所在年份的最后一天
     */
    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);// 日期回滚一天,也就是当年最后一天
        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月第一天
        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);// 日期回滚一天,也就是最后一天
        a.set(Calendar.DATE, 1);// 把日期设置为当月第一天
        a.roll(Calendar.DATE, -1);// 日期回滚一天,也就是最后一天
        return new Timestamp(a.getTimeInMillis());
    }
    /**
     * 得到指定日期的所在月份的第一天
     * 得到指定日期的所在月份的第一天
     *
     * @param t1
     * @return
@@ -743,20 +743,20 @@
    public static Timestamp getFirstOfMonth(Timestamp t1) {
        Calendar a = new GregorianCalendar();
        a.setTime(t1);
        a.set(Calendar.DATE, 1);// 把日期设置为当月第一天
        a.set(Calendar.DATE, 1);// 把日期设置为当月第一天
        return new Timestamp(a.getTimeInMillis());
    }
    /**
     * 给出两个日期,计算他们之间相差的年数|月数|天数
     * 给出两个日期,计算他们之间相差的年数|月数|天数
     *
     * @param c1
     *            日期1
     *            日期1
     * @param c2
     *            日期2
     *            日期2
     * @param what
     *            比较模式,如果是Calendar.YEAR则在年份上比较; 如果是Calendar.MONTH则在月数上比较; 如果是Calendar.DATE则在天数上比较(默认情形)
     * @return 相差的年数或月数或天数
     *            比较模式,如果是Calendar.YEAR则在年份上比较; 如果是Calendar.MONTH则在月数上比较; 如果是Calendar.DATE则在天数上比较(默认情形)
     * @return 相差的年数或月数或天数
     */
    public static int compare(Timestamp t1, Timestamp t2, int what) {
@@ -798,11 +798,11 @@
    }
    /**
     * 把字符串的日期转成Timestamp
     * 把字符串的日期转成Timestamp
     *
     * @param time
     *            字符串的日期
     * @return int Timestamp型日期
     *            字符串的日期
     * @return int Timestamp型日期
     */
    public static Timestamp stringConvertTimestamp(String stime) {
        String time =stime;
@@ -820,11 +820,11 @@
    }
    /**
     * 把字符串的日期转成Timestamp
     * 把字符串的日期转成Timestamp
     *
     * @param date
     *            字符串的日期
     * @return int Timestamp型日期
     *            字符串的日期
     * @return int Timestamp型日期
     */
    public static Date stringConvertDate(String sdate) {
        String date =sdate;
@@ -845,11 +845,11 @@
    }
    /**
     * 把字符串的日期转成Timestamp
     * 把字符串的日期转成Timestamp
     *
     * @param date
     *            字符串的日期
     * @return int Timestamp型日期
     *            字符串的日期
     * @return int Timestamp型日期
     */
    public static Timestamp stringConvertTS(String sdate) {
        String date =sdate;
@@ -873,24 +873,24 @@
    /**
     * 去除date的毫秒数
     * 去除date的毫秒数
     *
     * @param date
     *            字符串的日期
     * @return int Timestamp型日期
     *            字符串的日期
     * @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;
     *            比较模式,如果是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 {
@@ -901,13 +901,13 @@
    }
    /**
     * 比较两日期大小
     * 比较两日期大小
     *
     * @param DATE1
     * @param DATE2
     * @param what
     *            比较模式,如果是Calendar.YEAR则在年份上比较; 如果是Calendar.MONTH则在月数上比较; 如果是Calendar.DATE则在天数上比较(默认情形)
     * @return date1 在date2前=1;date1在date2后=-1;否则=0;
     *            比较模式,如果是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();
@@ -925,20 +925,20 @@
    }
    /**
     * 和当前日期比较大小
     * 和当前日期比较大小
     *
     * @param currentDate
     * @return currentDate 在当前日期前=1;date1在当前日期后=-1;否则=0;
     * @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;
     * @return currentDate 在当前日期前=1;date1在当前日期后=-1;否则=0;
     * @throws ParseException
     */
    public static int compareCurrentDate(String currentDate) throws ParseException {
@@ -949,10 +949,10 @@
    }
    /**
     * 根据日期,输出日期对应的月份
     * 根据日期,输出日期对应的月份
     * 
     * @param date
     * @return month
     * @return month
     */
    public static int getMonth(Date date) {
        if (null == date) {
@@ -966,11 +966,11 @@
    }
    /**
     * 封装每月的最后一天
     * 封装每月的最后一天
     * 
     * @param date
     * @author 伍升存
     * @history 2012-03-13 伍升存
     * @author 伍升存
     * @history 2012-03-13 伍升存
     * @return
     */
    public static Date lastDayOfMonth(Date date) {
@@ -982,7 +982,7 @@
    }
    /**
     * 当前时间的前几个小时
     * 当前时间的前几个小时
     * 
     * @return
     */
@@ -993,7 +993,7 @@
    }
    /**
     * 当前时间的后几个小时
     * 当前时间的后几个小时
     * 
     * @return
     */
@@ -1003,7 +1003,7 @@
        return calendar.getTime();
    }
    // 计算时间
    // 计算时间
    public static String showTime(Date ctime, String sformat) {
        String format = sformat;
        String r = "";
@@ -1017,25 +1017,25 @@
        long nowtime = nowtimelong;
        long ctimelong = ctime.getTime();
        long result = nowtime - ctimelong;
        if (result - (long) 60 * 1000 < (long) 0)// 一分钟内
        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)// 一小时内
            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)// 一天内
            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) {// 一个月内
            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) {// 一年内
            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{// 日期格式
            r = seconds + "个月前";
        } else{// 日期格式
            SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.CHINA);
            r = sdf.format(ctime);
        }
@@ -1049,7 +1049,7 @@
    public static String transForm(Date beginTime, Date endTime) {
        Calendar cal = Calendar.getInstance();
        String trans = "";
        SimpleDateFormat sdf = new SimpleDateFormat("MM月dd日-HH:mm",Locale.CHINA);
        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);
@@ -1063,12 +1063,12 @@
        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;
            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;
            trans = str_begin_month + " (" + str_begin_week + ") " + str_begin_hour + " 至  " + str_end_month + " (" + str_end_week + ") " + str_end_hour;
        }
        return trans;
    }
@@ -1076,25 +1076,25 @@
    public static String getWeek(int week) {
        String str_week = "";
        if (week == 2) {
            str_week = "周一";
            str_week = "周一";
        }
        if (week == 3) {
            str_week = "周二";
            str_week = "周二";
        }
        if (week == 4) {
            str_week = "周三";
            str_week = "周三";
        }
        if (week == 5) {
            str_week = "周四";
            str_week = "周四";
        }
        if (week == 6) {
            str_week = "周五";
            str_week = "周五";
        }
        if (week == 7) {
            str_week = "周六";
            str_week = "周六";
        }
        if (week == 1) {
            str_week = "周日";
            str_week = "周日";
        }
        return str_week;
src/main/java/com/qxueyou/scc/base/util/DateUtils.java
@@ -1,11 +1,11 @@
package com.qxueyou.scc.base.util;
/**
 * 记录项目管理部分核心的数据库字典信息;基础操作Form
 * 记录项目管理部分核心的数据库字典信息;基础操作Form
 *
 * @author 邓志永
 * @author 邓志永
 * @since JDK1.6
 * @history 2014-11-28 邓志永 新建
 * @history 2014-11-28 邓志永 新建
 */
import java.sql.Timestamp;
import java.text.ParseException;
@@ -21,7 +21,7 @@
    /**
     * 根据格式获得日期字符串
     * 根据格式获得日期字符串
     *
     * @param sFormat
     * @return
@@ -35,7 +35,7 @@
    }
    /**
     * 根据给定格式获取特定时间的格式化显示
     * 根据给定格式获取特定时间的格式化显示
     *
     * @param ts
     * @param sFormat
@@ -48,7 +48,7 @@
    }
    /**
     * 格式化日期
     * 格式化日期
     *
     * @param ts
     * @return
@@ -60,7 +60,7 @@
    }
    /**
     * 将String类型的日期转换为时间
     * 将String类型的日期转换为时间
     *
     * @param dt
     * @return
@@ -73,7 +73,7 @@
    }
    /**
     * 建议获得短日期的处理方式 例如: getShortDate(2004-10-10 10:10:10.123) = 2004-10-10
     * 建议获得短日期的处理方式 例如: getShortDate(2004-10-10 10:10:10.123) = 2004-10-10
     *
     * @param dt
     * @return
@@ -87,7 +87,7 @@
    }
    /**
     * 取得当前日期时间
     * 取得当前日期时间
     *
     * @return
     */
@@ -97,7 +97,7 @@
    }
    /**
     * 取得当前日期时间 毫秒为0
     * 取得当前日期时间 毫秒为0
     *
     * @return
     */
@@ -108,7 +108,7 @@
    }
    
    /**
     * 获得最常见的日期格式内容 : 年-月-日 小时-分钟-秒
     * 获得最常见的日期格式内容 : 年-月-日 小时-分钟-秒
     *
     * @param ts
     * @return
@@ -117,13 +117,13 @@
        return getDateFormat(ts, "yyyy-MM-dd HH:mm:ss");
    }
    /* 格式化日期 */
    /* 格式化日期 */
    public String getSTime(Timestamp ts) {
        return getDateFormat(ts, "HH:mm:ss");
    }
    /**
     * 获取当天的日期
     * 获取当天的日期
     *
     * @return
     */
@@ -134,7 +134,7 @@
    }
    // 根据时间获得随机数
    // 根据时间获得随机数
    public String getRnd() {
        Calendar tCal = Calendar.getInstance();
        Timestamp ts = new Timestamp(tCal.getTime().getTime());
@@ -146,7 +146,7 @@
    }
    /**
     * 计算日期之间的差值 2004-3-25 增加
     * 计算日期之间的差值 2004-3-25 增加
     *
     * @param dt1
     * @param dt2
@@ -159,7 +159,7 @@
    }
    
    /**
     * 计算分钟
     * 计算分钟
     *
     * @param dt1
     * @param dt2
@@ -172,7 +172,7 @@
    }
    
    /**
     * 获取明天的日期
     * 获取明天的日期
     *
     * @return
     */
@@ -181,7 +181,7 @@
    }
    /**
     * 获得当前日期的下一天
     * 获得当前日期的下一天
     *
     * @param date
     * @return
@@ -202,7 +202,7 @@
    }
    /**
     * LST num为正:当前日期后num天是返回值 num为负:当前日期前num天是返回值 返回的日期的格式:yyyy-MM-dd
     * LST num为正:当前日期后num天是返回值 num为负:当前日期前num天是返回值 返回的日期的格式:yyyy-MM-dd
     */
    public static String getTheDay(int num) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
@@ -213,7 +213,7 @@
    }
    /**
     * 将日期由String转换为Date类型
     * 将日期由String转换为Date类型
     *
     * @param date
     * @return
@@ -232,7 +232,7 @@
    }
    /**
     * 将日期由String转换为Date类型
     * 将日期由String转换为Date类型
     *
     * @param date
     * @param format
@@ -254,7 +254,7 @@
    /**
     * 将日期由yyyy年MM月String转换为Date类型
     * 将日期由yyyy年MM月String转换为Date类型
     *
     * @param date
     * @return
@@ -262,7 +262,7 @@
     */
    public static Date convertStringToDateCh(String sdate) throws ParseException {
        String date = sdate;
        SimpleDateFormat objDateFormat = new SimpleDateFormat("yyyy年MM月", Locale.CHINA);
        SimpleDateFormat objDateFormat = new SimpleDateFormat("yyyy年MM月", Locale.CHINA);
        if (StringUtils.isBlank(date)) {
            java.sql.Timestamp ts = new java.sql.Timestamp(System.currentTimeMillis());
@@ -275,7 +275,7 @@
    }
    
    /**
     * 取得指定年月的第一天
     * 取得指定年月的第一天
     * @param year
     * @param month
     * @return
@@ -289,7 +289,7 @@
    }
    
    /**
     * 取得指定年月的最后一天
     * 取得指定年月的最后一天
     * @param year
     * @param month
     * @return
@@ -303,7 +303,7 @@
    }
    
    /**
     * 取得指定年月的第一天
     * 取得指定年月的第一天
     * @param year
     * @param month
     * @return
@@ -317,7 +317,7 @@
    }
    
    /**
     * 取得指定年月的最后一天
     * 取得指定年月的最后一天
     * @param year
     * @param month
     * @return
@@ -331,7 +331,7 @@
    }
    
    /**
     * 得到一段时间内有多少周
     * 得到一段时间内有多少周
     * @param startTime
     * @param endTime
     * @return
@@ -356,7 +356,7 @@
    }
    
    /**
     * 得到日期的年
     * 得到日期的年
     * @param date
     * @return
     */
@@ -368,7 +368,7 @@
    }
    /**
     * 当前时间处于一段时间的第几周
     * 当前时间处于一段时间的第几周
     * @param startTime
     * @param endTime
     * @return
@@ -403,7 +403,7 @@
    }
    
    /**
     * 指定时间处于一段时间的第几周
     * 指定时间处于一段时间的第几周
     * @param startTime
     * @param endTime
     * @return
src/main/java/com/qxueyou/scc/base/util/ExcelExportUtils.java
@@ -36,15 +36,15 @@
 * 
 * 
 * @param <T>
 * 应用泛型,代表任意一个符合javabean风格的类
 * boolean型的属性xxx的get器方式为getXxx(),而不是isXxx()
 * 应用泛型,代表任意一个符合javabean风格的类
 * boolean型的属性xxx的get器方式为getXxx(),而不是isXxx()
 */
public class ExcelExportUtils<T> {
    
    private static Logger log = LogManager.getLogger("ExcelExport");
    
    /**
     * 设置标题样式,字体
     * 设置标题样式,字体
     * @param objStyle
     * @param workbook
     */
@@ -57,16 +57,16 @@
        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
     */
@@ -81,7 +81,7 @@
    }
    
    /**
     * 是否指定列宽
     * 是否指定列宽
     * @param sheet
     * @param lstColumnWidth
     */
@@ -94,7 +94,7 @@
    }
    
    /**
     * 初始化导出标题
     * 初始化导出标题
     * @param row
     * @param headers
     * @param titleStyle
@@ -109,7 +109,7 @@
    }
    
    /**
     * 按照T,导出所有列内容
     * 按照T,导出所有列内容
     * @param objExcelExportParam
     */
    public void exportExcel(ExcelExportParam<T> objExcelExportParam) {
@@ -117,7 +117,7 @@
    }
    
    /**
     * 指定列导出
     * 指定列导出
     * @param objExcelExportParam
     */
    public void exportExcelByColomn(ExcelExportParam<T> objExcelExportParam) {
@@ -125,12 +125,12 @@
    }
    
    /**
     * 导出excel实现
     * 导出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();
@@ -144,32 +144,32 @@
            lstColumn = objExcelExportParam.getLstColumn();
        }
        
        // 声明一个工作薄
        // 声明一个工作薄
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = null;
        // 生成一个表格
        // 生成一个表格
        if(StringUtils.isNotBlank(title)){
            sheet = workbook.createSheet(title);
        }else{
            sheet = workbook.createSheet("Sheet1");
        }
        // 设置表格默认列宽度为18个字节
        // 设置表格默认列宽度为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()) {
@@ -177,7 +177,7 @@
            row = sheet.createRow(index);
            T t = (T) it.next();
            
            //默认给序号列
            //默认给序号列
            HSSFCell cell = row.createCell(0);
            cell.setCellStyle(contentStyle);
            HSSFRichTextString richString = new HSSFRichTextString(String.valueOf(index));
@@ -185,13 +185,13 @@
            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()方法得到属性值
                // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
                Field[] fields = t.getClass().getDeclaredFields();
                for (int i = 0; i < fields.length; i++) {
                    if(!"serialVersionUID".equals(fields[i].getName())){
@@ -213,7 +213,7 @@
    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
        //boolean类型默认使用get,而非is
        String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
        try {
            @SuppressWarnings("rawtypes")
@@ -221,7 +221,7 @@
            @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;
@@ -232,12 +232,12 @@
                    textValue = String.valueOf(value);
                }
            }
            //利用正则表达式判断textValue是否全部由数字组成
            //利用正则表达式判断textValue是否全部由数字组成
            if (null != textValue) {
                Pattern p = Pattern.compile("^//d+(//.//d+)?$");
                Matcher matcher = p.matcher(textValue);
                if (matcher.matches() && numberFormat) {
                    // 是数字当作double处理
                    // 是数字当作double处理
                    cell.setCellValue(Double.parseDouble(textValue));
                } else {
                    HSSFRichTextString richString = new HSSFRichTextString(textValue);
@@ -263,17 +263,17 @@
    
    public static void main(String[] args) {
        System.out.println(new Date().getTime());
        /*// 测试学生
        /*// 测试学生
        ExcelExportUtils<UserRegistrationExport> ex = new ExcelExportUtils<UserRegistrationExport>();
        String[] headers = { "序号","班级", "姓名", "性别" ,"报名码" ,"手机号" ,"其他联系方式","状态"};
        String[] headers = { "序号","班级", "姓名", "性别" ,"报名码" ,"手机号" ,"其他联系方式","状态"};
        List<UserRegistrationExport> dataset = new ArrayList<UserRegistrationExport>();
        UserRegistrationExport u = new UserRegistrationExport();
        u.setClassName("高级JAVA工程师一班");
        u.setClassName("高级JAVA工程师一班");
        u.setMobilePhone("13312886688");
        u.setSalesCode("123.34");
        u.setSex(false);
        u.setStatus(UserRegistration.STATUS_ACTIVE);
        u.setUserName("刘美幸子");
        u.setUserName("刘美幸子");
        dataset.add(u);
        ExcelExportParam<UserRegistrationExport> obj = new ExcelExportParam<UserRegistrationExport>();
        obj.setColData(dataset);
@@ -284,7 +284,7 @@
            obj.setOut(out);
            ex.exportExcel(obj);
            out.close();
            System.out.println("excel导出成功!");
            System.out.println("excel导出成功!");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
@@ -300,7 +300,7 @@
            obj.setOut(out);
            ex.exportExcelByColomn(obj);
            out.close();
            System.out.println("excel指定列导出成功!");
            System.out.println("excel指定列导出成功!");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
src/main/java/com/qxueyou/scc/base/util/FreeMarkerMd5MethodDefine.java
@@ -11,7 +11,7 @@
    @Override
    public Object exec(List args) throws TemplateModelException {
        if (args == null || args.isEmpty()) {
            throw new TemplateModelException("错误:MD5加密参数字符串不存在");
            throw new TemplateModelException("错误:MD5加密参数字符串不存在");
        }
        StringBuffer sb = new StringBuffer(1024);
        for (Object md5Arg : args) {
src/main/java/com/qxueyou/scc/base/util/HttpClient.java
@@ -75,7 +75,7 @@
    }
    
    private void init() {
        X509TrustManager xtm = new X509TrustManager() { // 创建TrustManager
        X509TrustManager xtm = new X509TrustManager() { // 创建TrustManager
            public void checkClientTrusted(X509Certificate[] chain,
                    String authType) throws CertificateException {
            }
@@ -89,9 +89,9 @@
            }
        };
        try {
            // TLS1.0与SSL3.0基本上没有太大的差别,可粗略理解为TLS是SSL的继承者,但它们使用的是相同的SSLContext
            // TLS1.0与SSL3.0基本上没有太大的差别,可粗略理解为TLS是SSL的继承者,但它们使用的是相同的SSLContext
            SSLContext ctx = SSLContext.getInstance("TLS");
            // 使用TrustManager来初始化该上下文,TrustManager只是被SSL的Socket所使用
            // 使用TrustManager来初始化该上下文,TrustManager只是被SSL的Socket所使用
            ctx.init(null, new TrustManager[] { xtm }, null);
            /*
@@ -145,13 +145,13 @@
    }
    /**
     * 向HTTPS地址发送POST请求
     * 向HTTPS地址发送POST请求
     * 
     * @param reqURL
     *            请求地址
     *            请求地址
     * @param params
     *            请求参数
     * @return 响应内容
     *            请求参数
     * @return 响应内容
     */
    @SuppressWarnings("unchecked")
    public String sendStringPostRequest(String reqURL, Map<String, String> params1) {
@@ -161,7 +161,7 @@
                params = Collections.EMPTY_MAP;
            }
            HttpEntity entity = sendPostRequest(reqURL, params); // 获取响应实体
            HttpEntity entity = sendPostRequest(reqURL, params); // 获取响应实体
            
            if( null != entity ){
                String content = EntityUtils.toString(entity, UTF_8);
@@ -184,13 +184,13 @@
    }
    /**
     * 向HTTPS地址发送POST请求
     * 向HTTPS地址发送POST请求
     * 
     * @param reqURL
     *            请求地址
     *            请求地址
     * @param params
     *            请求参数
     * @return 响应内容
     *            请求参数
     * @return 响应内容
     */
    @SuppressWarnings("unchecked")
    public String sendStringPostRequest(String reqURL, String data) {
@@ -198,7 +198,7 @@
            StringEntity reqEntity = new StringEntity(data, UTF_8);
            HttpEntity entity = sendPostRequest(reqURL, Collections.EMPTY_MAP, reqEntity); // 获取响应实体
            HttpEntity entity = sendPostRequest(reqURL, Collections.EMPTY_MAP, reqEntity); // 获取响应实体
            if( null != entity ){
                
@@ -223,13 +223,13 @@
    }
    /**
     * 向HTTPS地址发送POST请求
     * 向HTTPS地址发送POST请求
     * 
     * @param reqURL
     *            请求地址
     *            请求地址
     * @param params
     *            请求参数
     * @return 响应内容
     *            请求参数
     * @return 响应内容
     */
    public String sendStringPostRequest(String reqURL, Map<String, String> headerParas1, String data) {
        Map<String, String> headerParas = headerParas1;
@@ -237,7 +237,7 @@
            StringEntity reqEntity = new StringEntity(data, UTF_8);
            HttpEntity entity = sendPostRequest(reqURL, headerParas, reqEntity); // 获取响应实体
            HttpEntity entity = sendPostRequest(reqURL, headerParas, reqEntity); // 获取响应实体
            
            if( null != entity ){
                String content = EntityUtils.toString(entity, UTF_8);
@@ -260,13 +260,13 @@
    }
    /**
     * 向HTTPS地址发送POST请求
     * 向HTTPS地址发送POST请求
     * 
     * @param reqURL
     *            请求地址
     *            请求地址
     * @param params
     *            请求参数
     * @return 响应内容
     *            请求参数
     * @return 响应内容
     */
    @SuppressWarnings("unchecked")
    public HttpEntity sendPostRequest(String reqURL, Map<String, String> params1) {
@@ -319,7 +319,7 @@
        Map<String, String> headerParas = headerParas1;
        try {
            HttpPost httpPost = new HttpPost(reqURL); // 创建HttpPost
            HttpPost httpPost = new HttpPost(reqURL); // 创建HttpPost
            httpPost.setEntity(reqEntity);
            headerParas = checkUserAgent(headerParas);
@@ -332,18 +332,18 @@
                log.debug("request--header:" + header.getName() + ":" + header.getValue());
            }
            HttpResponse response = httpClient.execute(httpPost); // 执行POST请求
            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(); // 获取响应实体
            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);
                log.debug("重定向:" + location);
                EntityUtils.consume(entity);
                return sendPostRequest(location, headerParas, reqEntity);
            }
@@ -366,7 +366,7 @@
        Map<String, String> headerParas = headerParas1;
        try {
            HttpDelete httpDelete = new HttpDelete(reqURL); // 创建HttpPost
            HttpDelete httpDelete = new HttpDelete(reqURL); // 创建HttpPost
            headerParas = checkUserAgent(headerParas);
            for (String key : headerParas.keySet()) {
@@ -378,12 +378,12 @@
                log.debug("request--header:" + header.getName() + ":" + header.getValue());
            }
            HttpResponse response = httpClient.execute(httpDelete); // 执行POST请求
            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(); // 获取响应实体
            HttpEntity entity = response.getEntity(); // 获取响应实体
            this.debug(httpDelete.getURI(), response.getStatusLine().getStatusCode(), entity.getContentLength(), entity.getContentType());
@@ -414,17 +414,17 @@
     * @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);
        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
            HttpPut httpPut = new HttpPut(reqURL); // 创建HttpPost
            headerParas = checkUserAgent(headerParas);
            for (String key : headerParas.keySet()) {
@@ -439,12 +439,12 @@
            StringEntity reqEntity = new StringEntity(body, UTF_8);
            httpPut.setEntity(reqEntity);
            HttpResponse response = httpClient.execute(httpPut); // 执行POST请求
            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(); // 获取响应实体
            HttpEntity entity = response.getEntity(); // 获取响应实体
            this.debug(httpPut.getURI(), response.getStatusLine().getStatusCode(), entity.getContentLength(), entity.getContentType());
            
@@ -470,7 +470,7 @@
        Map<String, String> headerParas = headerParas1;
        try {
            HttpPost httpPost = new HttpPost(reqURL); // 创建HttpPost
            HttpPost httpPost = new HttpPost(reqURL); // 创建HttpPost
            BasicHttpEntity requestBody = new BasicHttpEntity();
            requestBody.setContent(new ByteArrayInputStream(param.getBytes(UTF_8)));
@@ -490,18 +490,18 @@
            log.debug("request--param:" + param);
            HttpResponse response = httpClient.execute(httpPost); // 执行POST请求
            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(); // 获取响应实体
            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);
                log.debug("重定向:" + location);
                EntityUtils.consume(entity);
                return sendPostRequest(location, headerParas, param);
            }
@@ -566,7 +566,7 @@
        Map<String, String> params = params1;
        Map<String, String> headerParas = headerParas1;
        try {
            // HttpGet httpGet = new HttpGet(reqURL); // 创建HttpPost
            // HttpGet httpGet = new HttpGet(reqURL); // 创建HttpPost
            headerParas = checkUserAgent(headerParas);
@@ -590,19 +590,19 @@
                log.debug("request--header:" + header.getName() + ":" + header.getValue());
            }
            // HttpResponse response = httpClient.execute(httpGet); // 执行POST请求
            // 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(); // 获取响应实体
            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("重定向");
                log.debug("重定向");
                return sendGetRequestAsResponse(location, headerParas, params);
            }
src/main/java/com/qxueyou/scc/base/util/ImageUtils.java
@@ -30,50 +30,50 @@
            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);
            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);
            log.error("图片处理失败", e);
        }
    }
    
    /**
     * 为图片生成缩略图
     * 为图片生成缩略图
     * @param file
     */
    public static void decreaseSizeImage(File file) {
@@ -87,12 +87,12 @@
            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();
@@ -100,7 +100,7 @@
            ImageIO.write(bi2, "PNG", createPreviewFile(file));
        } catch (IOException e) {
            log.error("图片处理失败", e);
            log.error("图片处理失败", e);
        }
    }
    
@@ -136,7 +136,7 @@
        }
    }
    
    public static String encodeImgageToBase64(String imgStr) { // 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
    public static String encodeImgageToBase64(String imgStr) { // 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
        
        
        ByteArrayOutputStream outputStream = null;  
@@ -150,9 +150,9 @@
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        // 对字节数组Base64编码
        // 对字节数组Base64编码
        BASE64Encoder encoder = new BASE64Encoder();  
        return encoder.encode(outputStream.toByteArray());// 返回Base64编码过的字节数组字符串
        return encoder.encode(outputStream.toByteArray());// 返回Base64编码过的字节数组字符串
    } 
    
    public static void main(String[] args){
src/main/java/com/qxueyou/scc/base/util/JacobUtil.java
@@ -16,15 +16,15 @@
    public static final String PPT = "ppt";  
    public static final String PPTX = "pptx";  
   
     // 8 代表word保存成html
     // 8 代表word保存成html
     public static final int WORD2HTML = 8;    
     // 17代表word保存成pdf
     // 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 pptfile = "D:/upload/新员工入职向导及信息201605.xlsx";
     //String pdffile = "D:/upload/b.pdf";    
     String htmlfile="D:/upload/excel.pdf";
     //ppt2pdf(pptfile,pdffile);    
@@ -32,24 +32,24 @@
 }    
     
/** 
  * @param resourceType 资源类型
  * @param path 资源路径
  * @param resourceType 资源类型
  * @param path 资源路径
  * @return 
  * TODO 文件转换
  * 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和图??
         //word转成pdf和图??
         word2pdf(resourcePath, resource+".pdf");  
     }else if(resourceType.equalsIgnoreCase(XLS)||resourceType.equalsIgnoreCase(XLSX)){  
         //excel文件转成图片
         //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;  
@@ -58,18 +58,18 @@
   
 public static void word2pdf(String docfile, String pdffile)       
 {       
     // 启动word应用程序(Microsoft Office Word 2003)
     // 启动word应用程序(Microsoft Office Word 2003)
     ActiveXComponent app = null;    
     try{  
         ComThread.InitSTA();  
         app = new ActiveXComponent("Word.Application");       
         app.setProperty("Visible", false);  
         System.out.println("*****正在转换...*****");
         // 设置word应用程序不可??
         System.out.println("*****正在转换...*****");
         // 设置word应用程序不可??
        // app.setProperty("Visible", new Variant(false));      
         // documents表示word程序的所有文档窗口,(word是多文档应用程序???
         // documents表示word程序的所有文档窗口,(word是多文档应用程序???
         Dispatch docs = app.getProperty("Documents").toDispatch();      
         // 打开要转换的word文件
         // 打开要转换的word文件
        /* Dispatch doc = Dispatch.invoke(      
                 docs,      
                 "Open",      
@@ -83,12 +83,12 @@
                 docfile,  
                 false,  
                 true).toDispatch();       
         // 调用Document对象的saveAs方法,将文档保存为pdf格式
         // 调用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文件
         // 关闭word文件
         Dispatch.call(doc, "Close", false);   
     }       
     catch (Exception e)       
@@ -97,11 +97,11 @@
     }       
     finally      
     {       
         //关闭word应用程序
         //关闭word应用程序
         app.invoke("Quit", 0);     
         ComThread.Release();  
     }     
     System.out.println("*****转换完毕********");
     System.out.println("*****转换完毕********");
 }  
      
   
@@ -132,7 +132,7 @@
         ComThread.InitSTA(true);  
         app = new ActiveXComponent("Excel.Application");  
         app.setProperty("Visible", false);  
         app.setProperty("AutomationSecurity", new Variant(3));//禁用??
         app.setProperty("AutomationSecurity", new Variant(3));//禁用??
         Dispatch excels = app.getProperty("Workbooks").toDispatch();  
         /*Dispatch excel = Dispatch.invoke(excels, "Open", Dispatch.Method, new Object[]{ 
                 excelfile, 
@@ -141,11 +141,11 @@
         },new int[9]).toDispatch();*/  
         Dispatch excel = Dispatch.call(excels, "Open",   
                 excelfile,false,true).toDispatch();  
         //转换格式ExportAsFixedFormat
         //转换格式ExportAsFixedFormat
         /*Dispatch.invoke(excel, "ExportAsFixedFormat", Dispatch.Method, new Object[]{ 
                 new Variant(0),//pdf格式=0
                 new Variant(0),//pdf格式=0
                 pdffile, 
                 new Variant(0)//0=标准(生成的pdf图片不会变模??) 1=??小文??(生成的pdf图片模糊的一塌糊??)
                 new Variant(0)//0=标准(生成的pdf图片不会变模??) 1=??小文??(生成的pdf图片模糊的一塌糊??)
         }, new int[1]);*/  
         Dispatch.call(excel, "ExportAsFixedFormat",XLS2PDF,  
                 pdffile);  
src/main/java/com/qxueyou/scc/base/util/MD5Utils.java
@@ -12,7 +12,7 @@
    private static Logger log = LogManager.getLogger("MD5Utils");
    
    /** 
     * MD5数字签名
     * MD5数字签名
     * @param src 
     * @return 
     * @throws Exception 
@@ -29,7 +29,7 @@
    } 
    
    /** 
     * 字节数组转化为大写16进制字符串
     * 字节数组转化为大写16进制字符串
     * @param b 
     * @return 
     */  
@@ -46,7 +46,7 @@
    }  
    
    /***
     * MD5加码 生成32位md5码
     * MD5加码 生成32位md5码
     */  
    public static String string2MD5(String inStr){  
        MessageDigest md5 = null;  
src/main/java/com/qxueyou/scc/base/util/MyJsCssVersionUtils.java
@@ -23,35 +23,35 @@
import org.apache.commons.lang3.StringUtils;
/**
 * 前三个属性根据实际存储位置设置
 * 前三个属性根据实际存储位置设置
 * @author ody.yuan
 *
 */
public class MyJsCssVersionUtils {
    
     /** web工程的发布路径  */
     /** 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  */
    /** 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目录  */
    /** 扫描js、css、html文件的文件夹绝对路径,固定设置为web目录  */
    private static String fileScanDirec = "C:" + File.separator + "workspace" + File.separator + "qxueyou_web";
    
    /** 匹配html中引入js文件  */
    /** 匹配html中引入js文件  */
    private static Pattern scriptImportPattrrn = Pattern.compile("<script(.*)src(.*)</script>");
    
    /** 匹配html中引入css文件  */
    /** 匹配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 文件类型
     * 得到处理过的文件路径为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){
@@ -59,7 +59,7 @@
    }
    
    /**
     * 得到路径下的所需文件和文件的md5值
     * 得到路径下的所需文件和文件的md5值
     * @param filePath
     * @param fileExtension
     * @param map
@@ -69,7 +69,7 @@
        File file = new File(filePath);
        if(file.isFile()){
            String fiePath = file.getAbsolutePath();
            //符合指定类型
            //符合指定类型
            if(fiePath.endsWith(fileExtension)){
                generateMap(file,fileExtension,map,version);
            }
@@ -82,12 +82,12 @@
    }
    
    /**
     * 得到一个文件的map
     * 得到一个文件的map
     * @param file
     * @param map
     */
    private static void generateMap(File file, String fileExtension, Map<String,String> map,String version){
        //TODO  缩短md5值
        //TODO  缩短md5值
        String strKey = file.getAbsolutePath();
        strKey = strKey.replace(webFileAbsolutePath, File.separator + webContent);
        strKey = strKey.replace("\\", "/");
@@ -100,11 +100,11 @@
    }
    
    /**
     * 对文件全文生成MD5摘要
     * 对文件全文生成MD5摘要
     * 
     * @param file
     *            要加密的文件
     * @return MD5摘要码
     *            要加密的文件
     * @return MD5摘要码
     */
    public static String getMD5(File file) {
        FileInputStream fis = null;
@@ -113,14 +113,14 @@
            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位加密
            // 16位加密
            // return buf.toString().substring(8, 24);
        } catch (Exception ex) {
            ex.printStackTrace();
@@ -135,25 +135,25 @@
    }
 
    /**
     * 把byte[]数组转换成十六进制字符串表示形式
     * @param tmp    要转换的byte[]
     * @return 十六进制字符串表示形式
     * 把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 位的数字转换
        // 用字节表示就是 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); // 换后的结果转换为字符串
        s = new String(str); // 换后的结果转换为字符串
        return s;
    }
    
@@ -168,7 +168,7 @@
    }
    
    /**
     * 得到路径下的所需文件和文件的md5值
     * 得到路径下的所需文件和文件的md5值
     * @param filePath
     * @param fileExtension
     * @param map
@@ -178,7 +178,7 @@
        File file = new File(filePath);
        if(file.isFile()){
            String fiePath = file.getAbsolutePath();
            //符合指定类型
            //符合指定类型
            if(fiePath.endsWith(fileExtension)){
                addVersion(file,map);
            }
@@ -191,24 +191,24 @@
    }
    
    /**
     * 得到一个文件的map
     * 得到一个文件的map
     * @param file
     * @param map
     */
    private static void addVersion(File file,Map<String,String> map){
        //TODO  缩短md5值
        //TODO  缩短md5值
        InputStream is = null;
        OutputStream os = null;
        List<String> contentList = new ArrayList<String>();
        
        // 读文件
        // 读文件
        try {
            //指定utf-8格式
            //指定utf-8格式
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "utf-8"));
            String line = null;
            
            while ((line = br.readLine()) != null) {
                //TODO version 传null值
                //TODO version 传null值
                String modLine = getModLine(line, null,map);
                if (modLine != null) {
                    //System.out.println(modLine);
@@ -217,10 +217,10 @@
                line = line + "\r\n";
                contentList.add(line);
            }
            // 关闭流
            // 关闭流
            br.close();
        } catch (Exception e) {
            System.out.println("读文件失败:" + file.getAbsolutePath());
            System.out.println("读文件失败:" + file.getAbsolutePath());
            e.printStackTrace();
        } finally {
            if (null != is) {
@@ -232,21 +232,21 @@
            }
        }
        // 写文件
        // 写文件
        try {
            //指定utf8格式
            //指定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());
            System.out.println("写文件失败:" + file.getAbsolutePath());
            e.printStackTrace();
        } finally {
            if (null != os) {
@@ -261,17 +261,17 @@
    
    /**
     * 
     * 查找文件需要的版本号的js 与css 行
     * @param line 行字符
     * @param version 默认版本
     * 查找文件需要的版本号的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>
        //匹配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){
@@ -279,7 +279,7 @@
                    break;
                }
                if(str.startsWith("/")){
                    //如果已有版本号,按?分隔,取第一个
                    //如果已有版本号,按?分隔,取第一个
                    if(str.lastIndexOf("?version") != -1){
                        str = str.substring(0, str.lastIndexOf("?version"));
                    }
@@ -293,10 +293,10 @@
                return modLine;
            }
        
        //匹配html引入css文件      eg:<link href="/qxueyou/web/css/bootstrap.min.css" rel="stylesheet">
        //匹配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){
@@ -304,7 +304,7 @@
                    break;
                }
                if(str.startsWith("/")){
                    //如果已有版本号,按?分隔,取第一个
                    //如果已有版本号,按?分隔,取第一个
                    if(str.lastIndexOf("?version") != -1){
                        str = str.substring(0, str.lastIndexOf("?version"));
                    }
@@ -334,12 +334,12 @@
        String version = df.format(date);
        
        Map<String,String> objMap = new HashMap<String,String>();
        //添加js文件
        //添加js文件
        getFileMD5Map(fileScanDirec,".js",objMap,version);
        //添加CSS文件
        //添加CSS文件
        getFileMD5Map(fileScanDirec,".css",objMap,version);
        
        //循环html文件,修改其中的css和js引入路径
        //循环html文件,修改其中的css和js引入路径
        getHtml(fileScanDirec,".ftl",objMap);
        
        System.out.println("successful");
src/main/java/com/qxueyou/scc/base/util/NumRandomUtils.java
@@ -1,12 +1,12 @@
package com.qxueyou.scc.base.util;
/**
 * 数字随机
 * 数字随机
 * @author iqtogether
 *
 */
public class NumRandomUtils {
    /**
     * 随机6位数字
     * 随机6位数字
     * @return
     */
    public static String randomSixNum(){
src/main/java/com/qxueyou/scc/base/util/PageUtils.java
@@ -15,8 +15,8 @@
    }
    
    /**
     * bootstrap自动组装的分页对象解析为hibernate提供接口的分页对象
     * @param objPaginationData 前台自动组装的分页对象
     * bootstrap自动组装的分页对象解析为hibernate提供接口的分页对象
     * @param objPaginationData 前台自动组装的分页对象
     * @return
     */
    public static Pager getPager(PaginationData objPaginationData){
src/main/java/com/qxueyou/scc/base/util/ParamsUtils.java
@@ -14,11 +14,11 @@
public class ParamsUtils {
    
    /**
     * 获取查询条件的公用方法
     * 获取查询条件的公用方法
     * 
     * @param request HttpServletRequest
     * @param strSupportQueryArray 定义自己功能模块支持查询的条件数组集合
     * @param lstQueryCondition 查询条件
     * @param strSupportQueryArray 定义自己功能模块支持查询的条件数组集合
     * @param lstQueryCondition 查询条件
     */
    public static void getAllQueryCondition(HttpServletRequest request, String[] strSupportQueryArray,
        List<Param> lstParams) {
@@ -28,28 +28,28 @@
        String strValue = "";
        List<String> lstSupportQuery = Arrays.asList(strSupportQueryArray);
        /**
         * 条件分为以下几种情况: 1、关键字查询  2、单选按钮的数据字典值  3、复选数组,比如类型
         * 4、时间范围,比如开始时间和结束时间 5、数字范围, 6、其它类型
         * 条件分为以下几种情况: 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]*$")) {// 单选 数字
                if (strValue.matches("^[0-9]*[0-9][0-9]*$")) {// 单选 数字
                    lstParams.add(new Param(strKey, " = ", strValue));
                } else if (strValue.contains(",")) {// 复选 数字
                } 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 if (strValue.contains("-")) {// 数字范围
                }else if (strValue.contains("-")) {// 数字范围
                    
                }  else {// 其它
                }  else {// 其它
                    lstParams.add(new Param(strKey, " LIKE ", "%"+strValue+"%"));
                }
            }
src/main/java/com/qxueyou/scc/base/util/PhoneNOUtils.java
@@ -3,8 +3,8 @@
import java.util.regex.Pattern;
/**
 * 手机号码工具类
 * @author 德虎
 * 手机号码工具类
 * @author 德虎
 *
 */
public final class PhoneNOUtils {
@@ -12,7 +12,7 @@
    private final static Pattern pattern = Pattern.compile("1[3,4,5,7,8]\\d{9}");
    
    /**
     * 验证是否为有效手机号
     * 验证是否为有效手机号
     * @param phoneNo
     * @return
     */
@@ -23,7 +23,7 @@
    }
    
    /**
     * 替换手机号关键号码为*
     * 替换手机号关键号码为*
     * @param phoneNo
     * @return
     */
src/main/java/com/qxueyou/scc/base/util/QBeanUtils.java
@@ -11,8 +11,8 @@
import org.apache.logging.log4j.Logger;
/**
 * Bean 工具类
 * @author 夏德虎
 * Bean 工具类
 * @author 夏德虎
 *
 */
public class QBeanUtils {
@@ -20,9 +20,9 @@
    private static final Logger log = LogManager.getLogger("QBeanUtils");
    
    /**
     * 将 Bean 转换成 Map,支持 将 id 转换为 id1
     * @param src bean对象
     * @param propertyMap 字段映射
     * 将 Bean 转换成 Map,支持 将 id 转换为 id1
     * @param src bean对象
     * @param propertyMap 字段映射
     * @return
     */
    public static final <T> Map<String,Object> bean2Map(T src,Map<String,String> propertyMap) {
@@ -68,9 +68,9 @@
    }
    
    /**
     * 将List<T> 转换成 List<Map>,支持 将 id 转换为 id1
     * @param src List<T>对象
     * @param propertyMap 字段映射
     * 将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) {
@@ -88,9 +88,9 @@
    }
    
    /**
     * 将List<T> 转换成 List<Map>,支持 将 id 转换为 id1
     * @param src List<T>对象
     * @param propertyMap 字段映射
     * 将List<T> 转换成 List<Map>,支持 将 id 转换为 id1
     * @param src List<T>对象
     * @param propertyMap 字段映射
     * @return
     * @throws NoSuchMethodException 
     * @throws InvocationTargetException 
@@ -124,7 +124,7 @@
    }
    
    /**
     * 将bean列表中的一个属性值作为KEY,另一个属性值作为value
     * 将bean列表中的一个属性值作为KEY,另一个属性值作为value
     * @param src
     * @param propertyKey
     * @param propertyVal
@@ -173,9 +173,9 @@
    
    
    /**
     * 将Object 挑选指定属性转换成  Map<String,Object>
     * @param src 源目标
     * @param propertyMap 字段映射
     * 将Object 挑选指定属性转换成  Map<String,Object>
     * @param src 源目标
     * @param propertyMap 字段映射
     * @return
     */
    public static final Map<String,Object> copyPropertiesToMap(Object src,Map<String,String> propertyMap) {
src/main/java/com/qxueyou/scc/base/util/QFileUtils.java
@@ -3,14 +3,14 @@
import org.apache.commons.lang3.StringUtils;
/**
 * 文件工具类
 * 文件工具类
 * @author xiadehu
 *
 */
public final class QFileUtils {  
    /**
     * 根据后缀名得到文件类型
     * 根据后缀名得到文件类型
     * @param fileName
     * @return
     */
src/main/java/com/qxueyou/scc/base/util/QrCodeUtils.java
@@ -32,9 +32,9 @@
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
/**
 * 二维码生成工具类
 * 二维码生成工具类
 * 
 * @author 德虎
 * @author 德虎
 * 
 */
public final class QrCodeUtils {
@@ -42,29 +42,29 @@
    private static Logger log = LogManager.getLogger(QrCodeUtils.class);
    /**
     * 生成二维码图片并输出到流
     * @param msg 需要生成的二维码信息
     * @param os 二维码图片输出流,输出后会自动关闭
     * @param logoFlag 是否添加logo
     * 生成二维码图片并输出到流
     * @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){//判断是否已经存在数据
                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);
@@ -85,7 +85,7 @@
                    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();  
@@ -113,9 +113,9 @@
    }
    
    /**
     * 添加机构logo
     * 添加机构logo
     * 
     * @param buf 生成的二维码
     * @param buf 生成的二维码
     * @return
     * @throws IOException 
     */
@@ -126,25 +126,25 @@
//            String domain = SpringUtil.getBean(IConfigService.class).getConfigByEnv("oss-domain");
            String domain =null;
            httpClient = HttpClients.createDefault();
            //获取机构logo
            //获取机构logo
            httpget = new HttpGet(domain+ClientUtils.getOrgLogoPath());  
            HttpResponse response = httpClient.execute(httpget);
            HttpEntity entity = response.getEntity();
            /**
            * 读取Logo图片
            * 读取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));  
@@ -152,7 +152,7 @@
            ImageIO.write(buf, "PNG", os);
        }catch (Exception e) {
            ImageIO.write(buf, "PNG", os);
            log.error("二维码添加logo失败"+e);
            log.error("二维码添加logo失败"+e);
        }finally {
            httpClient.close();
        }
src/main/java/com/qxueyou/scc/base/util/QueryDslOptionBuilder.java
@@ -11,7 +11,7 @@
import com.querydsl.core.types.dsl.Expressions;
/**
 * jpa查询  参数为空包装builder
 * jpa查询  参数为空包装builder
 * @author zhiyong
 *
 */
@@ -28,7 +28,7 @@
    }
    
    /**
     * 不为空 and 对象
     * 不为空 and 对象
     * @param expressionFunction
     * @param value
     * @return
@@ -41,7 +41,7 @@
    }
    
    /**
     * 不为空 and  String类型
     * 不为空 and  String类型
     * @param expressionFunction
     * @param value
     * @return
@@ -54,7 +54,7 @@
    }
    
    /**
     * 不为空 and  集合类型
     * 不为空 and  集合类型
     * @param expressionFunction
     * @param collection
     * @return
@@ -68,7 +68,7 @@
    }
    
    /**
     * 不为空 or 所有对象
     * 不为空 or 所有对象
     * @param expressionFunction
     * @param value
     * @return
@@ -81,7 +81,7 @@
    }
    
    /**
     * 不为空 or  String类型
     * 不为空 or  String类型
     * @param expressionFunction
     * @param value
     * @return
@@ -94,7 +94,7 @@
    }
    /**
     * 不为空 or  集合类型
     * 不为空 or  集合类型
     * @param expressionFunction
     * @param collection
     * @return
src/main/java/com/qxueyou/scc/base/util/RSAUtils.java
@@ -9,8 +9,8 @@
//import com.qxueyou.scc.base.service.IConfigService;
/**
 * RSA加解密--调用远程加解密服务
 * @author 德虎
 * RSA加解密--调用远程加解密服务
 * @author 德虎
 *
 */
public class RSAUtils {
@@ -20,7 +20,7 @@
    private static RSAClient client;
    
    /**
     * 构建远程RSA加解密客户端
     * 构建远程RSA加解密客户端
     */
    private static void buildClient() {
        try {
@@ -33,7 +33,7 @@
    }
    
    /**
     * 调用远程加密服务对字符串加密
     * 调用远程加密服务对字符串加密
     * @param string
     * @return
     */
@@ -47,13 +47,13 @@
        try {
            return client.encrypt(string);
        } catch (Exception e) {
            log.error("加解密服务初始化错误:"+e.getMessage(), e);
            log.error("加解密服务初始化错误:"+e.getMessage(), e);
        }
        return null;
    }
    
    /**
     * 调用远程解密服务对密文字符串解决
     * 调用远程解密服务对密文字符串解决
     * @param string
     * @return
     */
@@ -73,7 +73,7 @@
    }
    /**
     * Hessian本地接口
     * Hessian本地接口
     * @author user
     *
     */
src/main/java/com/qxueyou/scc/base/util/ReisUtils.java
@@ -13,7 +13,7 @@
    private static Logger log = LogManager.getLogger(ReisUtils.class);
    
    /**
     * 序列化对象
     * 序列化对象
     */
    public static byte[] serialize(Object obj){
        ObjectOutputStream objectOs = null;
@@ -25,7 +25,7 @@
            objectOs.writeObject(obj);
            bytes = byteArrOs.toByteArray();
        } catch (Exception e) {
            log.error("序列化对象失败!");
            log.error("序列化对象失败!");
        }finally {
            IOUtils.closeQuietly(objectOs);
            IOUtils.closeQuietly(byteArrOs);
@@ -34,7 +34,7 @@
    }
    /**
     * 反序列化对象
     * 反序列化对象
     */
    public static Object unserialize(byte[] bytes){
        Object returnObject = null;
@@ -47,7 +47,7 @@
                returnObject = objectIns.readObject();
            }
        }catch (Exception e) {
            log.error("反序列化对象失败!",e);
            log.error("反序列化对象失败!",e);
        }finally {
            IOUtils.closeQuietly(objectIns);
            IOUtils.closeQuietly(byteArrIns);
src/main/java/com/qxueyou/scc/base/util/RequestClientUtils.java
@@ -28,7 +28,7 @@
        
    
    /**
     * 获取客户端ip地址
     * 获取客户端ip地址
     * 
     * @param request
     * @return
@@ -43,7 +43,7 @@
    }
    
    /**
     * 获取服务器本地IP
     * 获取服务器本地IP
     * @return
     */
    public static String getLocalIP() {
@@ -55,7 +55,7 @@
                Enumeration<InetAddress> ips = ni.getInetAddresses();
                while (ips.hasMoreElements()) {
                    ip = (InetAddress) ips.nextElement();
                    // 127.开头的都是lookback地址
                    // 127.开头的都是lookback地址
                    if (ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {
                        return ip.getHostAddress();
                    }
@@ -68,7 +68,7 @@
    }
    
    /**
     * 获取COOKIE : KEY
     * 获取COOKIE : KEY
     * @param httpRequest
     * @return
     */
@@ -90,7 +90,7 @@
    }
    /**
     * 解析客户端
     * 解析客户端
     * @param userAgent userAgent
     * @return
     */
@@ -113,16 +113,16 @@
    
    
    /**
     * 判断是PC端还是移动端
     * 判断是PC端还是移动端
     * 
     * @return
     */
    public static boolean  isMobileDevice(String requestHeader){
        /**
         * android : 所有android设备
         * android : 所有android设备
         * iphone : iphone 
         * windows phone:Nokia等windows系统的手机
         * ipad :ipad
         * windows phone:Nokia等windows系统的手机
         * ipad :ipad
         */
        String lowerRequestHeader = requestHeader;
        String[] deviceArray = new String[]{"android","iphone","windows phone","ipad"};
@@ -140,7 +140,7 @@
    }
    
    /**
     * 判断是PC端还是移动端
     * 判断是PC端还是移动端
     * 
     * @return
     */
@@ -151,11 +151,11 @@
                return agent[1];
            }
        }
        return "δ֪";
        return "未知";
    }
    
    /**
     * 判断是否在微信浏览器打开
     * 判断是否在微信浏览器打开
     * 
     * @return
     */
@@ -165,7 +165,7 @@
    }
    
    /**
     * 获取头信息
     * 获取头信息
     * 
     * @param userAgent
     * @return
@@ -176,7 +176,7 @@
            uaParser = new Parser();
            return uaParser.parse(userAgent);
        } catch (IOException e) {
            log.error("解析头信息失败", e);
            log.error("解析头信息失败", e);
        }
        return null;
    }
src/main/java/com/qxueyou/scc/base/util/SerializeUtils.java
@@ -12,8 +12,8 @@
import org.apache.logging.log4j.Logger;
/**
 * 序列化工具类
 * @author 德虎
 * 序列化工具类
 * @author 德虎
 *
 */
public class SerializeUtils {
@@ -21,9 +21,9 @@
    private static Logger log = LogManager.getLogger("SerializeUtils");
    /**
     * 将对象转换为字节数组
     * @param obj 可序列化的对象
     * @return 字节数组
     * 将对象转换为字节数组
     * @param obj 可序列化的对象
     * @return 字节数组
     */
    public static byte[] toByteArrayFromObject(Object obj){
        
@@ -53,10 +53,10 @@
    }
    
    /**
     * 将字节数组为对象转换
     * @param data 字节数组
     * @param cls 要转化的对象类型
     * @return 要转化的对象
     * 将字节数组为对象转换
     * @param data 字节数组
     * @param cls 要转化的对象类型
     * @return 要转化的对象
     */
    public static <T> T toObjectFromByte(byte[] data,Class<T> cls){
        
src/main/java/com/qxueyou/scc/base/util/SpringUtil.java
@@ -1,8 +1,8 @@
/******************************************************************************
 * Copyright (C) 2015 Shenzhen Penguin Network Technology Co., Ltd
 * All Rights Reserved.
 * 本软件为深圳企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
 * 不得使用、复制、修改或发布本软件.
 * 本软件为深圳企鹅网络科技有限公司开发研制。未经本公司正式书面同意,其他任何个人、团体
 * 不得使用、复制、修改或发布本软件.
 *****************************************************************************/
package com.qxueyou.scc.base.util;
@@ -14,8 +14,8 @@
/**
*
* Spring 工具类,提供获取Sping上下文环境及获取Bean的接口
* @history 2010-09-12 夏德虎 新建
* Spring 工具类,提供获取Sping上下文环境及获取Bean的接口
* @history 2010-09-12 夏德虎 新建
*
*/
@Component
@@ -26,23 +26,23 @@
    private SpringUtil(){}
    
    /**
     * 获取bean
     * @param <T> 泛型类型
     * 获取bean
     * @param <T> 泛型类型
     * @param name bean name
     * @param clz bean 类型
     * @param context servlet上下文
     * @return bean实例
     * @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实例
     * 获取bean
     * @param <T> 泛型类型
     * @param clz bean 类型
     * @param context servlet上下文
     * @return bean实例
     */
    public static <T> T getBean(Class<T> clz){
        return applicationContext.getBean(clz);
src/main/java/com/qxueyou/scc/base/util/StringMapUtils.java
@@ -11,16 +11,16 @@
import com.alibaba.fastjson.JSON;
/**
 * String  和  map<String,String>的转换
 * String  和  map<String,String>的转换
 * @author ody.yuan
 *
 */
public class StringMapUtils {
    
    /**
     * Map<String,String> ת String
     * Map<String,String> 转 String
     * 
     * @param map         需要转换的map
     * @param map         需要转换的map
     * @return
     */
    public static String transMapToString(Map<String,String> map){
@@ -40,9 +40,9 @@
    }  
    
    /**
     * 调用transMapToString方法有map转得String,重新转回map
     * 调用transMapToString方法有map转得String,重新转回map
     * 
     * @param mapString    调用transMapToString方法有map转得String
     * @param mapString    调用transMapToString方法有map转得String
     * @return
     */
    public static Map<String,String> transStringToMap(String mapString){
@@ -61,7 +61,7 @@
        }
    
    /**
     * json ת map
     * json 转 map
     * @param json
     */
    @SuppressWarnings("unchecked")
@@ -74,7 +74,7 @@
     }
    
    /**
     * map ת  json
     * map 转  json
     * @param json
     */
    public static String map2Json(Map<String,Object> map){ 
src/main/java/com/qxueyou/scc/base/util/TraceUtils.java
@@ -11,17 +11,17 @@
import com.qxueyou.scc.base.model.ITrace;
/**
 * 数据修改轨迹记录工具类
 * 数据修改轨迹记录工具类
 */
public class TraceUtils {
    
    /** 管理员账号、账号id */
    /** 管理员账号、账号id */
    public static final String ADMIN_ACCOUNT="admin";
    
    public static final String ADMIN_ACCOUNT_ID="admin";
    
    /**
     * 设置激活 新增轨迹信息
     * 设置激活 新增轨迹信息
     * @param trace
     */
    public static void setCreateActiveTrace(ITrace trace){
@@ -36,7 +36,7 @@
    }
    
    /**
     * 设置新增轨迹信息
     * 设置新增轨迹信息
     * @param trace
     */
    public static void setCreateTrace(ITrace trace){
@@ -57,7 +57,7 @@
    }
    
    /**
     * 设置新增轨迹信息
     * 设置新增轨迹信息
     * @param trace
     */
    @SuppressWarnings("rawtypes")
@@ -71,7 +71,7 @@
    }
    
    /**
     * 删除已删除的记录
     * 删除已删除的记录
     * @param trace
     */
    @SuppressWarnings("rawtypes")
@@ -87,7 +87,7 @@
    }
    
    /**
     * 设置更新轨迹信息
     * 设置更新轨迹信息
     * @param trace
     */
    public static void setUpdateTrace(ITrace trace){
@@ -106,7 +106,7 @@
    }
    
    /**
     * 设置新增轨迹信息
     * 设置新增轨迹信息
     * @param trace
     */
    @SuppressWarnings("rawtypes")
@@ -120,7 +120,7 @@
    }
    
    /**
     * 通过HashSet踢除重复元素
     * 通过HashSet踢除重复元素
     * @param list
     * @return
     */
@@ -133,7 +133,7 @@
    }
    
    /**
     * 初始化代理实体
     * 初始化代理实体
     * @param entity
     * @return
     */
@@ -141,7 +141,7 @@
    public static <T> T initializeAndUnproxy(T entity) {
        if (entity == null) {
            throw new 
               NullPointerException("初始化实体为空");
               NullPointerException("初始化实体为空");
        }
        Hibernate.initialize(entity);
src/main/java/com/qxueyou/scc/base/util/UUIDUtils.java
@@ -4,8 +4,8 @@
import java.util.UUID;
/**
 * UUID工具类
 * @author 德虎
 * UUID工具类
 * @author 德虎
 *
 */
public final class UUIDUtils {
@@ -20,7 +20,7 @@
    public static String specifalChars = "0123456789abcdefghijklmnopqrstuvwxyz";  
    
    /**
     * 生成UUID
     * 生成UUID
     * @return
     */
    public static String generateUUID(){
@@ -28,7 +28,7 @@
    }
    
    /**
     * 生成UUID
     * 生成UUID
     * @return
     */
    public static String UUID(){
@@ -40,7 +40,7 @@
    }
    
    /**
     * 生成8位随机码
     * 生成8位随机码
     * @return
     */
    public static String generateShortUuid() {  
@@ -56,7 +56,7 @@
    } 
    
    /**
     * 生成最少16位随机码
     * 生成最少16位随机码
     * @return
     */
    public static String generateSpecialUuid(int length) {
src/main/java/com/qxueyou/scc/base/util/UserCodeUtils.java
@@ -6,9 +6,9 @@
    
    public static final String allChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    
    // 0 - 9     对应ascii值为  48 --> 57
    // A - Z  对应ascii值为  65 --> 90
    // a - z  对应ascii值为  97 --> 122
    // 0 - 9     对应ascii值为  48 --> 57
    // A - Z  对应ascii值为  65 --> 90
    // a - z  对应ascii值为  97 --> 122
    public static void main(String[] args) {
        
@@ -19,7 +19,7 @@
    }
    
    /**
     * 生成code
     * 生成code
     * @param length
     * @param index
     * @return
@@ -41,7 +41,7 @@
    }
    
    /**
     * 生成每个位置上的序号
     * 生成每个位置上的序号
     * @param length
     * @param index
     * @return
src/main/java/com/qxueyou/scc/base/util/WordExportUtils.java
@@ -15,19 +15,19 @@
        configure.setDefaultEncoding("utf-8");
    }
    /**
     * 根据Doc模板生成word文件
     * @param dataMap 需要填入模板的数据
     * @param downloadType 文件名称
     * 根据Doc模板生成word文件
     * @param dataMap 需要填入模板的数据
     * @param downloadType 文件名称
     */
    public Template createDoc(String downloadType){
        try {
            //设置模板装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载。
            //加载模板文件,放在testDoc下
            //设置模板装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载。
            //加载模板文件,放在testDoc下
            configure.setClassForTemplateLoading(this.getClass(), "");
            //设置异常处理器
            //设置异常处理器
            configure.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
            
            return configure.getTemplate(downloadType);//定义Template对象,注意模板类型名字与downloadType要一致
            return configure.getTemplate(downloadType);//定义Template对象,注意模板类型名字与downloadType要一致
        } catch (IOException e) {
            e.printStackTrace();
        }
src/main/java/com/qxueyou/scc/base/util/WordProcessUtils.java
@@ -7,7 +7,7 @@
//import com.qxueyou.scc.base.service.IConfigService;
/**
 * 使用远程服务HanLP引擎,处理文本,包括分词,转拼音,提取摘要,词频统计,关键字提取
 * 使用远程服务HanLP引擎,处理文本,包括分词,转拼音,提取摘要,词频统计,关键字提取
 * @author xiadehu
 *
 */
@@ -30,9 +30,9 @@
    
    /**
     * 分词,如果传入null,则返回空
     * @param text 原文
     * @return 分词后的结果
     * 分词,如果传入null,则返回空
     * @param text 原文
     * @return 分词后的结果
     */
    public static String segment(String text){
        if (client == null) {
@@ -42,9 +42,9 @@
    }
    
    /**
     * 转拼音,无分隔符
     * @param text 原文
     * @return 转拼音的结果
     * 转拼音,无分隔符
     * @param text 原文
     * @return 转拼音的结果
     */
    public static String toPinyin(String text){
        if (client == null) {
@@ -55,10 +55,10 @@
    }
    
    /**
     * 转拼音
     * @param text 原文
     * @param seperator 分隔符
     * @return 转拼音的结果
     * 转拼音
     * @param text 原文
     * @param seperator 分隔符
     * @return 转拼音的结果
     */
    public static String toPinyin(String text,String seperator){
        if (client == null) {
src/main/java/com/qxueyou/scc/base/util/XmlUtils.java
@@ -73,7 +73,7 @@
            for(Object element:root.elements()){
                child = (Element) element;
                
                if(child.getName().contains("list")){// lst组合
                if(child.getName().contains("list")){// lst组合
                    result.put(child.getName(), getXMLList(child));
                }else{
                    result.put(child.getName(), child.getText());
src/main/java/com/qxueyou/scc/base/util/docConverterUtil.java
@@ -8,16 +8,16 @@
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
/**
 * 文件转换为pdf的工具类
 * 文件转换为pdf的工具类
 * 
 * @author lyl
 *
 */
public class docConverterUtil {
    @SuppressWarnings("unused")
    private String fileString; // (待转换文件的根路径)
    private String fileString; // (待转换文件的根路径)
    @SuppressWarnings("unused")
    private String outputPath = ""; // pdf输出路径 ,如果不设置就输出在默认的位置
    private String outputPath = ""; // pdf输出路径 ,如果不设置就输出在默认的位置
    @SuppressWarnings("unused")
    private String fileName;
    private File pdfFile;
@@ -28,7 +28,7 @@
    }
    /**
     * 可自定义设置转换文件全路径名
     * 可自定义设置转换文件全路径名
     * 
     * @param fileString
     */
@@ -37,7 +37,7 @@
    }
    /**
     * 初始化
     * 初始化
     * 
     * @param fileString
     */
@@ -47,7 +47,7 @@
    }
    /**
     * 设置输出路径
     * 设置输出路径
     */
    public void setOutputPath(String outputPath) {
        this.outputPath = outputPath;
@@ -64,7 +64,7 @@
    }
    /**
     * תΪPDF
     * 转为PDF
     * 
     * @param file
     */
@@ -73,11 +73,11 @@
        if (docFile.exists()) {
            if (!pdfFile.exists()) {
                String OpenOffice_HOME = "C:\\Program Files (x86)\\OpenOffice 4";
                // 如果从文件中读取的URL地址最后一个字符不是 '\',则添加'\'
                // 如果从文件中读取的URL地址最后一个字符不是 '\',则添加'\'
                if (OpenOffice_HOME.charAt(OpenOffice_HOME.length() - 1) != '\\') {
                    OpenOffice_HOME += "\\";
                }
                // 启动OpenOffice的服务
                // 启动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);
@@ -88,29 +88,29 @@
                    DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
                    converter.convert(docFile, pdfFile);
                    connection.disconnect();
                    System.out.println("df转换成功,保存路径:" + pdfFile.getPath());
                    System.out.println("df转换成功,保存路径:" + pdfFile.getPath());
                } catch (java.net.ConnectException e) {
                    e.printStackTrace();
                    System.out.println("转换失败,openoffice服务未启动!");
                    System.out.println("转换失败,openoffice服务未启动!");
                    throw e;
                } catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) {
                    e.printStackTrace();
                    System.out.println("读取转换文件失败");
                    System.out.println("读取转换文件失败");
                    throw e;
                } catch (Exception e) {
                    e.printStackTrace();
                    throw e;
                }
            } else {
                System.out.println("文件已存在,不需要转换");
                System.out.println("文件已存在,不需要转换");
            }
        } else {
            System.out.println("需要转换的文档不存在,无法转换");
            System.out.println("需要转换的文档不存在,无法转换");
        }
    }
    /**
     * 返回pdf文件路径
     * 返回pdf文件路径
     * 
     * @return
     */
src/main/java/com/qxueyou/scc/config/Swagger2.java
@@ -14,13 +14,13 @@
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
 * SWAGGER2配置,访问地址:http://xxxx:8090/scc/swagger-ui.html
 * SWAGGER2配置,访问地址:http://xxxx:8090/scc/swagger-ui.html
 * 
 * @author kevin
 */
@Configuration
@EnableSwagger2
//@Profile("dev")//测试环境配置,正式环境不配置
//@Profile("dev")//测试环境配置,正式环境不配置
public class Swagger2 {
    
    @Autowired
@@ -38,8 +38,8 @@
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("智慧蓝项目接口 restful api")
                .description("本API基于Swagger 2.9.2版本构建")
                .title("智慧蓝项目接口 restful api")
                .description("本API基于Swagger 2.9.2版本构建")
                .termsOfServiceUrl(config.getDomain())
                .contact(new Contact("kevin","",""))
                .version("1.0")
src/main/java/com/qxueyou/scc/controller/AttendanceController.java
@@ -15,20 +15,20 @@
import java.util.List;
@Api(tags="考勤管理接口")
@Api(tags="考勤管理接口")
@RestController
@RequestMapping("/admin/Attendance")
public class AttendanceController {
    @Autowired
    private AttendanceService attendanceService;
    @ApiOperation(value = "打卡", notes = "")
    @ApiOperation(value = "打卡", notes = "")
    @PostMapping(value = "/attendanceUpAndAdd")
    public String attendanceUpAndAdd(String studentId, String subjectId) {
        return attendanceService.attendanceUpAndAdd(studentId,subjectId);
    }
    @ApiOperation(value = "考勤信息", notes = "")
    @ApiOperation(value = "考勤信息", notes = "")
    @GetMapping(value = "/attendanceList")
    public Result attendanceList(@RequestParam(defaultValue = "10") Integer limit, @RequestParam(defaultValue = "1") Integer pageNum, String keyword, String subjectId) {
@@ -44,7 +44,7 @@
                "attendanceCount", count));
    }
    @ApiOperation(value = "修改考勤状态", notes = "")
    @ApiOperation(value = "修改考勤状态", notes = "")
    @GetMapping(value = "/updateAttendanceStatus")
    public Result updateAttendanceStatus(String studentId, String attendanceStatus) {
        return attendanceService.updateAttendanceStatus(studentId,attendanceStatus);
src/main/java/com/qxueyou/scc/controller/ClassController.java
@@ -42,11 +42,11 @@
import io.swagger.annotations.ApiOperation;
/**
 * 班级管理控制器
 * 班级管理控制器
 *
 * @author chenjunliang
 */
@Api(tags="班级管理接口")
@Api(tags="班级管理接口")
@RestController
@RequestMapping("/admin/class")
public class ClassController {
@@ -68,46 +68,46 @@
    @Autowired
    IClassLectureService clsLectureService;
    //---------------------------------------------------------------------------------app接口--------------------------------------------------------------------------------------------------------------------/
    //---------------------------------------------------------------------------------app接口--------------------------------------------------------------------------------------------------------------------/
    /**
     * 获取正常班级列表
     * 获取正常班级列表
     *
     * @param keyword
     * @param limit
     * @param pageNum
     * @return
     */
    @ApiOperation(value = "获取正常班级列表", notes = "")
    @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 = "")
    @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 = "")
    @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"),
        @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) {
@@ -115,16 +115,16 @@
       }
    /**
     * 学员详情
     * 学员详情
     *
     * @param classId
     * @param studentId
     * @return
     */
    @ApiOperation(value = "学员学习进度", notes = "")
    @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"),
        @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) {
@@ -132,14 +132,14 @@
       }
       /**
        * 获取首页数据排行
        * 获取首页数据排行
        *
        *
        * @param subjectId
        */
       @ApiOperation(value = "班级排行榜", notes = "")
       @ApiOperation(value = "班级排行榜", notes = "")
       @ApiImplicitParams({
           @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"),
           @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"),
       })
       @GetMapping(value = "/app/getDataDesc")
       public Result getDataDesc(String classId, String subjectId) {
@@ -147,16 +147,16 @@
       }
    /**
     * 学员课程进度
     * 学员课程进度
     *
     *
     * @param subjectId
    */
    @ApiOperation(value = "学员课程进度", notes = "")
    @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"),
           @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) {
@@ -166,46 +166,46 @@
       }
    /**
     * 班级学员课程总体进度
     * 班级学员课程总体进度
     *
     *
     * @param classId
    */
    @ApiOperation(value = "班级学员课程总体进度", notes = "")
    @ApiOperation(value = "班级学员课程总体进度", notes = "")
       @ApiImplicitParams({
           @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"),
           @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(false, "班级id参数不能为空");
        }
           return new Result(true, "success", CollectionUtils.newObjectMap("subjectList", this.subjectService.studentSubjectProgress(classId, new Pager())));
       }
    /**
     * 班级学员课件总体进度
     * 班级学员课件总体进度
     *
     *
     * @param classId
     */
    @ApiOperation(value = "班级学员课件总体进度", notes = "")
    @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 = "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参数不能为空");
            return new Result(false, "班级id参数不能为空");
        }
        if(StringUtils.isEmpty(subjectId)) {
            return new Result(false, "课程id参数不能为空");
            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,
@@ -213,37 +213,37 @@
    }
    /**
     * 学员注册
     * 学员注册
     *
     * @param name          学员名称
     * @param studentNumber 学号
     * @param sex           性别
     * @param mobilePhone   手机号
     * @param name          学员名称
     * @param studentNumber 学号
     * @param sex           性别
     * @param mobilePhone   手机号
     */
    @ApiOperation(value = "app端学员注册接口", notes = "")
    @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"),
           @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接口--------------------------------------------------------------------------------------------------------------------/
    //---------------------------------------------------------------------------------app接口--------------------------------------------------------------------------------------------------------------------/
    /**
     * 新增班级
     * 新增班级
     *
     * @param className   班级名称
     * @param classNumber 班级编码
     * @param startTime   开班时间
     * @param endTime     结束时间
     * @param subjectId   课程id
     * @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,
@@ -254,38 +254,38 @@
        } catch (ParseException e) {
            log.error(e, e);
            return new Result(false, "日期参数错误");
            return new Result(false, "日期参数错误");
        }
    }
    /**
     * 新增补考分组
     * @param className   班级名称
     * @param classNumber 班级编码
     * @param startTime   开班时间
     * @param endTime     结束时间
     * @param subjectId   课程id
     * 新增补考分组
     * @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, "补考分组已存在");
                //存在返回false
                return new Result(false, "补考分组已存在");
            }
        } catch (ParseException e) {
            log.error(e, e);
            return new Result(false, "日期参数错误");
            return new Result(false, "日期参数错误");
        }
    }
    /**
     * 新增班级获取课程列表
     * 新增班级获取课程列表
     */
    @GetMapping(value = "getSubjectLst")
    public Result getSubjectlst() {
@@ -297,31 +297,31 @@
    }
    /**
     * 获取班级列表
     * 获取班级列表
     *
     * @param keyword
     * @param limit
     * @param pageNum
     * @return
     */
    @ApiOperation(value = "获取班级列表", notes = "")
    @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) {
        String teacherId = ClientUtils.isAdmin() ? null : teacherService.getTeacherIdByUserId(ClientUtils.getUserId());
        // 获取数据
        // 获取数据
        List<ClsClass> clsLst = classService.getClassLst(keyword, teacherId, limit, pageNum, pageType);
        // 获取班级总数
        // 获取班级总数
        int count = classService.getClassLstCount(keyword, teacherId, pageType);
        // 转成前端所需字段和结构
        // 转成前端所需字段和结构
       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){
@@ -360,14 +360,14 @@
    /**
     * 查询班级基本信息
     * 查询班级基本信息
     *
     * @param classId 班级id
     * @param classId 班级id
     * @return
     */
    @ApiOperation(value = "查询班级基本信息", notes = "")
    @ApiOperation(value = "查询班级基本信息", notes = "")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"),
        @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"),
    })
    @GetMapping(value = "queryClass")
    public Result findClass(String classId) {
@@ -383,9 +383,9 @@
    }
    /**
     * 删除班级
     * 删除班级
     *
     * @param classId 班级id
     * @param classId 班级id
     * @return
     */
    @GetMapping("delete")
@@ -396,19 +396,19 @@
    }
    /**
     * 复制班级
     * 复制班级
     *
     * @param classId               班级id
     * @param className             班级名称
     * @param classNumber           班级编码
     * @param startTime             开班时间
     * @param endTime               结束时间
     * @param classId               班级id
     * @param className             班级名称
     * @param classNumber           班级编码
     * @param startTime             开班时间
     * @param endTime               结束时间
     * @param subjectId
     * @param needJoinAudit         是否加班审批
     * @param needQuitAudit         是否退班审批
     * @param showAnalysisAfterExer 完成练习后是否显示答案
     * @param canMultiExer          是否允许重复学习
     * @param needForum             是否开通论坛
     * @param needJoinAudit         是否加班审批
     * @param needQuitAudit         是否退班审批
     * @param showAnalysisAfterExer 完成练习后是否显示答案
     * @param canMultiExer          是否允许重复学习
     * @param needForum             是否开通论坛
     * @return
     */
    @PostMapping(value = "copy")
@@ -419,19 +419,19 @@
    }
    /**
     * 更新班级
     * 更新班级
     *
     * @param classId               班级id
     * @param className             班级名称
     * @param classNumber           班级编码
     * @param startTime             开班时间
     * @param endTime               结束时间
     * @param classId               班级id
     * @param className             班级名称
     * @param classNumber           班级编码
     * @param startTime             开班时间
     * @param endTime               结束时间
     * @param subjectId
     * @param needJoinAudit         是否加班审批
     * @param needQuitAudit         是否退班审批
     * @param showAnalysisAfterExer 完成练习后是否显示答案
     * @param canMultiExer          是否允许重复学习
     * @param needForum             是否开通论坛
     * @param needJoinAudit         是否加班审批
     * @param needQuitAudit         是否退班审批
     * @param showAnalysisAfterExer 完成练习后是否显示答案
     * @param canMultiExer          是否允许重复学习
     * @param needForum             是否开通论坛
     * @return
     */
    @PostMapping(value = "update")
@@ -447,22 +447,22 @@
                    showAnalysisAfterExer, canMultiExer, needForum, teacherId);
        } catch (ParseException e) {
            log.error(e, e);
            return new Result(false, "日期参数错误");
            return new Result(false, "日期参数错误");
        }
    }
    /**
     * 班级管理 学员管理 获取学员列表
     * 班级管理 学员管理 获取学员列表
     *
     * @param classId 班级id
     * @param limit   每页显示几条
     * @param pageNum 页码
     * @param keyword 搜索关键字
     * @return 学习状态说明(0, 未开始 。 1, 学习中 。 2, 已结束, 3, 待激活 。 4, 已冻结)
     * @param classId 班级id
     * @param limit   每页显示几条
     * @param pageNum 页码
     * @param keyword 搜索关键字
     * @return 学习状态说明(0, 未开始 。 1, 学习中 。 2, 已结束, 3, 待激活 。 4, 已冻结)
     */
    @ApiOperation(value = "获取学员列表", notes = "学习状态说明(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"),
        @ApiImplicitParam(name = "classId", value = "班级id", required = true, paramType="query", dataType = "String"),
    })
    @GetMapping(value = "lstStudent4Class")
    public Result lstStudent4Class(String classId, @RequestParam(defaultValue = "10") Integer limit,
@@ -476,9 +476,9 @@
    }
    /**
     * 导入学员
     * 导入学员
     *
     * @param classId 班级id
     * @param classId 班级id
     */
    @GetMapping(value = "importStudent")
    public Result importStudent(String classId) {
@@ -486,13 +486,13 @@
    }
    /**
     * 新增学员
     * 新增学员
     *
     * @param name          学员名称
     * @param studentNumber 学号
     * @param classId       班级id
     * @param sex           性别
     * @param mobilePhone   手机号
     * @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) {
@@ -502,13 +502,13 @@
    }
    /**
     * 更新学员
     * 更新学员
     *
     * @param name          学员名称
     * @param studentNumber 学号
     * @param classId       班级id
     * @param sex           性别
     * @param mobilePhone   手机号
     * @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) {
@@ -520,9 +520,9 @@
    /**
     * 激活学员
     * 激活学员
     *
     * @param studentIds ѧԱIds
     * @param studentIds 学员Ids
     */
    @GetMapping(value = "activateStudent")
    public Result activate(String studentIds) {
@@ -530,9 +530,9 @@
    }
    /**
     * 冻结学员
     * 冻结学员
     *
     * @param studentIds ѧԱIds
     * @param studentIds 学员Ids
     */
    @GetMapping(value = "blockStudent")
    public Result block(String studentIds) {
@@ -540,9 +540,9 @@
    }
    /**
     * 删除学员
     * 删除学员
     *
     * @param studentIds ѧԱIds
     * @param studentIds 学员Ids
     */
    @GetMapping(value = "deleteStudent")
    public Result deleteStudent(String classId, String studentIds) {
@@ -550,7 +550,7 @@
    }
    /**
     * 添加班级课程
     * 添加班级课程
     * @throws InvocationTargetException
     * @throws IllegalAccessException
     *
@@ -561,7 +561,7 @@
    }
    /**
     * 更新班级课程
     * 更新班级课程
     */
    @PostMapping(value = "updateClsSubject")
    public Result updateClsSubject(String classId,String subjectId, String origSubjectId,String teacherId,Integer schoolYear ,Integer term) {
@@ -569,17 +569,17 @@
    }
    /**
     * 删除班级课程
     * 删除班级课程
     */
    @GetMapping(value = "deleteClsSubject")
    public Result deleteClsSubject(String classId,String subjectIds){
        //删除课程及课程班级关联关系
        //删除课程及课程班级关联关系
        return subjectService.deleteClsSubject(classId,subjectIds.split(","));
    }
    /**
     * 所有班级列表
     * @param subjectId 根据subjectId过滤
     * 所有班级列表
     * @param subjectId 根据subjectId过滤
     * @return
     */
    @RequestMapping(value = "/selectlist", method = RequestMethod.GET)
@@ -588,35 +588,35 @@
    }
    /**
     * 获取学员详细信息
     * 获取学员详细信息
     *
     * @param studentId ѧԱid
     * @return percent (状态说明:0,未开始。1,学习中。2,已结束。) status (0,未提交。1,已提交)
     * @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",
        // 学员信息
        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,
        // 学习档案
        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,
        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,
        Map<String, Object> subjectThree = CollectionUtils.newObjectMap("subjectName", "物流工程基础2", "percent", 0,
                "studyDuration", "", "endStudyTime", "", "score", "");
        // 作业记录
        Map<String, Object> exerOne = CollectionUtils.newObjectMap("exerciseName", "物流科学与工程", "subjectName", "物流科学与工程",
        // 作业记录
        Map<String, Object> exerOne = CollectionUtils.newObjectMap("exerciseName", "物流科学与工程", "subjectName", "物流科学与工程",
                "status", 1, "commitTime", new Date(), "score", 96.2);
        Map<String, Object> exerTwo = CollectionUtils.newObjectMap("exerciseName", "物流工程基础", "subjectName", "物流工程基础",
        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", "物流科学与工程",
        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", "物流科学与工程",
        Map<String, Object> examTwo = CollectionUtils.newObjectMap("examName", "物流科学与工程", "subjectName", "物流科学与工程",
                "status", 0, "commintTime", new Date(), "score", "");
        return new Result(true, "success",
                CollectionUtils.newObjectMap("studentDetail", studentDetail, "subjectLst",
src/main/java/com/qxueyou/scc/controller/ClassRoomController.java
@@ -27,14 +27,14 @@
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
@Api(tags = "教室管理")
@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;
@@ -45,15 +45,15 @@
    private CommonDAO commonDAO;
    
    /**
     * 课表列表
     * 课表列表
     */
    @ApiOperation(value = "获取教室列表")
    @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);
@@ -68,16 +68,16 @@
    }
    /**
     * 保存
     * 保存
     * @param classRoom
     * @return
     */
    @ApiOperation(value = "保存教室")
    @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, "添加失败!重复的教室信息");
            return new Result(false, "添加失败!重复的教室信息");
        }
        
        if (StringUtils.isEmpty(classRoom.getRoomId())) {
@@ -113,13 +113,13 @@
    
    /**
     * 删除
     * 删除
     * 
     * @param examIds
     * @return
     */
    @ApiOperation(value = "删除教室", httpMethod = "GET")
    @ApiImplicitParam(name = "roomIds", value = "教室ID字符串", required = true, dataType = "String", paramType = "body")
    @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);
@@ -130,32 +130,32 @@
    }
    
    /**
     * 发布教室
     * 发布教室
     * 
     * @param scheduleIds
     * @return
     */
    @ApiOperation(value = "发布教室", httpMethod = "GET")
    @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 new Result(false, "参数错误");
        }
        
        return this.classRoomService.doRelease(roomIds.split(","));
    }
    /**
     * 撤回发布的教室
     * 撤回发布的教室
     * 
     * @param scheduleIds
     * @return
     */
    @ApiOperation(value = "撤回教室", httpMethod = "GET")
    @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 new Result(false, "参数错误");
        }
        
        return this.classRoomService.doCancel(roomIds.split(","));
@@ -163,14 +163,14 @@
    
    
    /**
     * 详情页面数据
     * 详情页面数据
     * 
     * @param examId
     * @return
     */
    @ApiOperation(value = "详情页面数据")
    @ApiOperation(value = "详情页面数据")
    @ApiImplicitParams({
        @ApiImplicitParam(name="roomId", dataType="String", paramType="query", value="教室ID", required=true),
        @ApiImplicitParam(name="roomId", dataType="String", paramType="query", value="教室ID", required=true),
    })
    @RequestMapping(value = "/detail", method = RequestMethod.GET)
    public @ResponseBody Result detail(String roomId) {
@@ -178,12 +178,12 @@
    }
    
    /**
     *查询所有教室的ID和名称
     *查询所有教室的ID和名称
     * 
     * @param scheduleIds
     * @return
     */
    @ApiOperation(value = "可选择教室ID和名称")
    @ApiOperation(value = "可选择教室ID和名称")
    @RequestMapping(value = "/allRoomIdAndNames", method = RequestMethod.GET)
    public @ResponseBody Result listClassRoomIdAndNames() {
        List<Map<String,Object>> listResult =  this.classRoomService.queryAllRoomIdAndNames();
src/main/java/com/qxueyou/scc/controller/ClsLectureController.java
@@ -29,7 +29,7 @@
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
@Api(tags = "课件管理-教师端")
@Api(tags = "课件管理-教师端")
@RestController
@RequestMapping(value = "teach/clsLecture")
public class ClsLectureController {
@@ -42,22 +42,22 @@
    @Autowired
    IResService resService;
    
    /**-------------------------------------------------------------------app接口------------------------------------------------------------------------------------------**/
    /**-------------------------------------------------------------------app接口------------------------------------------------------------------------------------------**/
    @SuppressWarnings("unchecked")
    @ApiOperation(value = "获取课程下课件", notes = "")
    @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")
        @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不能为空");
            return new Result(false, "课程id不能为空");
        }
        
        //公开课和管理员课程
        //公开课和管理员课程
        if(StringUtils.isEmpty(classId)) {
            Object obj = this.classLectureService.coursewareChapterList(classId, subjectId, type).getData();
            if(obj == null) {
@@ -66,29 +66,29 @@
            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
     * 加载课件tree
     *
     * @param parentId
     *            父节点id
     *            父节点id
     */
    @ApiOperation(value = "获取课程下章节", notes = "")
    @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")
        @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) {
@@ -100,25 +100,25 @@
    }
    /**
     * 获取课件列表
     * 获取课件列表
     * 
     * @param chapterId
     *            章节id
     *            章节id
     * @param type
     *            课件类型
     *            课件类型
     * @param keyword
     *            搜索关键字
     *            搜索关键字
     * @param limit
     *            每页显示几条
     *            每页显示几条
     * @param pageNum
     *            页码
     * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
     *            页码
     * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
     */
    @ApiOperation(value = "获取课程下章节", notes = "")
    @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")
        @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,
@@ -139,17 +139,17 @@
    }
    /**
     * 查看课件
     * 查看课件
     * 
     * @param id
     *            课件id
     *            课件id
     * @param attribute
     *            扩展属性 video:"mp4:HD","m3u8:SD" 可不用传 audio:可不用传 doc:可不用传
     *            扩展属性 video:"mp4:HD","m3u8:SD" 可不用传 audio:可不用传 doc:可不用传
     */
    @ApiOperation(value = "查看课件", notes = "")
    @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"),
        @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) {
@@ -164,10 +164,10 @@
    }
    /**
     * 删除课件
     * 删除课件
     * 
     * @param id
     *            课件ids
     *            课件ids
     */
    @GetMapping(value = "deleteCourseware")
    public Result deleteLecture(String id) {
@@ -177,18 +177,18 @@
    }
    /**
     * 课件管理 新增下级,同级
     * 课件管理 新增下级,同级
     * 
     * @param type
     *            (add:新增,edit :编辑)
     *            (add:新增,edit :编辑)
     * @param chapterId
     *            章节id
     *            章节id
     * @param classId
     *            班级id
     *            班级id
     * @param name
     *            名称
     *            名称
     * @param childFlag
     *            是否操作下级
     *            是否操作下级
     * 
     */
    @PostMapping(value = "addOrUpdateChapter")
@@ -204,10 +204,10 @@
    }
    /**
     * 课件管理 目录删除
     * 课件管理 目录删除
     * 
     * @param chapterId
     *            Ŀ¼id
     *            目录id
     */
    @GetMapping(value = "deleteChapter")
    public Result deleteChapter(String chapterId) {
@@ -215,24 +215,24 @@
    }
    /**
     * 添加/更新(视频,讲义,音频)
     * 添加/更新(视频,讲义,音频)
     * 
     * @param name
     *            名称
     *            名称
     * @param coverUrl
     *            封面Url
     *            封面Url
     * @param remark:
     *            <p>
     *            视频啊啊啊
     *            视频啊啊啊
     *            </p>
     *            介绍
     *            介绍
     *
     * @param id
     *            课件id
     *            课件id
     * @param sectionId
     *            小节Id
     *            小节Id
     * @param type
     * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
     * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
     */
    @PostMapping(value = "addOrUpdate")
    public Result addOrUpdate(String id, String remark, String name, String coverUrl, String type, String fileId,
@@ -253,10 +253,10 @@
    }
    /**
     * 编辑 获取内容
     * 编辑 获取内容
     * 
     * @param id
     *            课件id
     *            课件id
     */
    @GetMapping(value = "getCoursewareDetail")
    public Result getLectureDetail(String id) {
@@ -272,19 +272,19 @@
    }
    /**
     * 课件获取资源列表
     * 课件获取资源列表
     * 
     * @param dirId
     *            Ŀ¼Id
     *            目录Id
     * @param limit
     *            每页显示几条
     *            每页显示几条
     * @param pageNum
     *            页码
     * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
     *            页码
     * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
     */
    @ApiOperation(value = "课件获取资源列表", notes = "")
    @ApiOperation(value = "课件获取资源列表", notes = "")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "dirId", value = "Ŀ¼Id", required = false, paramType="query", dataType = "String")
        @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) {
@@ -299,12 +299,12 @@
    }
    /**
     * 课件从资源选择后保存
     * 课件从资源选择后保存
     * 
     * @param resId
     *            资源文件id
     *            资源文件id
     * @param sectionId
     *            小节id
     *            小节id
     * 
     */
    @GetMapping(value = "saveCourseware4Res")
src/main/java/com/qxueyou/scc/controller/CourseScheduleController.java
@@ -27,16 +27,16 @@
import io.swagger.annotations.ApiOperation;
/**
 * 班级管理控制器
 * 班级管理控制器
 *
 * @author kevin
 */
@Api(tags="课表接口")
@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;
@@ -47,16 +47,16 @@
    IClassRoomService classRoomService;
    
    /**
     * 课表列表
     * 课表列表
     */
    @SuppressWarnings("unchecked")
    @ApiOperation(value = "获取课表列表")
    @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);
@@ -92,16 +92,16 @@
    }
    
    /**
       * 课表列表
       * 课表列表
     * @throws ParseException 
       */
    @ApiOperation(value = "教师获取当天课表信息")
    @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);
@@ -144,16 +144,16 @@
    
    
    /**
       * 课表列表
       * 课表列表
     * @throws ParseException 
       */
    @ApiOperation(value = "学生获取当天课表信息")
    @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);
@@ -193,13 +193,13 @@
      }
     
    /**
     * 保存
     * 保存
     * 
     * @param examInfo
     * @return
     * @throws Exception 
     */
    @ApiOperation(value = "保存课表")
    @ApiOperation(value = "保存课表")
    @RequestMapping(value = "/save", method = RequestMethod.POST)
    public @ResponseBody Result save(@RequestBody CourseSchedule courseSchedule) throws Exception {
        if (StringUtils.isEmpty(courseSchedule.getScheduleId())) {
@@ -212,13 +212,13 @@
    }
    /**
     * 删除
     * 删除
     * 
     * @param examIds
     * @return
     */
    @ApiOperation(value = "删除课表", httpMethod = "GET")
    @ApiImplicitParam(name = "scheduleIds", value = "课表ID字符串", required = true, dataType = "String", paramType = "body")
    @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);
@@ -229,47 +229,47 @@
    }
    
    /**
     * 发布课表
     * 发布课表
     * 
     * @param scheduleIds
     * @return
     */
    @ApiOperation(value = "发布课表")
    @ApiOperation(value = "发布课表")
    @RequestMapping(value = "/publish", method = RequestMethod.GET)
    public @ResponseBody Result publish(String scheduleIds) {
        if (StringUtils.isEmpty(scheduleIds)) {
            return new Result(false, "参数错误");
            return new Result(false, "参数错误");
        }
        return this.scheduleService.doRelease(scheduleIds.split(","));
    }
    /**
     * 撤回课表
     * 撤回课表
     * 
     * @param scheduleIds
     * @return
     */
    @ApiOperation(value = "撤回课表")
    @ApiOperation(value = "撤回课表")
    @RequestMapping(value = "/cancel", method = RequestMethod.GET)
    public @ResponseBody Result cancel(String scheduleIds) {
        if (StringUtils.isEmpty(scheduleIds)) {
            return new Result(false, "参数错误");
            return new Result(false, "参数错误");
        }
        
        return this.scheduleService.doCancel(scheduleIds.split(","));
    }
    
    /**
     * 课表详情
     * 课表详情
     * 
     * @param scheduleIds
     * @return
     */
    @ApiOperation(value = "课表详情")
    @ApiOperation(value = "课表详情")
    @RequestMapping(value = "/detail", method = RequestMethod.GET)
    public @ResponseBody Result detail(String scheduleId) {
        if (StringUtils.isEmpty(scheduleId)) {
            return new Result(false, "参数错误");
            return new Result(false, "参数错误");
        }
        
        CourseSchedule sche =  this.scheduleService.detail(scheduleId);
@@ -300,16 +300,16 @@
    }
    
    /**
     * 标记有课的日期
     * 标记有课的日期
     * 
     * @param scheduleIds
     * @return
     */
    @ApiOperation(value = "教师课表是否有课标识查询")
    @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, "参数错误");
            return new Result(false, "参数错误");
        }
        
        List<Integer> listResult =  this.scheduleService.queryDateFlag(year, month);
src/main/java/com/qxueyou/scc/controller/CoursewareController.java
@@ -33,12 +33,12 @@
import io.swagger.annotations.ApiOperation;
/**
 * 课件控制器
 * 课件控制器
 *
 * @author chenjunliang
 *
 */
@Api(tags = "课件管理-管理员端")
@Api(tags = "课件管理-管理员端")
@RestController
@RequestMapping(value = "teach/courseware")
public class CoursewareController {
@@ -56,10 +56,10 @@
    IProgressService progressService;
    /**
     * 加载课件tree
     * 加载课件tree
     *
     * @param parentId
     *            父节点id
     *            父节点id
     */
    @GetMapping(value = "categoryTree")
    public Result categoryTree(String subjectId, String parentId) {
@@ -71,19 +71,19 @@
    }
    /**
     * 获取课件列表
     * 获取课件列表
     *
     * @param chapterId
     *            章节id
     *            章节id
     * @param type
     *            课件类型
     *            课件类型
     * @param keyword
     *            搜索关键字
     *            搜索关键字
     * @param limit
     *            每页显示几条
     *            每页显示几条
     * @param pageNum
     *            页码
     * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
     *            页码
     * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
     */
    @GetMapping(value = "coursewareList")
    public Result coursewareList(String chapterId, String type, String keyword, Integer limit, Integer pageNum) {
@@ -102,17 +102,17 @@
    }
    /**
     * 查看课件
     * 查看课件
     *
     * @param id
     *            课件id
     *            课件id
     * @param attribute
     *            扩展属性 video:"mp4:HD","m3u8:SD" 可不用传 audio:可不用传 doc:可不用传
     *            扩展属性 video:"mp4:HD","m3u8:SD" 可不用传 audio:可不用传 doc:可不用传
     */
    @ApiOperation(value = "查看课件", notes = "")
    @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"),
        @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) {
@@ -127,10 +127,10 @@
    }
    /**
     * 删除课件
     * 删除课件
     *
     * @param id
     *            课件ids
     *            课件ids
     */
    @GetMapping(value = "deleteCourseware")
    public Result deleteCourseware(String id) {
@@ -142,20 +142,20 @@
    }
    /**
     * 课件的复制
     * 课件的复制
     *
     * @param id
     *            课件id
     *            课件id
     * @param type
     *            课件类型
     *            课件类型
     * @param chapterId
     *            章Id
     *            章Id
     * @param sectionId
     *            节id
     *            节id
     * @param smallSectionId
     *            小节id
     *            小节id
     * @param name
     *            课件名称
     *            课件名称
     */
    @GetMapping(value = "copy")
    public Result copy(String id, String type, String subjectId, String chapterId, String name) {
@@ -163,18 +163,18 @@
    }
    /**
     * 课件的移动
     * 课件的移动
     *
     * @param id
     *            课件id
     *            课件id
     * @param type
     *            课件类型
     *            课件类型
     * @param chapterId
     *            章Id
     *            章Id
     * @param sectionId
     *            节id
     *            节id
     * @param smallSectionId
     *            小节id
     *            小节id
     */
    @GetMapping(value = "move")
    public Result moveCourseware(String id, String type, String subjectId, String chapterId, String name) {
@@ -182,18 +182,18 @@
    }
    /**
     * 课件管理 新增下级,同级
     * 课件管理 新增下级,同级
     *
     * @param type
     *            (add:新增,edit :编辑)
     *            (add:新增,edit :编辑)
     * @param chapterId
     *            章节id
     *            章节id
     * @param subjectId
     *            课程id
     *            课程id
     * @param name
     *            名称
     *            名称
     * @param childFlag
     *            是否操作下级
     *            是否操作下级
     *
     */
    @PostMapping(value = "addOrUpdateChapter")
@@ -211,10 +211,10 @@
    }
    /**
     * 课件管理 目录删除
     * 课件管理 目录删除
     *
     * @param chapterId
     *            Ŀ¼id
     *            目录id
     */
    @GetMapping(value = "deleteChapter")
    public Result deleteChapter(String chapterId) {
@@ -222,24 +222,24 @@
    }
    /**
     * 添加/更新(视频,讲义,音频)
     * 添加/更新(视频,讲义,音频)
     *
     * @param name
     *            名称
     *            名称
     * @param coverUrl
     *            封面Url
     *            封面Url
     * @param remark:
     *            <p>
     *            视频啊啊啊
     *            视频啊啊啊
     *            </p>
     *            介绍
     *            介绍
     *
     * @param id
     *            课件id
     *            课件id
     * @param sectionId
     *            小节Id
     *            小节Id
     * @param type
     * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
     * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
     */
    @PostMapping(value = "addOrUpdate")
    public Result addOrUpdate(String id, String remark, String name, String coverUrl, String type, String fileId,
@@ -263,10 +263,10 @@
    }
    /**
     * 编辑 获取内容
     * 编辑 获取内容
     *
     * @param id
     *            课件id
     *            课件id
     */
    @GetMapping(value = "getCoursewareDetail")
    public Result getCoursewareDetail(String id) {
@@ -282,15 +282,15 @@
    }
    /**
     * 课件获取资源列表
     * 课件获取资源列表
     *
     * @param dirId
     *            Ŀ¼Id
     *            目录Id
     * @param limit
     *            每页显示几条
     *            每页显示几条
     * @param pageNum
     *            页码
     * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
     *            页码
     * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
     */
    @GetMapping(value = "getResLst")
    public Result getResLst(String dirId, Integer limit, Integer pageNum, String keyword) {
@@ -305,12 +305,12 @@
    }
    /**
     * 课件从资源选择后保存
     * 课件从资源选择后保存
     *
     * @param resId
     *            资源文件id
     *            资源文件id
     * @param sectionId
     *            小节id
     *            小节id
     *
     */
    @GetMapping(value = "saveCourseware4Res")
@@ -329,27 +329,27 @@
    }
    /**
     * 获取练习成绩列表
     * 获取练习成绩列表
     *
     * @param subjectId
     *            课程id
     *            课程id
     * @param exerciseId
     *            练习id
     *            练习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
                "李刚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);
                "李刚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);
                "李刚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),
@@ -357,11 +357,11 @@
    }
    /**
     * 练习成绩的导出
     * 练习成绩的导出
     *
     * @param subjectId
     *            课程id
     * @param exerciseId练习id
     *            课程id
     * @param exerciseId练习id
     */
    @GetMapping(value = "exportScore")
    public Result exportScore(String subjectId, String exerciseId) {
src/main/java/com/qxueyou/scc/controller/EvaluateController.java
@@ -25,11 +25,11 @@
/**
 * 评估控制器
 * 评估控制器
 *
 * @author zhiyong
 */
@Api(tags = "问卷接口")
@Api(tags = "问卷接口")
@Controller
@CrossOrigin(origins="*",maxAge=3600)
@RequestMapping(value = "/evaluate")
@@ -44,19 +44,19 @@
    @Autowired
    IOssService ossService;
    // ------------------------------后台   start------------------------------------------------------------
    // ------------------------------后台   start------------------------------------------------------------
    /**
     * 获取列表数据
     * 获取列表数据
     *
     * @return
     */
    @ApiOperation(value = "获取列表数据-教师端", notes = "", httpMethod = "GET")
    @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"),
        @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
@@ -66,15 +66,15 @@
    }
    /**
     * 获取范围选择
     * 获取范围选择
     * <p>
     * type:   lesson:课程  class:班级     person:人员
     * type:   lesson:课程  class:班级     person:人员
     *
     * @return
     */
    @ApiOperation(value = "获取范围选择", notes = "根据填写范围获取下拉列表的值")
    @ApiOperation(value = "获取范围选择", notes = "根据填写范围获取下拉列表的值")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "type", value = "填写范围【lesson:课程  class:班级     person:人员】", required = false, paramType="query", dataType = "String"),
        @ApiImplicitParam(name = "type", value = "填写范围【lesson:课程  class:班级     person:人员】", required = false, paramType="query", dataType = "String"),
    })
    @RequestMapping(value = "rangeList", method = RequestMethod.GET)
    public @ResponseBody
@@ -84,13 +84,13 @@
    }
    /**
     * 后台管理
     * 新增或修改教学评估
     * 后台管理
     * 新增或修改教学评估
     *
     * @param obj
     * @return
     */
    @ApiOperation(value = "新增或修改问卷", notes = "")
    @ApiOperation(value = "新增或修改问卷", notes = "")
    @RequestMapping(value = "addOrUpdate", method = RequestMethod.POST)
    public @ResponseBody
    ResultJson addOrUpdateEvaluate(@RequestBody SchEvaluate eva) {
@@ -99,13 +99,13 @@
    }
    /**
     * 获取回显数据
     * 获取回显数据
     *
     * @return
     */
    @ApiOperation(value = "读取问卷的信息", notes = "")
    @ApiOperation(value = "读取问卷的信息", notes = "")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "evaluateId", value = "问卷id", required = false, paramType="query", dataType = "String"),
        @ApiImplicitParam(name = "evaluateId", value = "问卷id", required = false, paramType="query", dataType = "String"),
    })
    @RequestMapping(value = "baseInfo", method = RequestMethod.GET)
    public @ResponseBody
@@ -115,13 +115,13 @@
    }
    /**
     * 删除
     * 删除
     *
     * @return
     */
    @ApiOperation(value = "删除问卷", notes = "")
    @ApiOperation(value = "删除问卷", notes = "")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "evaluateIds", value = "问卷id,id", required = false, paramType="query", dataType = "String"),
        @ApiImplicitParam(name = "evaluateIds", value = "问卷id,id", required = false, paramType="query", dataType = "String"),
    })
    @RequestMapping(value = "delete", method = RequestMethod.POST)
    public @ResponseBody
@@ -131,14 +131,14 @@
    }
    /**
     * 后台管理
     * 激活教学评估
     * 后台管理
     * 激活教学评估
     *
     * @return
     */
    @ApiOperation(value = "激活教学评估", notes = "")
    @ApiOperation(value = "激活教学评估", notes = "")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "evaluateIds", value = "问卷id,id", required = false, paramType="query", dataType = "String"),
        @ApiImplicitParam(name = "evaluateIds", value = "问卷id,id", required = false, paramType="query", dataType = "String"),
    })
    @RequestMapping(value = "active", method = RequestMethod.POST)
    @ResponseBody
@@ -149,14 +149,14 @@
    }
    /**
     * 后台管理
     * 撤回
     * 后台管理
     * 撤回
     *
     * @return
     */
    @ApiOperation(value = "撤回教学评估", notes = "")
    @ApiOperation(value = "撤回教学评估", notes = "")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "evaluateIds", value = "问卷id,id", required = false, paramType="query", dataType = "String"),
        @ApiImplicitParam(name = "evaluateIds", value = "问卷id,id", required = false, paramType="query", dataType = "String"),
    })
    @RequestMapping(value = "withdraw", method = RequestMethod.POST)
    @ResponseBody
@@ -167,12 +167,12 @@
    }
    /**
     * 后台管理
     * 复制
     * 后台管理
     * 复制
     *
     * @return
     */
    @ApiOperation(value = "复制教学评估", notes = "")
    @ApiOperation(value = "复制教学评估", notes = "")
    @RequestMapping(value = "copy", method = RequestMethod.POST)
    @ResponseBody
    public ResultJson doCopy(@RequestBody SchEvaluate eva) {
@@ -183,17 +183,17 @@
    /**
     * 查看结果  问卷整体情况
     * 查看结果  问卷整体情况
     *
     * @param groupId
     * @param schEvaluateId
     * @param classId
     * @return
     */
    @ApiOperation(value = "问卷整体答题情况", notes = "")
    @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"),
        @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
@@ -203,16 +203,16 @@
    }
    /**
     * 查看统计
     * 查看统计
     *
     * @param groupId
     * @param schEvaluateId
     * @return
     */
    @ApiOperation(value = "查看问卷统计情况", notes = "")
    @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"),
        @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
@@ -222,18 +222,18 @@
    }
    // ------------------------------后台   end------------------------------------------------------------
    // ------------------------------后台   end------------------------------------------------------------
    // ------------------------------前端  start-----------------------------------------------------------
    // ------------------------------前端  start-----------------------------------------------------------
    /**
     * 微信提交问卷
     * 微信提交问卷
     *
     * @param answers
     * @param userId
     * @return
     */
    @ApiOperation(value = "提交问卷答案", notes = "")
    @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"),
    })
@@ -245,9 +245,9 @@
        try {
            ObjectMapper mapper = new ObjectMapper();
            // 装换json到对象
            // 装换json到对象
            TeachEvaScoreResult scoreResult = mapper.readValue(answers, TeachEvaScoreResult.class);
            // 提交答卷入库
            // 提交答卷入库
            result = evaluateService.doSubmitTeachEvalScoreData(scoreResult, userId);
            
            evaluateService.updateEvaluateCount(scoreResult.getEvaluateId());
@@ -261,11 +261,11 @@
    }
    /**
     * 查询学生评估list
     * 查询学生评估list
     *
     * @return
     */
    @ApiOperation(value = "问卷列表-学员端", notes = "")
    @ApiOperation(value = "问卷列表-学员端", notes = "")
    @RequestMapping(value = "stuEvaluateList", method = RequestMethod.GET)
    public @ResponseBody
    ResultJson queryStuEvaluateList(Pager pager) {
@@ -274,14 +274,14 @@
    }
    /**
     * 问卷查询题目
     * 问卷查询题目
     *
     * @param evaluateId
     * @return
     */
    @ApiOperation(value = "问卷题目列表", notes = "")
    @ApiOperation(value = "问卷题目列表", notes = "")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "evaluateId", value = "问卷id", required = false, paramType="query", dataType = "String"),
        @ApiImplicitParam(name = "evaluateId", value = "问卷id", required = false, paramType="query", dataType = "String"),
    })
    @RequestMapping(value = "viewStuEvaluate", method = RequestMethod.GET)
    public @ResponseBody
@@ -290,5 +290,5 @@
        return evaluateService.doGetEvalExerItemResponseDataNew(evaluateId);
    }
    // ------------------------------前端   end------------------------------------------------------------
    // ------------------------------前端   end------------------------------------------------------------
}
src/main/java/com/qxueyou/scc/controller/ExamRoomController.java
@@ -20,14 +20,14 @@
import java.util.List;
import java.util.Map;
@Api(tags = "考场管理")
@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;
@@ -38,15 +38,15 @@
    private CommonDAO commonDAO;
    /**
     * 考场列表
     * 考场列表
     */
    @ApiOperation(value = "获取考场列表")
    @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);
@@ -61,19 +61,19 @@
    }
    /**
     * 保存
     * 保存
     *
     * @param examRoom
     * @return
     */
    @ApiOperation(value = "保存考场")
    @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(false, "添加失败!重复的考场信息");
            }
            return new Result(true,"",CollectionUtils.newObjectMap("examroomId", examRoomService.add(examRoom)));
        } else {
@@ -107,13 +107,13 @@
    /**
     * 删除
     * 删除
     *
     * @param examroomIds
     * @return
     */
    @ApiOperation(value = "删除考场", httpMethod = "GET")
    @ApiImplicitParam(name = "examroomIds", value = "考场ID字符串", required = true, dataType = "String", paramType = "body")
    @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);
@@ -124,32 +124,32 @@
    }
    /**
     * 发布考场
     * 发布考场
     *
     * @param roomIds
     * @return
     */
    @ApiOperation(value = "发布考场", httpMethod = "GET")
    @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 new Result(false, "参数错误");
        }
        return this.examRoomService.doRelease(roomIds.split(","));
    }
    /**
     * 撤回发布的考场
     * 撤回发布的考场
     *
     * @param roomIds
     * @return
     */
    @ApiOperation(value = "撤回考场", httpMethod = "GET")
    @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 new Result(false, "参数错误");
        }
        return this.examRoomService.doCancel(roomIds.split(","));
@@ -157,14 +157,14 @@
    /**
     * 详情页面数据
     * 详情页面数据
     *
     * @param examroomId
     * @return
     */
    @ApiOperation(value = "详情页面数据")
    @ApiOperation(value = "详情页面数据")
    @ApiImplicitParams({
        @ApiImplicitParam(name="roomId", dataType="String", paramType="query", value="考场ID", required=true),
        @ApiImplicitParam(name="roomId", dataType="String", paramType="query", value="考场ID", required=true),
    })
    @RequestMapping(value = "/detail", method = RequestMethod.GET)
    public @ResponseBody Result detail(String examroomId) {
@@ -172,10 +172,10 @@
    }
    /**
     * 查询所有考场的ID和名称
     * 查询所有考场的ID和名称
     * @return
     */
    @ApiOperation(value = "可选择考场ID和名称")
    @ApiOperation(value = "可选择考场ID和名称")
    @RequestMapping(value = "/allExamRoomIdAndNames", method = RequestMethod.GET)
    public @ResponseBody Result listClassRoomIdAndNames() {
        List<Map<String,Object>> listResult =  this.examRoomService.queryAllRoomIdAndNames();
src/main/java/com/qxueyou/scc/controller/FileController.java
@@ -24,11 +24,11 @@
import io.swagger.annotations.ApiOperation;
/**
 * 文件上传控制器
 * 文件上传控制器
 * 
 * @author xiadehu
 */
@Api(tags="文件上传通用接口")
@Api(tags="文件上传通用接口")
@Controller
@RequestMapping(value = "/base/file")
public class FileController {
@@ -39,27 +39,27 @@
    IFileService fileService;
    /**
     * 通用上传接口
     * 通用上传接口
     * 
     * @TODO : 目前缺少对 各模块文件个数、文件格式、文件大小的上传控制,统一增加在configFileModule表里面即可实现 1 图片; 2 文档  3 视频 4 音频
     * @TODO : 目前缺少对 各模块文件个数、文件格式、文件大小的上传控制,统一增加在configFileModule表里面即可实现 1 图片; 2 文档  3 视频 4 音频
     * @param response
     * @return
     */
    @ApiOperation(value="通用上传接口", notes="目前缺少对 各模块文件个数、文件格式、文件大小的上传控制,统一增加在configFileModule表里面即可实现 1 图片; 2 文档  3 视频 4 音频")
    @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.循环取得文件
        // 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
            // 2.从request中取的下一个 MultipartFile
            mpf = request.getFile(itr.next());
            // 2.2 创建一个FileMeta
            // 2.2 创建一个FileMeta
            fileMeta = new FileMeta();
            try {
                Result uploadResult = fileService.doUpload(mpf.getInputStream(), mpf.getOriginalFilename());
@@ -69,7 +69,7 @@
            } catch (Exception e) {
                String desp = e.getMessage();
                desp = desp.length() > 120 ? desp.substring(0, 120) : desp;
                log.error("上传模块解析出错:" + e);
                log.error("上传模块解析出错:" + e);
            }
            fileMeta.setFileName(mpf.getOriginalFilename());
src/main/java/com/qxueyou/scc/controller/IndexController.java
@@ -23,7 +23,7 @@
import org.springframework.web.context.request.ServletRequestAttributes;
/**
 * 后台首页控制器
 * 后台首页控制器
 * 
 * @author xiadehu
 *
src/main/java/com/qxueyou/scc/controller/MsgChatroomMsgCtrl.java
@@ -28,12 +28,12 @@
            String userType) {
        try {
            if (StringUtils.isEmpty(chatroomId) || StringUtils.isEmpty(senderId) || StringUtils.isEmpty(content)) {
                return new Result(false, "参数错误");
                return new Result(false, "参数错误");
            }
            return service.doSendMessage(chatroomId, senderId, imgPath, alias, content, type, userType);
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false, "系统异常");
            return new Result(false, "系统异常");
        }
    }
@@ -44,7 +44,7 @@
            return service.getHistoryMes(chatroomId, pageNum);
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false, "系统异常");
            return new Result(false, "系统异常");
        }
    }
@@ -55,7 +55,7 @@
            return service.latestMsg(chatroomId);
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false, "系统异常");
            return new Result(false, "系统异常");
        }
    }
}
src/main/java/com/qxueyou/scc/controller/MsgInfoController.java
@@ -21,13 +21,13 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@Api(tags="消息管理接口")
@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;
@@ -35,15 +35,15 @@
    IMsgInfoService msgInfoService;
    
    /**
     * 消息列表
     * 消息列表
     */
    @ApiOperation(value = "获取消息列表")
    @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);
@@ -58,48 +58,48 @@
    }
    
    /**
     *  删除消息
     *  删除消息
     * @param msgIds
     * @return
     */
    @ApiOperation(value = "删除消息")
    @ApiOperation(value = "删除消息")
    @RequestMapping(value = "delete", method = RequestMethod.GET)
    public @ResponseBody Result deleteUserMsg(String  msgIds){
        if(StringUtils.isEmpty(msgIds)){
            return new Result(false,"参数错误!");
            return new Result(false,"参数错误!");
        }
        
        return this.msgInfoService.deleteUserMsg(msgIds.split(","));
    }
    /**
     * 清空个人消息
     * 清空个人消息
     * 
     * @return
     */
    @ApiOperation(value = "清空消息")
    @ApiOperation(value = "清空消息")
    @RequestMapping(value = "clear", method = RequestMethod.GET)
    public @ResponseBody Result deleteAllUserMsg(Short type){
        return this.msgInfoService.deleteAllUserMsg(type);
    }
    
    /**
     *  修改已读标志位
     *  修改已读标志位
     * @param msgId
     * @return
     */
    @ApiOperation(value = "更新为已读")
    @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 = "全部更新为已读")
    @ApiOperation(value = "全部更新为已读")
    @RequestMapping(value = "readall", method = RequestMethod.GET)
    public @ResponseBody Result updateAllUserReadFlag(Short type){
        return this.msgInfoService.updateUserAllReadStatus(type);
@@ -107,11 +107,11 @@
    
    
   /**
     *  最近的提醒消息
     *  最近的提醒消息
     * @param msgId
     * @return
     */
   @ApiOperation(value = "最近的一条提醒信息")
   @ApiOperation(value = "最近的一条提醒信息")
   @RequestMapping(value = "last", method = RequestMethod.GET)
   public @ResponseBody Result getLatest(){
       return new Result(true,"",this.msgInfoService.readLastRemindMsg());
@@ -119,22 +119,22 @@
    
   
   /**
     *  最近的提醒消息
     *  最近的提醒消息
     * @param msgId
     * @return
     */
   @ApiOperation(value = "按类型获取未读消息的数量")
   @ApiOperation(value = "按类型获取未读消息的数量")
   @RequestMapping(value = "count", method = RequestMethod.GET)
   public @ResponseBody Result queryUnReadMsgCountByType(){
       return new Result(true,"",this.msgInfoService.queryUnReadMsgCountByType());
   }
   
   /**
     *  查询未读消息总数
     *  查询未读消息总数
     * @param msgId
     * @return
     */
   @ApiOperation(value = "查询用户未读消息总数")
   @ApiOperation(value = "查询用户未读消息总数")
   @RequestMapping(value = "totalcount", method = RequestMethod.GET)
   public @ResponseBody Result queryUnReadTotalCount(){
       return new Result(true,"",CollectionUtils.newObjectMap("totalCount",this.msgInfoService.queryUnReadTotalCount()));
src/main/java/com/qxueyou/scc/controller/NoticeController.java
@@ -31,7 +31,7 @@
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
@Api(tags = "公告接口-教师端")
@Api(tags = "公告接口-教师端")
@RestController
@RequestMapping(value = "/admin/notice")
public class NoticeController {
@@ -49,18 +49,18 @@
    ClassDAO classDao;
    /**
     * 显示 公告列表
     * 显示 公告列表
     *
     * @param keyword
     * @param pageNum
     * @param pageSize
     * @return
     */
    @ApiOperation(value = "公告列表", notes = "获取班级列表及班级所在公告列表")
    @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) {
@@ -91,13 +91,13 @@
    }
    /**
       *   显示 公告管理列表
       *   显示 公告管理列表
     * @param keyword
     * @param pageNum
     * @param pageSize
     * @return
     */
    @ApiOperation(value = "公告管理列表", notes = "")
    @ApiOperation(value = "公告管理列表", notes = "")
    @GetMapping(value = "managerLst")
    public Result managerLst(String keyword, Pager pager, @RequestParam(defaultValue = "desc") String sort) {
        String keyword_ = StringUtils.isBlank(keyword) ? "" : keyword;
@@ -127,23 +127,23 @@
    
    private String getTypeName(String key) {
        Map<String, String> typeMap = new HashMap<>();
        typeMap.put("homework", "作业公告");
        typeMap.put("exam", "考试公告");
        typeMap.put("other", "其他公告");
        typeMap.put("class", "上课公告");
        typeMap.put("homework", "作业公告");
        typeMap.put("exam", "考试公告");
        typeMap.put("other", "其他公告");
        typeMap.put("class", "上课公告");
        
        return typeMap.get(key);
    }
    /**
     * 发布公告/多个id已逗号隔开
     * 发布公告/多个id已逗号隔开
     *
     * @param noticeIds 公告ids
     * @param noticeIds 公告ids
     * @return
     */
    @ApiOperation(value = "发布公告", notes = "多个id已逗号隔开")
    @ApiOperation(value = "发布公告", notes = "多个id已逗号隔开")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "noticeIds", value = "多个id已逗号隔开", required = true, paramType="query", dataType = "String")
        @ApiImplicitParam(name = "noticeIds", value = "多个id已逗号隔开", required = true, paramType="query", dataType = "String")
    })
    @PostMapping(value = "release")
    public Result release(String noticeIds) {
@@ -151,14 +151,14 @@
    }
    /**
     * 取消发布/多个id已逗号隔开
     * 取消发布/多个id已逗号隔开
     *
     * @param noticeIds 公告ids
     * @param noticeIds 公告ids
     * @return
     */
    @ApiOperation(value = "取消发布", notes = "多个id已逗号隔开")
    @ApiOperation(value = "取消发布", notes = "多个id已逗号隔开")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "noticeIds", value = "多个id已逗号隔开", required = true, paramType="query", dataType = "String"),
        @ApiImplicitParam(name = "noticeIds", value = "多个id已逗号隔开", required = true, paramType="query", dataType = "String"),
    })
    @PostMapping(value = "cancel")
    public Result cancel(String noticeIds) {
@@ -166,14 +166,14 @@
    }
    /**
     * 删除 公告/多个id已逗号隔开
     * 删除 公告/多个id已逗号隔开
     *
     * @param noticeIds 公告ids
     * @param noticeIds 公告ids
     * @return
     */
    @ApiOperation(value = "删除公告", notes = "多个id已逗号隔开")
    @ApiOperation(value = "删除公告", notes = "多个id已逗号隔开")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "noticeIds", value = "多个id已逗号隔开", required = true, paramType="query", dataType = "String"),
        @ApiImplicitParam(name = "noticeIds", value = "多个id已逗号隔开", required = true, paramType="query", dataType = "String"),
    })
    @PostMapping(value = "delete")
    public Result delete(String noticeIds) {
@@ -181,7 +181,7 @@
    }
    /**
     * 新增/更新
     * 新增/更新
     *
     * @param noticeId
     * @param name
@@ -191,12 +191,12 @@
     * @param pathUrl
     * @return
     */
    @ApiOperation(value = "新增/更新公告", notes = "noticeId存在则更新,否则新增")
    @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") })
            @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) {
@@ -209,14 +209,14 @@
    }
    /**
     * 获取公告详情
     * 获取公告详情
     *
     * @param noticeId
     * @return
     */
    @ApiOperation(value = "获取公告详情", notes = "")
    @ApiOperation(value = "获取公告详情", notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "noticeId", value = "公告id", required = true, paramType = "query", dataType = "String")
            @ApiImplicitParam(name = "noticeId", value = "公告id", required = true, paramType = "query", dataType = "String")
    })
    @GetMapping(value = "detail")
    public Result detail(String noticeId) {
@@ -241,27 +241,27 @@
        ));
    }
    @ApiOperation(value = "获取班级列表", notes = "")
    @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(
            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(
            return new Result(true, "操作成功", QBeanUtils.listBean2ListMap(clsLst, CollectionUtils.newStringMap(
                    "classId", "classId",
                    "name", "className"
            )));
        }
    }
    @ApiOperation(value = "更新公告查看次数", notes = "")
    @ApiOperation(value = "更新公告查看次数", notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "noticeId", value = "公告id", required = false, paramType = "query", dataType = "String")
            @ApiImplicitParam(name = "noticeId", value = "公告id", required = false, paramType = "query", dataType = "String")
    })
    @GetMapping(value = "view")
    public Result view(String noticeId) {
src/main/java/com/qxueyou/scc/controller/ResController.java
@@ -19,11 +19,11 @@
import java.util.Map;
/**
 * 资源管理控制器
 * 资源管理控制器
 *
 * @author chenjunliang
 */
@Api(tags = "资源管理接口")
@Api(tags = "资源管理接口")
@RestController
@RequestMapping(value = "/teach/res")
public class ResController {
@@ -32,7 +32,7 @@
    IResService resService;
    /**
     * 资源库层级管理Tree
     * 资源库层级管理Tree
     */
    @GetMapping(value = "categoryLevel")
    public Result categoryLevel(String parentId) {
@@ -45,12 +45,12 @@
    }
    /**
     * 资源库根节点
     * 资源库根节点
     *
     * @param type    资源库类型
     *                user,个人资源库
     *                class,班级资源库
     * @param ownerId 资源库所属主体id,个人资源库传userId,班级资源库传classId
     * @param type    资源库类型
     *                user,个人资源库
     *                class,班级资源库
     * @param ownerId 资源库所属主体id,个人资源库传userId,班级资源库传classId
     */
    @GetMapping(value = "rootDir")
    public Result getRoot(String type, String ownerId) {
@@ -66,14 +66,14 @@
    }
    /**
     * 资源管理获取 资源列表
     * 资源管理获取 资源列表
     *
     * @param dirId   Ŀ¼id
     * @param keyword 搜索关键字
     * @param limit   每页显示几条
     * @param pageNum 页码
     * @param type    类型(0,视频。1,音频。2,文档。3,练习。)
     * @return 资源列表数据
     * @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) {
@@ -90,9 +90,9 @@
    }
    /**
     * 资源管理删除 资源
     * 资源管理删除 资源
     *
     * @param id 资源id,英文逗号区分,可传多个
     * @param id 资源id,英文逗号区分,可传多个
     */
    @GetMapping(value = "deleteFile")
    public Result deleteRes(String fileId) {
@@ -100,11 +100,11 @@
    }
    /**
     * 资源管理 复制资源
     * 资源管理 复制资源
     *
     * @param resId 资源id
     * @param dirId Ŀ¼id
     * @param type  类型
     * @param resId 资源id
     * @param dirId 目录id
     * @param type  类型
     */
    @GetMapping(value = "copyRes")
    public Result copyRes(String resId, String dirId, String type) {
@@ -112,11 +112,11 @@
    }
    /**
     * 资源管理 资源的移动
     * 资源管理 资源的移动
     *
     * @param resId 要移动的资源
     * @param type  目录类型
     * @param dirId Ŀ¼id
     * @param resId 要移动的资源
     * @param type  目录类型
     * @param dirId 目录id
     */
    @GetMapping(value = "moveRes")
    public Result moveRes(String resId, String type, String dirId) {
@@ -124,12 +124,12 @@
    }
    /**
     * 资源管理新增or编辑目录
     * 资源管理新增or编辑目录
     *
     * @param dirId     Ŀ¼id
     * @param name      目录名
     * @param type      (add新增 and edit修改)
     * @param childFlag 是否操作下级
     * @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) {
@@ -145,9 +145,9 @@
    }
    /**
     * 资源管理 删除目录
     * 资源管理 删除目录
     *
     * @param dirId Ŀ¼id
     * @param dirId 目录id
     */
    @GetMapping(value = "deleteDir")
    public Result deleteDir(String dirId) {
@@ -155,19 +155,19 @@
    }
    /**
     * 添加/更新(视频,讲义,音频)
     * 添加/更新(视频,讲义,音频)
     *
     * @param dirId    资源夹id
     * @param name     名称
     * @param coverUrl 封面Url
     * @param dirId    资源夹id
     * @param name     名称
     * @param coverUrl 封面Url
     * @param remark:  <p>
     *                 视频啊啊啊
     *                 视频啊啊啊
     *                 </p>
     *                 介绍
     * @param fileId   资源id
     * @param id       资源id
     *                 介绍
     * @param fileId   资源id
     * @param id       资源id
     * @param type
     * @return 状态说明(0, 视频 。 1, 音频 。 2, 文档 。 3, 练习 。)
     * @return 状态说明(0, 视频 。 1, 音频 。 2, 文档 。 3, 练习 。)
     */
    @PostMapping(value = "addOrUpdateRes")
    public Result addOrUpdateRes(String dirId, String id, String remark, String name, String coverUrl, String type,
@@ -181,16 +181,16 @@
    }
    /**
     * 批量添加资源
     * 批量添加资源
     *
     * @param dirId    节点id
     * @param fileId   文件id
     * @param fileName 文件名称
     * @param fileType 资源类型
     * @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到对象
        // 转换json到对象
        ObjectMapper mapper = new ObjectMapper();
        try {
            ResDatas resDatas = mapper.readValue(datas, ResDatas.class);
@@ -202,9 +202,9 @@
    }
    /**
     * 编辑 获取内容
     * 编辑 获取内容
     *
     * @param id 资源id
     * @param id 资源id
     */
    @GetMapping(value = "getResDetail")
    public Result getResDetail(String id) {
src/main/java/com/qxueyou/scc/controller/SchoolRollController.java
@@ -16,11 +16,11 @@
import java.util.List;
/**
 * 学籍管理控制器
 * 学籍管理控制器
 *
 * @author hurenrong
 */
@Api(tags="学籍管理接口")
@Api(tags="学籍管理接口")
@RestController
@RequestMapping("/admin/schoolRoller")
public class SchoolRollController {
@@ -29,14 +29,14 @@
    private ISchoolRollService iSchoolRollService;
    /**
     * 获取正常学员列表
     * 获取正常学员列表
     *
     * @param keyword
     * @param limit
     * @param pageNum
     * @return
     */
    @ApiOperation(value = "获取正学籍列表", notes = "")
    @ApiOperation(value = "获取正学籍列表", notes = "")
    @GetMapping(value = "/schoolList")
    public Result schoolList(@RequestParam(defaultValue = "10") Integer limit, @RequestParam(defaultValue = "1") Integer pageNum,String keyword,String status) {
@@ -52,44 +52,44 @@
    }
    /**
     * 给学员分配班级
     * 给学员分配班级
     *
     * @return
     */
    @ApiOperation(value = "给学员分配班级", notes = "")
    @ApiOperation(value = "给学员分配班级", notes = "")
    @GetMapping(value = "/updateSchoolClass")
    public Result updateSchoolClass(String [] studentIds,String classId) {
        return iSchoolRollService.updateSchool(studentIds, classId);
    }
    /**
     * 审核学员并生成学号
     * 审核学员并生成学号
     *
     * @return
     */
    @ApiOperation(value = "审核学员并生成学号", notes = "")
    @ApiOperation(value = "审核学员并生成学号", notes = "")
    @GetMapping(value = "/auditStudent")
    public Result auditStudent(String studentIds) {
        return iSchoolRollService.loopStudentIds(studentIds.split(","));
    }
    /**
     * 导出学员信息
     * 导出学员信息
     *
     * @return
     */
    @ApiOperation(value = "导出学员信息", notes = "")
    @ApiOperation(value = "导出学员信息", notes = "")
    @GetMapping(value = "/deriveStudentMessage")
    public void deriveStudentMessage(String StudentId,String ClassId) {
        iSchoolRollService.deriveStudentMessage();
    }
    /**
     * 查询班级
     * 查询班级
     *
     * @return
     */
    @ApiOperation(value = "查询班级", notes = "")
    @ApiOperation(value = "查询班级", notes = "")
    @GetMapping(value = "/findClass")
    public Result findClass() {
        List<ClsClass> aClass = iSchoolRollService.findClass();
src/main/java/com/qxueyou/scc/controller/SubjectController.java
@@ -30,12 +30,12 @@
import io.swagger.annotations.ApiOperation;
/**
 * 课程管理控制器
 * 课程管理控制器
 * 
 * @author chenjunliang
 *
 */
@Api(tags = "课程管理-教师端")
@Api(tags = "课程管理-教师端")
@RestController
@RequestMapping(value = "/teach/subject")
public class SubjectController {
@@ -49,46 +49,46 @@
    @Autowired
    private ITeacherService teacherService;
    
    /**-------------------------------------------------------------------app接口------------------------------------------------------------------------------------------**/
    /**-------------------------------------------------------------------app接口------------------------------------------------------------------------------------------**/
    
    /**
     * 课程管理列表
     * 课程管理列表
     * 
     * @param keyword
     *            索搜关键字
     *            索搜关键字
     * @param limit
     *            显示几条
     *            显示几条
     * @param pageNum
     *            当前页码
     *            当前页码
     * @param status
     *            ״̬
     *            状态
     */
    @ApiOperation(value = "获取列表数据-教师端", notes = "")
    @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")
        @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 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) {
@@ -108,16 +108,16 @@
    }
    /**
     * 课程管理列表
     * 课程管理列表
     * 
     * @param keyword
     *            索搜关键字
     *            索搜关键字
     * @param limit
     *            显示几条
     *            显示几条
     * @param pageNum
     *            当前页码
     *            当前页码
     * @param status
     *            ״̬
     *            状态
     */
    @GetMapping(value = "/listAllSimple")
    public Result listAllSimple() {
@@ -129,9 +129,9 @@
    }
    /**
     * 课程发布
     * 课程发布
     * a
     * @param 课程ids
     * @param 课程ids
     */
    @GetMapping(value = "/release")
    public Result release(String subjectIds) {
@@ -141,10 +141,10 @@
    }
    /**
     * 课程下架
     * 课程下架
     * 
     * @param subjectIds
     *            课程ids
     *            课程ids
     */
    @GetMapping(value = "/soldOut")
    public Result soldOut(String subjectIds) {
@@ -152,10 +152,10 @@
    }
    /**
     * 课程删除
     * 课程删除
     * 
     * @param subjectIds
     *            课程ids
     *            课程ids
     */
    @GetMapping(value = "/delete")
    public Result delete(String subjectIds) {
@@ -163,16 +163,16 @@
    }
    /**
     * 复制课程
     * 复制课程
     * 
     * @param subjectId
     *            课程id
     *            课程id
     * @param subjectName
     *            课程名称
     *            课程名称
     * @param imgPath
     *            ͼƬurl
     *            图片url
     * @param content
     *            课程介绍
     *            课程介绍
     */
    @PostMapping(value = "/copy")
    public Result copy(String subjectId, String subjectName, String imgPath, String content,int type) {
@@ -180,14 +180,14 @@
    }
    /**
     * 新增课程
     * 新增课程
     * 
     * @param subjectName
     *            课程名称
     *            课程名称
     * @param imgPath
     *            ͼƬurl
     *            图片url
     * @param content
     *            课程介绍
     *            课程介绍
     * @return
     */
    @PostMapping(value = "/add")
@@ -209,16 +209,16 @@
    }
    /**
     * 新增练习
     * 新增练习
     * 
     * @param name
     *            题目名称
     *            题目名称
     * @param type
     *            题库类型
     *            题库类型
     * @param difficulty
     *            难度系数
     *            难度系数
     * @param repeatFlag
     *            是否重复
     *            是否重复
     * @return
     */
    @PostMapping(value = "addExercise")
@@ -227,16 +227,16 @@
    }
    /**
     * 更新课程
     * 更新课程
     * 
     * @param subjectId
     *            课程id
     *            课程id
     * @param subjectName
     *            课程名称
     *            课程名称
     * @param imgPath
     *            ͼƬurl
     *            图片url
     * @param content
     *            课程介绍
     *            课程介绍
     */
    @PostMapping(value = "/update")
    public Result update(String subjectId, String subjectName, String imgPath, String content,int type) {
@@ -256,14 +256,14 @@
    }
    /**
     * 更新课程获取课程内容
     * 更新课程获取课程内容
     * 
     * @param subjectId
     *            课程id
     *            课程id
     */
    @ApiOperation(value = "获取课程详情-教师端", notes = "")
    @ApiOperation(value = "获取课程详情-教师端", notes = "")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "subjectId", value = "课程id", required = false, paramType="query", dataType = "String")
        @ApiImplicitParam(name = "subjectId", value = "课程id", required = false, paramType="query", dataType = "String")
    })
    @GetMapping(value = "getSubjectDetail")
    public Result getSubjectDetail(String subjectId) {
@@ -288,14 +288,14 @@
    
    
    /**
     * 获取可用课程下拉列表接口
     * 获取可用课程下拉列表接口
     * 
     * @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){
src/main/java/com/qxueyou/scc/controller/TeacherController.java
@@ -18,7 +18,7 @@
import com.qxueyou.scc.user.model.UserTeacher;
/**
 * 教师管理控制器
 * 教师管理控制器
 * 
 * @author chenjunliang
 *
@@ -30,14 +30,14 @@
    private ITeacherService teacherService;
    /**
     * 教师管理显示列表
     * 教师管理显示列表
     * 
     * @param pageSize
     *            每页显示几条
     *            每页显示几条
     * @param pageNum
     *            页码
     *            页码
     * @param keyword
     *            索搜关键字
     *            索搜关键字
     */
    @GetMapping(value = "lstTeacher")
    public Result lstTeacher(String keyword, Integer pageSize, Integer pageNum) {
@@ -55,18 +55,18 @@
    }
    /**
     * 教师管理新增/更新
     * 教师管理新增/更新
     * 
     * @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,
@@ -80,10 +80,10 @@
    }
    /**
     * 教师管理 删除教师
     * 教师管理 删除教师
     * 
     * @param teacherIds
     *            老师ids
     *            老师ids
     */
    @PostMapping(value = "delete")
    public Result deleteTeacher(String teacherIds) {
@@ -91,7 +91,7 @@
    }
    /**
     * 教师管理导出
     * 教师管理导出
     */
    @GetMapping(value = "exportTeacher")
    public Result export(HttpServletResponse response) {
@@ -99,7 +99,7 @@
    }
    /**
     * 教室管理导入
     * 教室管理导入
     */
    @GetMapping(value = "importTeacher")
    public Result importTeacher() {
@@ -107,7 +107,7 @@
    }
    /**
     * 新增班级获取教师列表
     * 新增班级获取教师列表
     */
    @GetMapping(value = "getLstTeacher4Cls")
    public Result getLstTeacher4Cls() {
@@ -117,7 +117,7 @@
    }
    
    /**
     * 新增班级获取教师列表
     * 新增班级获取教师列表
     */
    @GetMapping(value = "getTeacherbyUserId")
    public Result getTeacherbyUserId(String userId) {
src/main/java/com/qxueyou/scc/controller/UserController.java
@@ -21,7 +21,7 @@
import java.util.Map;
/**
 * 角色管理前端控制器
 * 角色管理前端控制器
 * 
 * @author chenjunliang
 *
@@ -39,7 +39,7 @@
    ITeacherService teacherService;
    /**
     * 获取角色列表
     * 获取角色列表
     * 
     * @return
     */
@@ -51,7 +51,7 @@
    }
    /**
     * 获取人员列表
     * 获取人员列表
     */
    @GetMapping(value = "getUserLst")
    public Result getUserLstByRoleId(String roleId, Integer pageSize, Integer pageNum, String keyword) {
@@ -60,10 +60,10 @@
    }
    /**
     * 删除人员
     * 删除人员
     * 
     * @param userid
     *            用户id可以多个 ,分隔
     *            用户id可以多个 ,分隔
     */
    @PostMapping(value = "delete")
    public Result delete(String userId) {
@@ -72,7 +72,7 @@
    }
    /**
     * 新增人员
     * 新增人员
     */
    @PostMapping(value = "add")
    public Result insertUser(String roleId, String name, String account, String password, String mobilePhone) {
@@ -81,10 +81,10 @@
        User user = userService.getUserByAccount(account, ClientUtils.getOrgId());
        if (null != user) {
            return new Result(false,"重复的用户,不允许添加!");
            return new Result(false,"重复的用户,不允许添加!");
        }
        
        //如果角色是老师,添加老师信息
        //如果角色是老师,添加老师信息
        if(roleId.equals(UserRole.ROLE_TEACHER_ID)){
            result= teacherService.add(name, password, mobilePhone, account);
        }else{
@@ -96,7 +96,7 @@
    }
    /**
     * 新增教师
     * 新增教师
     */
    @PostMapping(value = "addTeachers")
    public Result addTeachers(String teacherIds, String roleId) {
@@ -104,7 +104,7 @@
    }
    /**
     * 更新
     * 更新
     */
    @PostMapping(value = "update")
    public Result updateUser(String userId, String name, String account, String password, String mobilePhone) {
@@ -112,7 +112,7 @@
        
        UserTeacher teacher = ClientUtils.isAdmin() ? null : teacherService.getTeacherByUserId(ClientUtils.getUserId());
        
        //如果用户是老师,更新老师信息
        //如果用户是老师,更新老师信息
        if(teacher!=null){
            result = teacherService.update(teacher.getTeacherId(), name, account, password, mobilePhone, account);
        }else{
@@ -123,7 +123,7 @@
    }
    /**
     * 角色管理 显示角色信息
     * 角色管理 显示角色信息
     */
    @GetMapping(value = "queryRoleDetail")
    public Result queryRoleDetail(String roleId) {
@@ -131,7 +131,7 @@
    }
    /**
     * 显示教师列表
     * 显示教师列表
     */
    @GetMapping(value = "findTeacherLst")
    public Result findTeacherLst(String keyword, Integer pageSize, Integer pageNum, String roleId) {
@@ -143,7 +143,7 @@
    }
    /**
     * 修改角色信息
     * 修改角色信息
     */
    @PostMapping(value = "updateRole")
    public Result updateRole(String roleId, String menuIds, String name) {
@@ -151,7 +151,7 @@
    }
    /**
     * 删除角色
     * 删除角色
     */
    @PostMapping(value = "deleteRole")
    public Result deleteRole(String roleId) {
@@ -159,7 +159,7 @@
    }
    /**
     * 获取所有菜单列表
     * 获取所有菜单列表
     */
    @GetMapping(value = "findAllMenuLst")
    public Result findMenuLst() {
@@ -168,7 +168,7 @@
    }
    /**
     * 新增角色
     * 新增角色
     */
    @PostMapping(value = "addRole")
    public Result addRole(String name,Integer roleType) {
src/main/java/com/qxueyou/scc/controller/VideoLiveController.java
@@ -25,13 +25,13 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@Api(tags="直播管理接口")
@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;
    
@@ -48,17 +48,17 @@
    MediaLiveDAO dao;
    
    /**
     * 获取直播列表
     * 获取直播列表
     * 
     * @param keyword
     *            搜索关键字
     *            搜索关键字
     * @param pageNum
     *            页码
     *            页码
     * @param pageSize
     *            页数
     *            页数
     * @return
     */
    @ApiOperation(value = "获取创建人的直播列表")
    @ApiOperation(value = "获取创建人的直播列表")
    @GetMapping(value = "list")
    public Result list(String keyword, Integer pageNum, Integer pageSize) {
        
@@ -83,27 +83,27 @@
    }
    /**
     * 新增直播/更新直播
     * 新增直播/更新直播
     * 
     * @param videoLiveId
     *            直播id(更新的时候才需要传)
     *            直播id(更新的时候才需要传)
     * @param name
     *            直播名称
     *            直播名称
     * @param content
     *            直播介绍
     *            直播介绍
     * @param imgPath
     *            图片地址
     *            图片地址
     * @param startTime
     *            开始时间
     *            开始时间
     * @param endTime
     *            结束时间
     *            结束时间
     * @param isPlayBack
     *            是否回放
     *            是否回放
     * @param classIds
     *            班级id
     *            班级id
     * @return
     */
    @ApiOperation(value = "创建编辑直播")
    @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) {
@@ -115,13 +115,13 @@
    }
    /**
     * 查询直播详情
     * 查询直播详情
     * 
     * @param videoLiveId
     *            直播id
     *            直播id
     * @return
     */
    @ApiOperation(value = "获取直播详情")
    @ApiOperation(value = "获取直播详情")
    @GetMapping(value = "queryDetail")
    public Result detail(String videoLiveId) {
        List<String> lstClassIds = null;
@@ -165,13 +165,13 @@
    }
    /**
     * 发布/多个以逗号隔开
     * 发布/多个以逗号隔开
     * 
     * @param videoLiveIds
     *            直播ids
     *            直播ids
     * @return
     */
    @ApiOperation(value = "发布直播")
    @ApiOperation(value = "发布直播")
    @PostMapping(value = "release")
    public Result release(String videoLiveIds) {
        for(String liveId:videoLiveIds.split(",")) {
@@ -181,13 +181,13 @@
    }
    /**
     * 取消发布/多个以逗号隔开
     * 取消发布/多个以逗号隔开
     * 
     * @param videoLiveIds
     *            直播ids
     *            直播ids
     * @return
     */
    @ApiOperation(value = "取消发布直播")
    @ApiOperation(value = "取消发布直播")
    @PostMapping(value = "cancel")
    public Result cance(String videoLiveIds) {
        
@@ -198,12 +198,12 @@
    }
    /**
     * 删除/多个以逗号隔开
     * 删除/多个以逗号隔开
     * 
     * @param videoLiveId
     * @return
     */
    @ApiOperation(value = "删除创建的直播")
    @ApiOperation(value = "删除创建的直播")
    @PostMapping(value = "delete")
    public Result delete(String videoLiveIds) {
        return liveService.delete(videoLiveIds.split(","));
@@ -211,12 +211,12 @@
    
    
    /**
     * 直播开始
     * 直播开始
     * 
     * @param videoLiveIds
     *            直播id
     *            直播id
     */
    @ApiOperation(value = "直播开始")
    @ApiOperation(value = "直播开始")
    @PostMapping(value = "start")
    public Result start(String videoLiveIds) {
@@ -228,12 +228,12 @@
    
    
    /**
     * 直播暂停
     * 直播暂停
     * 
     * @param videoLiveIds
     *            直播id
     *            直播id
     */
    @ApiOperation(value = "直播暂停")
    @ApiOperation(value = "直播暂停")
    @PostMapping(value = "pause")
    public Result pause(String videoLiveIds) {
        
@@ -244,12 +244,12 @@
    }
    /**
     * 直播结束
     * 直播结束
     * 
     * @param videoLiveId
     *            直播id
     *            直播id
     */
    @ApiOperation(value = "直播结束")
    @ApiOperation(value = "直播结束")
    @PostMapping(value = "stop")
    public Result stop(String videoLiveIds) {
@@ -262,18 +262,18 @@
    
    
    /**
     * 直播点赞
     * 直播点赞
     * 
     * @param videoLiveId
     *            直播id
     *            直播id
     */
    @ApiOperation(value = "直播点赞")
    @ApiOperation(value = "直播点赞")
    @PostMapping(value = "praise")
    public Result praise(String videoLiveId) {
        return liveService.doPraise(videoLiveId);
    }
    
    @ApiOperation(value = "学生端根据班级,课程过滤直播列表")
    @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;
@@ -304,7 +304,7 @@
                ))));
    }
    
    @ApiOperation(value = "直播回放列表")
    @ApiOperation(value = "直播回放列表")
    @GetMapping(value = "replay/list")
    public Result listReplay(String videoLiveId) {
        
@@ -326,7 +326,7 @@
        ))));
    }
    
    @ApiOperation(value = "测试直播回放")
    @ApiOperation(value = "测试直播回放")
    @GetMapping(value = "replay/test")
    public Result testReplay(String liveId) {
        mediaVideoLivePlayBackService.testPlayBack(liveId);
src/main/java/com/qxueyou/scc/courseware/action/CourceCategoryController.java
@@ -37,10 +37,10 @@
import com.qxueyou.scc.school.model.SchHandoutReCourse;
/**
 * 科目类别管理controller
 * 科目类别管理controller
 * 
 * @author 德虎
 * @history 2014-11-25 新建 夏德虎
 * @author 德虎
 * @history 2014-11-25 新建 夏德虎
 *
 */
@Controller
@@ -65,24 +65,24 @@
    ISysBusinessCacheService sysBusinessCacheService ;*/
    /**
     * APP2.0: 课程超市 选课 获取所有分类 <br>
     * APP2.0: 课程超市 选课 获取所有分类 <br>
     * URL /org/courcecategory/courseCatNew<br>
     * 
     * @method GET
     * @return 返回值JSON串:<br>
     * @return 返回值JSON串:<br>
     *
     *         <pre>
     * [{"index":1,"code":"1CKJR","categoryName":"财会金融","categoryId":"18","imgPath":"/web/res/img/app/coursemarket_ico_accounting.png"},
     * [{"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"}]
     * {"index":8,"code":"9QB","categoryName":"全部","categoryId":"26","imgPath":"/web/res/img/app/coursemarket_ico_classify.png"}]
     * </pre>
     *
     *         字段值说明:
     *         字段值说明:
     * 
     *         <pre>
     * index:索引
     * code:编码
     * categoryName:名字
     * index:索引
     * code:编码
     * categoryName:名字
     * categoryId:id
     * imgPath:logo URL
     * </pre>
@@ -94,7 +94,7 @@
        page.setPageNum(1);
        page.setPageSize(Integer.MAX_VALUE);
        // 1. 查询该机构下所有的科目
        // 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);
@@ -144,29 +144,29 @@
    }
    /**
     * APP2.0: 课程超市 所有查询条件 <br>
     * APP2.0: 课程超市 所有查询条件 <br>
     * URL /org/courcecategory/courseCatContitionNew<br>
     * 
     * 返回值JSON串:<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":"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}
     *                 {"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"}]
     * "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>
@@ -179,7 +179,7 @@
    }
    /**
     * APP2.0: 该机构下所有课程的分类和科目 URL: /org/courcecategory/courseCategoryNew
     * APP2.0: 该机构下所有课程的分类和科目 URL: /org/courcecategory/courseCategoryNew
     * 
     * @return
     */
@@ -187,27 +187,27 @@
    @RequestMapping(value = "courseCategoryNew", method = RequestMethod.GET)
    public @ResponseBody List<OrgCourseCategory> getCourseCategoryData() {
        // 1. 查询该机构下所有的科目
        // 1. 查询该机构下所有的科目
        String hql = "select courseId,name,price,imgPath,courseCategoryId " + " from OrgCourse c where c.deleteFlag is false";
        // 2. 查询该机构下所有的科目对应的类别
        // 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:表示游客班
        // 如果是游客班 查所有机构 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. 查询该机构下所有的科目
        // 1. 查询该机构下所有的科目
        List<OrgCollegeCourse> lstCourse = categoryService.queryOrgCourseListNew(hql, args);
        // 2. 查询该机构下所有的科目对应的类别
        // 2. 查询该机构下所有的科目对应的类别
        List<OrgCourseCategory> lstCategory = categoryService.queryOrgCourseCategoryList(hql_type, args);
        // 组装结构
        // 组装结构
        List<OrgCollegeCourse> newLstCourse = null;
        for (OrgCourseCategory category : lstCategory) {
            newLstCourse = new ArrayList<OrgCollegeCourse>();
@@ -218,19 +218,19 @@
            }
            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("不限");
        category.setCategoryName("不限");
        List<OrgCollegeCourse> lstLastCourse = new ArrayList<OrgCollegeCourse>();
        OrgCollegeCourse course = new OrgCollegeCourse();
        course.setCourseId(not_limit);
        course.setName("不限");
        course.setName("不限");
        lstLastCategory.add(category);
        lstLastCategory.addAll(lstCategory);
@@ -238,7 +238,7 @@
        for (OrgCourseCategory cate : lstLastCategory) {
            lstLastCourse = new ArrayList<OrgCollegeCourse>();
            lstLastCourse.add(course);
            if (not_limit.equals(cate.getCategoryId())) {// 不限
            if (not_limit.equals(cate.getCategoryId())) {// 不限
                lstLastCourse.addAll(lstCourse);
            } else {
                lstLastCourse.addAll(cate.getCourseList());
@@ -250,10 +250,10 @@
        return lstLastCategory;
    }
    /******************************************************************* 上面为App接口,下面为后台接口 **************************/
    /******************************************************************* 上面为App接口,下面为后台接口 **************************/
    /**
     * 科目类别列表
     * 科目类别列表
     * 
     * @return
     */
@@ -265,7 +265,7 @@
    }
    /**
     * 根据科目ID查询科目
     * 根据科目ID查询科目
     * 
     * @return
     */
@@ -276,7 +276,7 @@
    }
    /**
     * 新增
     * 新增
     * 
     * @return
     */
@@ -287,7 +287,7 @@
    }
    /**
     * 删除
     * 删除
     * 
     * @return
     */
@@ -298,7 +298,7 @@
    }
    /**
     * 更新
     * 更新
     * 
     * @return
     */
@@ -309,7 +309,7 @@
    }
    /**
     * 新增类别层级
     * 新增类别层级
     * 
     * @return
     */
@@ -325,12 +325,12 @@
            return result;
        }
        
        return new Result(false,"参数错误");
        return new Result(false,"参数错误");
        
    }
    /**
     * 类别层级数据
     * 类别层级数据
     * 
     * @return
     */
@@ -355,7 +355,7 @@
            if(null == orgCollegeCourse){
                continue;
            }
            //去除掉不content内容
            //去除掉不content内容
            orgCollegeCourse.setContent("");
    
            if(null == map.get(orgCollegeCourse.getCourseCategoryId())){
@@ -374,7 +374,7 @@
    }
    
    /**
     * 视频类别层级数据
     * 视频类别层级数据
     * 
     * @return
     */
@@ -384,7 +384,7 @@
    }
    
    /**
     * 讲义类别层级数据
     * 讲义类别层级数据
     * 
     * @return
     */
@@ -394,7 +394,7 @@
    }
    
    /**
     * 练习类别层级数据
     * 练习类别层级数据
     * 
     * @return
     */
@@ -404,7 +404,7 @@
    }
    
    /**
     * 讲义类别层级数据
     * 讲义类别层级数据
     * 
     * @return
     */
@@ -414,8 +414,8 @@
    }
    
    /**
     * 查询视频讲义练习在各个科目下的数量
     * @param type 1:视频 2:讲义 3:练习
     * 查询视频讲义练习在各个科目下的数量
     * @param type 1:视频 2:讲义 3:练习
     * @return
     */
    @SuppressWarnings("unchecked")
@@ -470,7 +470,7 @@
    }
    /**
     * ztree层级数据
     * ztree层级数据
     * 
     * @return
     *//*
@@ -482,7 +482,7 @@
    }
    
    *//**
     * ztree层级数据
     * ztree层级数据
     * 
     * @return
     *//*
@@ -494,7 +494,7 @@
    }*/
    /**
     * 查询
     * 查询
     * 
     * @return
     */
@@ -506,7 +506,7 @@
    }
    
    /**
     * 查询专业信息
     * 查询专业信息
     * 
     * @return
     */
@@ -556,7 +556,7 @@
    }
    /**
     * 获取机构名字
     * 获取机构名字
     * 
     * @return
     */
@@ -568,7 +568,7 @@
    }
    /**
     * 删除科目
     * 删除科目
     * 
     * @return
     */
@@ -579,7 +579,7 @@
    }
    /**
     * 删除专业
     * 删除专业
     * 
     * @return
     */
@@ -590,7 +590,7 @@
    }
    /**
     * 3初始化科目
     * 3初始化科目
     * 
     * @return
     */
@@ -651,18 +651,18 @@
            
            i++;
        }
        return new Result(true,"总共有"+lstCourse.size()+",初始化了"+i+"条");
        return new Result(true,"总共有"+lstCourse.size()+",初始化了"+i+"条");
    }
    
    /**
     * 2先初始化课件数据,再初始化上面的科目
     * 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);
@@ -677,7 +677,7 @@
            commonService.save(course);
            i++;
        }
        //讲义
        //讲义
        int y = 0;
        hql = " from SchHandoutReCourse where deleteFlag is false";
        List<SchHandoutReCourse> handouts = commonDAO.find(hql, SchHandoutReCourse.class);
@@ -692,7 +692,7 @@
            commonService.save(course);
            y++;
        }
        //练习
        //练习
        int z = 0;
        hql = " from ExerciseReCourse where deleteFlag is false";
        List<ExerciseReCourse> exers = commonDAO.find(hql, ExerciseReCourse.class);
@@ -707,11 +707,11 @@
            commonService.save(course);
            z++;
        }
        return new Result(true,"视频总共"+videos.size()+"个,成功了"+i+"个"+"讲义总共"+handouts.size()+"个,成功了"+y+"个"+"练习总共"+exers.size()+"个,成功了"+z+"个");
        return new Result(true,"视频总共"+videos.size()+"个,成功了"+i+"个"+"讲义总共"+handouts.size()+"个,成功了"+y+"个"+"练习总共"+exers.size()+"个,成功了"+z+"个");
    }
    
    /**
     * 1初始化班级 机构ID
     * 1初始化班级 机构ID
     * 
     * @return
     */
@@ -736,11 +736,11 @@
            commonService.save(orgClass);
            i++;
        }
        return new Result(true,"班级总共"+ocs.size()+",成功了"+i+"个");
        return new Result(true,"班级总共"+ocs.size()+",成功了"+i+"个");
    }
    
    /**
     * 初始化levelCode
     * 初始化levelCode
     * 
     * @return
     */
@@ -834,8 +834,8 @@
    @SuppressWarnings("unused")
    private String generateLevelCode(String name) {
        // 转拼音
        //使用微软自带中文输入法用鼠标翻页,选择第一页之后的数据时,会生成(li'zhi.dr)这种账号
        // 转拼音
        //使用微软自带中文输入法用鼠标翻页,选择第一页之后的数据时,会生成(li'zhi.dr)这种账号
        String[] arrUnidecode = WordProcessUtils.toPinyin(name.replace(" ",""), " ").replaceAll("'", "").split(" ");
        
        String orgCode = "";
src/main/java/com/qxueyou/scc/courseware/action/CourceController.java
@@ -22,10 +22,10 @@
import com.qxueyou.scc.org.model.OrgCourse;
/**
 * 科目管理controller
 * 科目管理controller
 * 
 * @author 德虎
 * @history 2014-11-25 新建 夏德虎
 * @author 德虎
 * @history 2014-11-25 新建 夏德虎
 * 
 */
@Controller
@@ -49,10 +49,10 @@
    private ICourseService service;
    
    /**
     * APP2.0: 查询科目内容
     * APP2.0: 查询科目内容
     * URL:    /org/cource/queryCourseNew/{courseId}
     * 
     * @param courseId   科目ID
     * @param courseId   科目ID
     * @return
     */
    @RequestMapping(value = "queryCourseNew/{courseId}", method = RequestMethod.GET)
@@ -61,7 +61,7 @@
        OrgCollegeCourse course = commonDAO.read(OrgCollegeCourse.class, courseId);
        
//        // 如果是游客班      1:表示游客班
//        // 如果是游客班      1:表示游客班
//        if(orgClassService.isCurrentVistorClass()){
//            //Organization org = course.getOrg();
//            Organization org = commonDAO.read(Organization.class, course.getTopOrgId());
@@ -73,7 +73,7 @@
    }
    /**
     * APP2.0: 推荐课程
     * APP2.0: 推荐课程
     * URL:    /org/cource/recommendCourseNew
     * 
     * @return
@@ -82,12 +82,12 @@
    public @ResponseBody
    List<OrgCollegeCourse> recommendCourse() {
        // 1. 查询该机构下推荐课程 只取前三个
        // 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:表示游客班
        // 如果是游客班  查所有机构     1:表示游客班
//        if(!orgClassService.isCurrentVistorClass()){
//             hql += " and c.org.organizationId=?";
//             args = CollectionUtils.newList(ClientUtils.getOrgId());
@@ -100,7 +100,7 @@
            return lstCourse;
        }
        // 只取前三项数据
        // 只取前三项数据
        List<OrgCollegeCourse> lstResultCourse = new ArrayList<OrgCollegeCourse>();
        int count = lstCourse.size() >= 3 ? 3 : lstCourse.size();
        for (int i = 0; i < count; i++) {
@@ -110,10 +110,10 @@
        return lstResultCourse;
    }
    
    /******************************************************************* 上面为App接口,下面为后台接口 **************************/
    /******************************************************************* 上面为App接口,下面为后台接口 **************************/
    /**
     * 科目列表
     * 科目列表
     * 
     * @return
     */
@@ -123,7 +123,7 @@
    }
    /**
     * 获取列表数据
     * 获取列表数据
     * 
     * @return
     */
@@ -136,7 +136,7 @@
    }
    /**
     * 根据科目ID查询科目
     * 根据科目ID查询科目
     * 
     * @return
     */
@@ -147,7 +147,7 @@
    }
    /**
     * 专业编辑 - 选择科目类别后加载专业列表
     * 专业编辑 - 选择科目类别后加载专业列表
     * 
     * @return
     */
@@ -161,7 +161,7 @@
    }
    
    /**
     * 新增
     * 新增
     * 
     * @return
     */
@@ -174,7 +174,7 @@
    }
    /**
     * 编辑
     * 编辑
     * 
     * @return
     */
@@ -185,7 +185,7 @@
    }
    /**
     * 删除
     * 删除
     * 
     * @return
     */
@@ -193,13 +193,13 @@
    public @ResponseBody
    Result delete(String courseIds) {
        // 保存到服务器
        // 保存到服务器
        return orgCourseService.deleteCourses(courseIds.split(","));
    }
    
    /**
     * 推荐
     * 推荐
     * 
     * @return
     */
@@ -207,13 +207,13 @@
    public @ResponseBody
    Result recommend(String courseIds) {
        // 保存到服务器
        // 保存到服务器
        return orgCourseService.doRecommend(courseIds.split(","));
    }
    
    /**
     * 取消推荐
     * 取消推荐
     * 
     * @return
     */
@@ -221,13 +221,13 @@
    public @ResponseBody
    Result unrecommend(String courseIds) {
        // 保存到服务器
        // 保存到服务器
        return orgCourseService.doUnRecommend(courseIds.split(","));
    }
    /**
     * 更新
     * 更新
     * 
     * @return
     */
@@ -238,7 +238,7 @@
    }
    /**
     * 科目介绍预览
     * 科目介绍预览
     * @param orgClass
     * @param mobilePhone
     * @return
@@ -250,7 +250,7 @@
    
    
    /**
     * 查询所有机构项目
     * 查询所有机构项目
     * @return
     */
    @RequestMapping(value="/allCourseName",method=RequestMethod.GET)
src/main/java/com/qxueyou/scc/courseware/service/ICourceCategoryService.java
@@ -10,7 +10,7 @@
public interface ICourceCategoryService {
    /**
     * 查询科目list  根据条件
     * 查询科目list  根据条件
     * @param hql
     * @param args
     * @return
@@ -18,7 +18,7 @@
    List<OrgCollegeCourse> queryOrgCourseList(String hql, List<Object> args);
    
    /**
     * 查询科目list  根据条件
     * 查询科目list  根据条件
     * @param hql
     * @param args
     * @return
@@ -26,7 +26,7 @@
    List<OrgCollegeCourse> queryOrgCourseListNew(String hql, List<Object> args);
    
    /**
     * 查询科目类型list  根据条件
     * 查询科目类型list  根据条件
     * @param hql
     * @param args
     * @return
@@ -34,7 +34,7 @@
    List<OrgCourseCategory> queryOrgCourseCategoryList(String hql, List<Object> args);
    
    /**
     * 组装   全部课程    所有查询条件
     * 组装   全部课程    所有查询条件
     * @return
     * @version 2.0
     */
@@ -47,7 +47,7 @@
    Result doDeleteCourse(String id);
    
    /**
     * 新增科目
     * 新增科目
     * @param id
     * @param name
     * @param code
src/main/java/com/qxueyou/scc/courseware/service/ICourseService.java
@@ -6,38 +6,38 @@
import com.qxueyou.scc.base.model.Result;
/**
 * 项目服务接口
 * @author 岩龙
 * 项目服务接口
 * @author 岩龙
 * @createtime 2017-10-31
 */
public interface ICourseService {
    /**
     * 查询科目类别
     * @param categoryId 当前目录id
     * 查询科目类别
     * @param categoryId 当前目录id
     * @return
     */
    public List<Map<String, Object>> queryCategoryList() ;
    
    /**
     * 添加科目类别
     * @param parentId 父节点id
     * @param catalogName 目录名
     * 添加科目类别
     * @param parentId 父节点id
     * @param catalogName 目录名
     * @return
     */
    public Result insertCourseCategory(String parentId,String catalogName);
    
    /**
     * 修改科目类别
     * @param categoryId  类别id
     * @param categoryName 类别名
     * 修改科目类别
     * @param categoryId  类别id
     * @param categoryName 类别名
     * @return
     */
    public Result updateCourseCategory(String categoryId,String categoryName);
    
    /**
     * 删除科目类别
     * @param categoryId 当前目录id
     * 删除科目类别
     * @param categoryId 当前目录id
     * @return
     */
    public Result deleteCategory(String categoryId) ;
@@ -45,88 +45,88 @@
    
    
    /**
     * 查询项目
     * @param categoryId 类别id
     * 查询项目
     * @param categoryId 类别id
     * @return
     */
    public List<Map<String, Object>> queryCourse(String categoryId) ;
    
    /**
     * 添加项目
     * @param categoryId 科目类别id
     * @param courseName 项目名
     * 添加项目
     * @param categoryId 科目类别id
     * @param courseName 项目名
     * @return
     */
    public Result insertCourse(String categoryId,String courseName);
    
    /**
     * 修改项目
     * @param courseId 项目id
     * @param courseName 项目名
     * 修改项目
     * @param courseId 项目id
     * @param courseName 项目名
     * @return
     */
    public Result updateCourse(String courseId,String courseName);
    
    /**
     * 删除项目
     * @param courseId  项目id
     * 删除项目
     * @param courseId  项目id
     * @return
     */
    public Result deleteCourse(String courseId);
    
    
    /**
     * 查询课程
     * @param courseId 项目id
     * 查询课程
     * @param courseId 项目id
     * @return
     */
    public List<Map<String, Object>> querySubject(String courseId);
    
    
    /**
     * 添加课程
     * @param courseId 项目id
     * @param subjectName 课程名
     * 添加课程
     * @param courseId 项目id
     * @param subjectName 课程名
     * @return
     */
    public Result insertSubject(String courseId,String subjectName);
    
    /**
     *  修改课程
     * @param subjectId 课程id
     * @param subjectName 课程名
     *  修改课程
     * @param subjectId 课程id
     * @param subjectName 课程名
     * @return
     */
    public Result updateSubject(String subjectId,String subjectName);
    
    /**
     * 删除课程
     * @param subjectId  课程id
     * 删除课程
     * @param subjectId  课程id
     * @return
     */
    public Result deleteSubject(String subjectId);
    
    
    /**
     * 查询章
     * @param subjectId 课程Id
     * 查询章
     * @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
     * 添加章节
     * @param subjectId 课程Id
     * @param chapterName 父章节Id
     * @param chapterName 章节名称
     * @param courseId 项目Id
     * @return
     */
    public Result insertChapter(String subjectId,String chapterId,String chapterName,String courseId);
@@ -134,29 +134,29 @@
    
    
    /**
     * 修改章节
     * @param chapterId 章节id
     * @param chapterName 章节名称
     * 修改章节
     * @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
@@ -164,7 +164,7 @@
    public Result deleteNode(String id, String type);
    
    /**
     * pc端显示项目名称
     * pc端显示项目名称
     * @return
     */
    List<Map<String, Object>> findclassNameByCourse(String mode);
src/main/java/com/qxueyou/scc/courseware/service/IOrgCourseService.java
@@ -10,7 +10,7 @@
public interface IOrgCourseService {
    
    /**
     * 后台  科目列表
     * 后台  科目列表
     * @param sql
     * @param args
     * @return
@@ -18,42 +18,42 @@
    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
     */
src/main/java/com/qxueyou/scc/courseware/service/impl/CourceCategoryAppService.java
@@ -39,7 +39,7 @@
    private OrgDAO orgDAO;
    
    /**
     * IHandoutService服务
     * IHandoutService服务
     */
    @Autowired
    IHandoutService handoutService;
@@ -52,7 +52,7 @@
    }
    /**
     * 依赖注入
     * 依赖注入
     *
     * @param commonDAO
     */
@@ -79,7 +79,7 @@
    }
    
    /**
     * 组装   全部课程    所有查询条件
     * 组装   全部课程    所有查询条件
     * 
     * @return
     * @version 2.0
@@ -88,7 +88,7 @@
        
        Map<String,Object> result = new HashMap<String,Object>(3);
        
        // 1.课程分类
        // 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);
@@ -98,7 +98,7 @@
                CollectionUtils.newList(OrgCourseCategory.CATEGORY_LEVEL_SECOND,Organization.ORG_TYPE_DEGREE_EDUCATION) , OrgCourseCategory.class);
        
        
        // 1.1 第二层
        // 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())){
@@ -108,7 +108,7 @@
            }
        }
        
        // 组装的数据格式
        // 组装的数据格式
        Map<String,Object> sMap;
        List<Map<String,Object>> lstS ;
        
@@ -118,7 +118,7 @@
        int fIndex = 0; 
        int sIndex = 0; 
        
        // 循环
        // 循环
        for(OrgCourseCategory first : lstFirstCategory){
            
            fIndex = fIndex + 1 ;
@@ -132,7 +132,7 @@
            fMap.put("code", first.getCode());
            fMap.put("parentId", null);
            
            // 第二层
            // 第二层
            if(null != secondMap.get(first.getCategoryId()) ){
                for(OrgCourseCategory second : secondMap.get(first.getCategoryId())){
                    
@@ -155,7 +155,7 @@
        
        result.put("course", lstF);
        
        // 2.排序
        // 2.排序
        List<Map<String,Object>> lstSort = new ArrayList<Map<String,Object>>(5);
        Map<String,Object> sort;
        
@@ -171,7 +171,7 @@
        }
        result.put("sort", lstSort);
        
        // 3.地区
        // 3.地区
        List<Map<String,Object>> lstCity = new ArrayList<Map<String,Object>>(6);
        Map<String,Object> city;
        
@@ -194,7 +194,7 @@
    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);
@@ -203,7 +203,7 @@
            result.setData(ocl);
            return result;
        }
        //增加同级
        //增加同级
        if("add".equals(type)){
            OrgCategoryLevel ocl0 = read(OrgCategoryLevel.class, id);
            OrgCategoryLevel ocl = new OrgCategoryLevel();
@@ -223,7 +223,7 @@
            return result;
        }
        
        //增加下级
        //增加下级
        if("addNext".equals(type)){
            OrgCategoryLevel parent = read(OrgCategoryLevel.class, id);
            OrgCategoryLevel ocl = new OrgCategoryLevel();
@@ -242,7 +242,7 @@
            return result;
        }
        
        return new Result(false,"参数错误");
        return new Result(false,"参数错误");
        
    
    }
@@ -254,11 +254,11 @@
        OrgCategoryLevel origCateLevel ;
        //BeanUtils.copyProperties(ocl, origCateLevel);
        if(parent==null){
            // 首层:直接生成
            // 首层:直接生成
            levelCode = UUIDUtils.generateUUID();
            origLevelCode = levelCode;
        }else{
            // 下层:根据parent生成
            // 下层:根据parent生成
            levelCode = parent.getLevelCode()+"00";
        }
        do {
@@ -267,10 +267,10 @@
                origCateLevel = new OrgCategoryLevel();
                BeanUtils.copyProperties(ocl ,  origCateLevel);
                if(parent==null){ // 首层:直接生成
                if(parent==null){ // 首层:直接生成
                    origCateLevel.setLevel(BigDecimal.ONE.shortValue());
                    origCateLevel.setLevelCode(levelCode+"_00");
                }else{ // 下层:根据parent生成
                }else{ // 下层:根据parent生成
                    origCateLevel.setLevel(new BigDecimal(parent.getLevel()).add(BigDecimal.ONE).shortValue());
                    origCateLevel.setLevelCode(levelCode);
                }
@@ -286,10 +286,10 @@
                
                loop++;
                if(parent==null){
                    // 首层:直接生成
                    // 首层:直接生成
                    levelCode = origLevelCode.concat(String.valueOf(loop));
                }else{
                    // 下层:根据parent生成
                    // 下层:根据parent生成
                    String h = String.valueOf(loop);
                    if(loop<10){
                        h = "0"+loop;
@@ -307,8 +307,8 @@
    @SuppressWarnings("unused")
    private String generateLevelCode(String name) {
        // 转拼音
        //使用微软自带中文输入法用鼠标翻页,选择第一页之后的数据时,会生成(li'zhi.dr)这种账号
        // 转拼音
        //使用微软自带中文输入法用鼠标翻页,选择第一页之后的数据时,会生成(li'zhi.dr)这种账号
        String[] arrUnidecode = WordProcessUtils.toPinyin(name," ").replaceAll("'", "").split(" ");
        
        String orgCode = "";
@@ -344,7 +344,7 @@
            
        }
        if(flag){
            return new Result(false,"该分类下的科目下存在班级,请先删除班级");
            return new Result(false,"该分类下的科目下存在班级,请先删除班级");
        }
        for (OrgCategoryLevel orgCategoryLevel : lstCate) {
            hql = " from OrgCollegeCourse where deleteFlag is false and courseCategoryId = ?";
@@ -364,13 +364,13 @@
        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,"该科目下存在班级,请先删除班级");
            return new Result(false,"该科目下存在班级,请先删除班级");
        }
        //删除所有视频
        //删除所有视频
        doDeleteVideo(id);
        //删除所有练习
        //删除所有练习
        doDeleteExe(id);
        //删除所有讲义
        //删除所有讲义
        doDeleteHandout(id);
        
        hql = " from OrgCollegeCourse where deleteFlag is false and collegeCourseId = ?";
@@ -418,7 +418,7 @@
    }
    
    /**
     * 新增科目
     * 新增科目
     * @param id
     * @param name
     * @param code
@@ -428,7 +428,7 @@
    @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);
@@ -437,7 +437,7 @@
            result.setData(ocl);
            return result;
        }
        //增加同级
        //增加同级
        if("add".equals(type)){
            OrgCategoryLevel ocl0 = this.read(OrgCategoryLevel.class, id);
            OrgCategoryLevel ocl = new OrgCategoryLevel();
@@ -451,11 +451,11 @@
            OrgCategoryLevel parent = this.read(OrgCategoryLevel.class, ocl0.getParentId());
            TraceUtils.setCreateTrace(ocl);
            
            result.setData(insertOcl(ocl,parent,name));//插入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();
src/main/java/com/qxueyou/scc/courseware/service/impl/CourseService.java
@@ -20,9 +20,9 @@
import com.qxueyou.scc.teach.subject.model.SubjectChapter;
/**
 * 项目服务类
 * 项目服务类
 * 
 * @author 岩龙
 * @author 岩龙
 * @createtime 2017-10-31
 */
@Service
@@ -216,10 +216,10 @@
    public Result deleteChapter(String chapterId) {
        this.bulkUpdate("update SchChapter set deleteFlag is true where chapterId=?", new Object[] { chapterId });
        return new Result(true, "操作成功!");
        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";
@@ -227,7 +227,7 @@
        return findListWithMapByHql(hql, null);
    }
    // PC端首页显示有过班级的项目名称
    // 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 ";
@@ -245,7 +245,7 @@
    }
    /**
     * 删除科目下的项目
     * 删除科目下的项目
     * 
     * @param categoryId
     * @return
@@ -264,7 +264,7 @@
    }
    /**
     * 删除项目下的课程
     * 删除项目下的课程
     * 
     * @param courseId
     * @return
@@ -283,7 +283,7 @@
    }
    /**
     * 删除节
     * 删除节
     * 
     * @param chapterId
     * @return
@@ -304,7 +304,7 @@
    }
    /**
     * 删除树节点
     * 删除树节点
     */
    public Result deleteNode(String id, String type) {
        if (type.equals("category")) {
src/main/java/com/qxueyou/scc/courseware/service/impl/OrgCourseService.java
@@ -37,7 +37,7 @@
    }
    
    /**
     * 依赖注入
     * 依赖注入
     *
     * @param lessonDAO
     */
@@ -47,7 +47,7 @@
    }
    
    /**
     * 后台  科目列表
     * 后台  科目列表
     * @param sql
     * @param args
     * @return
@@ -73,7 +73,7 @@
    @Override
    public Result insertCourse(OrgCollegeCourse course) {
        if(StringUtils.isNotBlank(course.getCollegeCourseId())){ // 编辑
        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) {
@@ -92,7 +92,7 @@
            dbCourse.setRecommend(course.isRecommend());
            dbCourse.setTeacher(course.getTeacher());
            dbCourse.setCourseId(course.getCourseId());
            dbCourse.setCode(course.getName());//增加设置code
            dbCourse.setCode(course.getName());//增加设置code
            TraceUtils.setUpdateTrace(dbCourse);
            Result result = save(dbCourse);
            result.setMsg(course.getCollegeCourseId());
@@ -111,7 +111,7 @@
            return result;
        }
        
        // 设置基本信息
        // 设置基本信息
        TraceUtils.setCreateTrace(course);
        course.setDeleteFlag(false);
@@ -138,7 +138,7 @@
    @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) {
@@ -158,7 +158,7 @@
        dbCourse.setRecommend(course.isRecommend());
        dbCourse.setTeacher(course.getTeacher());
        dbCourse.setCourseId(course.getCourseId());
        //增加设置code
        //增加设置code
        dbCourse.setCode(course.getName());
        TraceUtils.setUpdateTrace(dbCourse);
        Result result = save(dbCourse);
@@ -180,18 +180,18 @@
    }
    /**
     * 专业编辑 - 选择科目类别后加载专业列表
     * 专业编辑 - 选择科目类别后加载专业列表
     * 
     * @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
        // 过滤掉courseID
        String courseIds = "";
        for (int i = 0; i < orgCollLst.size(); i++) {
            
@@ -202,11 +202,11 @@
            
        }
        
        // 根据选择的科目ID查询专业ID
        // 根据选择的科目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())){
@@ -230,7 +230,7 @@
                "update OrgCollegeCourse set deleteFlag = true where collegeCourseId = ?",
                courseIds);
        
        //发送消息异步维护科目关联关系
        //发送消息异步维护科目关联关系
        for(String courseId:courseIds){
//            sendUpdateCourseRelationMsg(courseId);
        }
src/main/java/com/qxueyou/scc/evaluate/action/EvaluateTemplateController.java
@@ -18,7 +18,7 @@
import com.qxueyou.scc.school.model.SchEvaluateTemplate;
/**
 * 评分模板控制器,基本和练习一致
 * 评分模板控制器,基本和练习一致
 * @author Ody.yuan
 *
 */
@@ -35,7 +35,7 @@
    private IEvaluateTemplateService evaluateTemplateService;
    
    /**
     * 评估模板主页
     * 评估模板主页
     * 
     * @return
     */
@@ -45,8 +45,8 @@
    }
    
    /**
     * 后台
     * 评估模板列表,获取列表数据
     * 后台
     * 评估模板列表,获取列表数据
     * 
     * @return
     */
@@ -62,7 +62,7 @@
    }
    
    /**
     * 删除评估模板
     * 删除评估模板
     * 
     * @return
     */
@@ -72,13 +72,13 @@
    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 new Result(false, "有问卷正在使用此模板,不能删除!");
        }
        return evaluateTemplateService.deleteEvaluateTemplate(groupId,templateId);
    }
    
    /**
     * 查询模板是否添加了问卷
     * 查询模板是否添加了问卷
     * 
     * @param templateId
     * @return
@@ -92,7 +92,7 @@
    
    
    /**
     * 获取评分标准
     * 获取评分标准
     * 
     * @return
     */
@@ -107,7 +107,7 @@
    }
    
    /**
     * 获取评分标准
     * 获取评分标准
     * 
     * @return
     */
@@ -122,7 +122,7 @@
    }
    
    /**
     * 编辑模板
     * 编辑模板
     * 
     * @param evaluateTemplateId
     * @return
src/main/java/com/qxueyou/scc/evaluate/dao/EvaluateRepository.java
@@ -1,17 +1,17 @@
package com.qxueyou.scc.evaluate.dao;
import org.springframework.stereotype.Repository;
        import org.springframework.stereotype.Repository;
import com.qxueyou.scc.base.service.IBaseJpaRepository;
import com.qxueyou.scc.school.model.SchEvaluate;
        import com.qxueyou.scc.base.service.IBaseJpaRepository;
        import com.qxueyou.scc.school.model.SchEvaluate;
/**
 * 评估
 * ����
 * @author zhiyong
 *
 */
@Repository
public interface EvaluateRepository extends IBaseJpaRepository<SchEvaluate>{
}
src/main/java/com/qxueyou/scc/evaluate/service/IEvaluateService.java
@@ -10,7 +10,7 @@
public interface IEvaluateService {
    
    /**
     * 查询列表数据
     * 查询列表数据
     * @param pageNum
     * @param pageSize
     * @return
@@ -18,58 +18,58 @@
    ResultJson queryList(Integer pageNum, Integer pageSize, String keyword, String sort);
    
    /**
     * 获取范围选择
     * 获取范围选择
     * 
     * type:   lesson:课程  class:班级     person:人员
     * 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
@@ -78,7 +78,7 @@
    ResultJson queryEvaluateDetail(String evaluateId,String groupId);
    
    /**
     * 查询问卷统计
     * 查询问卷统计
     * @param groupId
     * @param evaluateId
     * @return
@@ -86,7 +86,7 @@
    ResultJson queryEvaluateStatis(String groupId,String evaluateId);
    
    /**
     * 微信端提交答案
     * 微信端提交答案
     * @param score
     * @return
     */
@@ -94,27 +94,27 @@
    
    
    /**
     * 查询学生评估list
     * 查询学生评估list
     * @return
     */
    ResultJson queryStuEvaluateList(Pager pager);
    
    
    /**
     * 获取评估题目(新接口)
     * 获取评估题目(新接口)
     * @param templateId
     * @return
     */
    ResultJson doGetEvalExerItemResponseDataNew(String evaluateId);
    
    /**
     * 查询学生评估count
     * 查询学生评估count
     * @return
     */
    public Map<String, Object> queryStuEvaluateCount();
    
    /**
     * 更新评估表记录
     * 更新评估表记录
     * @return
     */
    public SchEvaluate updateEvaluateCount(String evaluateId);
src/main/java/com/qxueyou/scc/evaluate/service/IEvaluateTemplateService.java
@@ -8,7 +8,7 @@
public interface IEvaluateTemplateService {
    
    /**
     * 新增评估模板
     * 新增评估模板
     * @param name
     * @return
     */
@@ -16,7 +16,7 @@
    
    
    /**
     * 删除评估模板
     * 删除评估模板
     * @param ids
     * @param templateId
     * @return
@@ -24,7 +24,7 @@
    public abstract Result deleteEvaluateTemplate(String ids,String templateId);
    
    /**
     * 增加评分标准
     * 增加评分标准
     * @param exerciseId
     * @param type
     * @param lstScore
@@ -33,8 +33,8 @@
    public abstract Result insertExerciseScore(String exerciseId,short type,List<String> lstScore,String scoreAnswer, String exerciseItemScoreId);
    
    /**
     * 批量删除ExerciseGroup,删除逻辑
     * @param groupId 主键,
     * 批量删除ExerciseGroup,删除逻辑
     * @param groupId 主键,
     * @return
     */
    public  Result deleteExerciseGroup(String groupId);
src/main/java/com/qxueyou/scc/evaluate/service/impl/EvaluateService.java
@@ -85,7 +85,7 @@
    IMsgInfoService msgInfoService;
    /**
     * 查询列表数据
     * 查询列表数据
     * @param pageNum
     * @param pageSize
     * @return
@@ -98,10 +98,10 @@
        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)
@@ -117,7 +117,7 @@
            .orderBy(qEva.createTime.desc())
            .fetchResults();
        
        // 封装参数
        // 封装参数
        List<Map<String,Object>> resultLst = 
                results.getResults()
                .stream()
@@ -135,9 +135,9 @@
                    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("evaluateCount",  this.getEvaluateCount(tuple.get(qEva).getEvaluateId()));//已评估人数
                    map.put("evaluateAllCount",  this
                            .queryEvaluateAllCount(tuple.get(qEva).getEvalRangeType(), tuple.get(qEva).getEvalRangeId().split(",")));//应评估人数
                            .queryEvaluateAllCount(tuple.get(qEva).getEvalRangeType(), tuple.get(qEva).getEvalRangeId().split(",")));//应评估人数
                    return map;
                }).collect(Collectors.toList());
        
@@ -147,9 +147,9 @@
    }
    /**
     * 获取范围选择
     * 获取范围选择
     * 
     * type:   lesson:课程  class:班级     person:人员
     * type:   lesson:课程  class:班级     person:人员
     * 
     * @return
     */
@@ -157,18 +157,18 @@
    public ResultJson queryRangeList(String type,String searchName) {
        
        List<Tuple> tupleLst = null;
        // 搜索名
        // 搜索名
        searchName = StringUtils.isBlank(searchName) ? null : "%"+searchName+"%";
        
        if(ClientUtils.isAdmin()){// 管理员
        if(ClientUtils.isAdmin()){// 管理员
            
            tupleLst = getAdminRangeList(type,searchName);
        }else{// 老师
        }else{// 老师
            
            tupleLst = getTeacherRangeList(type,searchName);
        }
        
        // 统一处理返回数据
        // 统一处理返回数据
        List<Map<String,Object>> resultLst = tupleLst.stream()
                .map(tuple -> {
                    Map<String,Object> map = new HashMap<String,Object>(2);
@@ -181,7 +181,7 @@
    }
    /**
     * 获取管理员范围选择
     * 获取管理员范围选择
     * @param type
     * @return
     */
@@ -191,7 +191,7 @@
        QUser user = QUser.user;
        List<Tuple> tupleLst = null;
        
        if(SchEvaluate.EVALUATE_RANGE_LESSON.equals(type)){//课程
        if(SchEvaluate.EVALUATE_RANGE_LESSON.equals(type)){//课程
            
            tupleLst = this.getQueryFactory().select(subject.name.as("name"),subject.subjectId.as("id")).distinct()
                .from(subject)
@@ -202,7 +202,7 @@
                .orderBy(subject.createTime.desc())
                .fetch();
            
        }else if(SchEvaluate.EVALUATE_RANGE_CLASS.equals(type)){//班级
        }else if(SchEvaluate.EVALUATE_RANGE_CLASS.equals(type)){//班级
            
            tupleLst = this.getQueryFactory().select(cls.name.as("name"),cls.classId.as("id")).distinct()
                    .from(cls)
@@ -212,7 +212,7 @@
                            .build())
                    .orderBy(cls.createTime.desc())
                    .fetch();
        }else if(SchEvaluate.EVALUATE_RANGE_PERSON.equals(type)){//人员
        }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()
@@ -230,7 +230,7 @@
    }
    
    /**
     *     获取老师范围选择
     *     获取老师范围选择
     * @param type
     * @return
     */
@@ -242,7 +242,7 @@
        List<Tuple> tupleLst = null;
        String teacherId =  teacherService.getTeacherIdByUserId(ClientUtils.getUserId());
        
        if(SchEvaluate.EVALUATE_RANGE_LESSON.equals(type)){//课程
        if(SchEvaluate.EVALUATE_RANGE_LESSON.equals(type)){//课程
            
            tupleLst = this.getQueryFactory().select(subject.name.as("name"),subject.subjectId.as("id")).distinct()
                    .from(subject)
@@ -254,7 +254,7 @@
                    .orderBy(subject.createTime.desc())
                    .fetch();
            
        }else if(SchEvaluate.EVALUATE_RANGE_CLASS.equals(type)){//班级
        }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)
@@ -270,7 +270,7 @@
                    .orderBy(subject.createTime.desc())
                    .fetch();
            
        }else if(SchEvaluate.EVALUATE_RANGE_PERSON.equals(type)){//人员
        }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()
@@ -297,7 +297,7 @@
    }
    /**
     * 后台新增评估
     * 后台新增评估
     * @param eva
     * @return
     */
@@ -305,12 +305,12 @@
    public ResultJson addOrUpdateEvaluate(SchEvaluate eva) {
        String evaluateId = eva.getEvaluateId();
        String groupId = null;
        if(StringUtils.isBlank(evaluateId)){// 新增
            //1、插入组
        if(StringUtils.isBlank(evaluateId)){// 新增
            //1、插入组
            ExerciseGroup obj = this.insertExerciseGroup(eva.getEvaluateName(),
                    ExerciseGroup.TYPE_EXERCISE_TEACH_EVALUATE);
            
            //2、插入评估模板
            //2、插入评估模板
            SchEvaluateTemplate objTemplate = new SchEvaluateTemplate();
            TraceUtils.setCreateTrace(objTemplate);
            objTemplate.setEvaluateTemplateName(eva.getEvaluateName());
@@ -320,7 +320,7 @@
            objTemplate.setOrgName(ClientUtils.getOrgName());
            this.save(objTemplate);
            
            // 3、插入评估表
            // 3、插入评估表
            eva.setEvalTemplateId(objTemplate.getEvaluateTemplateId());
            eva.setEvalTemplateName(objTemplate.getEvaluateTemplateName());
            eva.setEvaluateCount(BigInteger.ZERO);
@@ -332,7 +332,7 @@
            
            evaluateId = eva.getEvaluateId();
            groupId = obj.getGroupId();
        }else{// 编辑
        }else{// 编辑
            SchEvaluate newEva = this.read(SchEvaluate.class, eva.getEvaluateId());
            
            newEva.setEvaluateName(eva.getEvaluateName());
@@ -349,7 +349,7 @@
    }
    
    /**
     * :后台 插入评估模板时调用
     * :后台 插入评估模板时调用
     * 
     * @param name
     * @param type
@@ -366,12 +366,12 @@
        obj.setAllCount(BigInteger.ZERO);
        this.save(obj);
        // 保存
        // 保存
        return obj;
    }
    /**
     * 查询基本信息
     * 查询基本信息
     */
    @Override
    public ResultJson queryBaseInfo(String evaluateId) {
@@ -381,7 +381,7 @@
        QSchEvaluateTemplate template = QSchEvaluateTemplate.schEvaluateTemplate;
        QExerciseGroup group = QExerciseGroup.exerciseGroup;
        
        // 获取查询结果集合
        // 获取查询结果集合
        ExerciseGroup g = this.getQueryFactory()
            .select(group)
            .from(qEva, template, group)
@@ -407,7 +407,7 @@
    }
    
    /**
     * 删除
     * 删除
     */
    @Override
    public ResultJson delete(String evaluateIds){
@@ -423,7 +423,7 @@
    }
    
    /**
     * 激活
     * 激活
     */
    @Override
    public ResultJson doActive(String evaluateIds){
@@ -446,7 +446,7 @@
        return new ResultJson(true, "success");
    }
    
    //发布消息
    //发布消息
    private void doSendhMsg(String evaluateId){
        SchEvaluate  evaluate = this.read(SchEvaluate.class,evaluateId);
        
@@ -462,12 +462,12 @@
            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);
            msgInfoService.doSendTextMsgToUsersLoop(lstUserIds, MsgInfo.TYPE_EVALUATE, "发布了问卷调查", attrs);
        }
    }
    
    /**
     *回退
     *回退
     */
    @Override
    public ResultJson doWithdraw(String evaluateIds){
@@ -483,7 +483,7 @@
    }
    
    /**
     * 复制
     * 复制
     */
    @Override
    public ResultJson doCopy(SchEvaluate eva){
@@ -491,10 +491,10 @@
            SchEvaluate schEva = evaRepository.getOne(eva.getEvaluateId());
            SchEvaluateTemplate oldTemplate = this.read(SchEvaluateTemplate.class, schEva.getEvalTemplateId());
            
            // 1、生成习题组
            // 1、生成习题组
            String newGroupId = exerciseService.doCopyExerciseByEvaluate(oldTemplate.getGroupId());
            
            // 2、生成模板
            // 2、生成模板
            SchEvaluateTemplate newTemplate = new SchEvaluateTemplate();
            
            BeanUtils.copyProperties(newTemplate, oldTemplate);
@@ -503,7 +503,7 @@
            TraceUtils.setCreateTrace(newTemplate);
            this.save(newTemplate);
        
            // 3、生成评估表
            // 3、生成评估表
            SchEvaluate newEva = new SchEvaluate();
            BeanUtils.copyProperties(newEva, eva);
            newEva.setEvaluateId(null);
@@ -519,14 +519,14 @@
            return new ResultJson(true, "success", CollectionUtils.newObjectMap("evaluateId", newEva.getEvaluateId(), "groupId", newGroupId));
            
        } catch (Exception e) {
            log.error("doCopy评估复制:复制练习BeanUtils.copyProperties()方法copy失败", e);
            log.error("doCopy评估复制:复制练习BeanUtils.copyProperties()方法copy失败", e);
        }
        
        return new ResultJson(false);
    }
    
    /**
     *  查看结果  问卷整体情况
     *  查看结果  问卷整体情况
     * @param evaluateId
     * @param groupId
     * @param evalRangeType
@@ -535,16 +535,16 @@
    @Override
    public ResultJson queryEvaluateDetail(String evaluateId,String groupId){
        
        // 1、查询已提交问卷list
        // 1、查询已提交问卷list
        List<Map<String, Object>> answerUserLst = queryAnswerEvaLst(evaluateId);
        
        // 已经答题过的学员id
        // 已经答题过的学员id
        List<String> userAnswerList = new ArrayList<String>(answerUserLst.size());
        for(Map<String,Object> map:answerUserLst){
            userAnswerList.add(String.valueOf(map.get("userId")));
        }
        
        // 2、查询未提交答案list
        // 2、查询未提交答案list
        List<Map<String,Object>> notAnswerUserLst = this.queryNotAnswerEvaLst(evaluateId, userAnswerList);
        
        
@@ -554,7 +554,7 @@
    }
    /**
     *  查询已答题的学员list
     *  查询已答题的学员list
     * @param evaluateId
     * @return
     */
@@ -584,7 +584,7 @@
    }
    
    /**
     * 查询未答题的学员list
     * 查询未答题的学员list
     * @param rangeType
     * @param evalRangeIds
     * @param userAnswerList
@@ -601,22 +601,22 @@
        QSubject qSubject = QSubject.subject;
        
        Predicate predicate = null;
        if(SchEvaluate.EVALUATE_RANGE_LESSON.equals(rangeType)){//课程
        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)){//班级
        }else if(SchEvaluate.EVALUATE_RANGE_CLASS.equals(rangeType)){//班级
            
            predicate = stu.classId.in(evalRangeIds);
        }else if(SchEvaluate.EVALUATE_RANGE_PERSON.equals(rangeType)){//人员
        }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)// 过滤掉已经答题过的学员
                .where(stu.userId.notIn(userAnswerList)// 过滤掉已经答题过的学员
                        .and(stu.deleteFlag.eq(false))
                        .and(predicate))
                .orderBy(stu.createTime.desc())
@@ -635,10 +635,10 @@
    }
    
    
    /**  ------前端       ---------------------------start------------------------------------------------------------------ */
    /**  ------前端       ---------------------------start------------------------------------------------------------------ */
    
    /**
     * 提交答案
     * 提交答案
     * @param score
     * @return
     */
@@ -648,37 +648,37 @@
        List<TeachEvaScoreData> lstScore = scoreResult.getItems();
        String evaluateId = scoreResult.getEvaluateId();
        
        // 1.操作ExerciseRecord做题记录
        // 1.操作ExerciseRecord做题记录
        ExerciseRecord record = this.doOperExerciseRecord(scoreResult);
        
        if(null == record){
            return new ResultJson(false,"您已经提交,不能重复提交");
            return new ResultJson(false,"您已经提交,不能重复提交");
        }
        String exerciseRecordId = record.getRecordId();
        
        if(!scoreResult.getItems().isEmpty()){
            // 2.记录练习答案  ExerciseItemAnswerU
            // 2.记录练习答案  ExerciseItemAnswerU
            this.doOperExerciseItemAnswerUBatch(lstScore, exerciseRecordId);
        }
        
        // 3.插入评估记录关联表
        // 3.插入评估记录关联表
        this.doOperSchEvaRecordRe(exerciseRecordId, evaluateId);
        
        // 4.更新评估表的完成人数
        // 4.更新评估表的完成人数
        SchEvaluate eval = this.updateEvaluateCount(evaluateId);
        
        if(!scoreResult.getItems().isEmpty()){
            // 5.插入评估明细表
            // 5.插入评估明细表
            this.insertEvaluateDetailBatch(lstScore,evaluateId);
        }
        
        return new ResultJson(true, "操作成功",
        return new ResultJson(true, "操作成功",
                CollectionUtils.newObjectMap("doNumber", eval.getEvaluateCount(), "recordId", exerciseRecordId));
    }
    
    
    /**
     * 操作本次做题记录
     * 操作本次做题记录
     * @return
     */
    public ExerciseRecord doOperExerciseRecord(TeachEvaScoreResult scoreResult) {
@@ -694,14 +694,14 @@
        
        String doCount = String.valueOf(scoreResult.getItems().size());
        
        // 2.查询总题目数
        // 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
        // 3.查询做题记录obj
        BigDecimal completionRate =  ExerciseUtils.parseStrToBigDecimal(doCount, String.valueOf(allCount));
        
        ExerciseRecord record = new ExerciseRecord();
@@ -721,14 +721,14 @@
    }
    
    /**
     * 批量增加或修改练习记录答案
     * 批量增加或修改练习记录答案
     * @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())){
@@ -745,14 +745,14 @@
            lstNewAnswerU.add(answerU);
        }
        
        // 批量保存
        // 批量保存
        this.saveOrUpdateAll(lstNewAnswerU);
        
        return new Result(true);
    }
    
    /**
     * 批量增加或修改评估明细记录
     * 批量增加或修改评估明细记录
     * @return
     */
    public Result insertEvaluateDetailBatch(List<TeachEvaScoreData> lstScore,String evaluateId) {
@@ -793,14 +793,14 @@
            lstDetail.add(record);
        }
        
        // 批量保存
        // 批量保存
        this.saveOrUpdateAll(lstDetail);
        
        return new Result(true);
    }
    
    /**
     * 新增评估与记录关联表
     * 新增评估与记录关联表
     * @param groupId
     * @return 
     */
@@ -818,7 +818,7 @@
        SchEvaRecordRe record = new SchEvaRecordRe();
        record.setEvaluateId(evaluateId);
        record.setExerciseRecordId(recordId);
        //记录答题所在班级
        //记录答题所在班级
        if(null != ClientUtils.getUserInfo()){
            record.setClassId(ClientUtils.getClassId());
            record.setOrgId(ClientUtils.getOrgId());
@@ -830,7 +830,7 @@
    }
    
    /**
     * 更新评估表记录
     * 更新评估表记录
     * @return
     */
    public SchEvaluate updateEvaluateCount(String evaluateId) {
@@ -844,14 +844,14 @@
        record.setEvaluateCount(BigInteger.valueOf(this.getEvaluateCount(evaluateId)));
        TraceUtils.setUpdateTrace(record);
        
        // 保存
        // 保存
        this.save(record);
        
        return record;
    }
    
    /**
     * 查询问卷统计
     * 查询问卷统计
     * @param groupId
     * @param evaluateId
     * @return
@@ -888,16 +888,16 @@
                    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);
        
@@ -905,7 +905,7 @@
    }
    
    /**
     * 查询应评估人数
     * 查询应评估人数
     * @param rangeType
     * @param evalRangeIds
     * @return
@@ -917,15 +917,15 @@
        QSubject qSubject = QSubject.subject;
        
        Predicate predicate = null;
        if(SchEvaluate.EVALUATE_RANGE_LESSON.equals(rangeType)){//课程
        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)){//班级
        }else if(SchEvaluate.EVALUATE_RANGE_CLASS.equals(rangeType)){//班级
            
            predicate = stu.classId.in(evalRangeIds);
        }else if(SchEvaluate.EVALUATE_RANGE_PERSON.equals(rangeType)){//人员
        }else if(SchEvaluate.EVALUATE_RANGE_PERSON.equals(rangeType)){//人员
            
            return evalRangeIds.length;
        }
@@ -939,7 +939,7 @@
    }
    
    /**
     * 获取问卷答卷人数
     * 获取问卷答卷人数
     * 
     * @param schEvaluateId
     * @param classId
@@ -960,7 +960,7 @@
    }
    /**
     * 查询学生评估list
     * 查询学生评估list
     * @return
     */
    @Override
@@ -999,7 +999,7 @@
    }
    
    /**
     * 查询学生评估count
     * 查询学生评估count
     * @return
     */
    @Override
@@ -1026,7 +1026,7 @@
    }
    /**
     * 获取评估题目
     * 获取评估题目
     * @param templateId
     * @param status
     * @param exerciseRecordId
@@ -1038,7 +1038,7 @@
                + "where t.evaluateTemplateId=e.evalTemplateId and e.evaluateId=?", 
                CollectionUtils.newList(evaluateId),String.class);
        
        // 2.查找评估组下所有对应的练习
        // 2.查找评估组下所有对应的练习
        String hql_item = "select item"
                + " from ExerciseItem item, ExerciseGroupItemRe re, ExerciseGroup g"
                + " where item.exerciseId=re.exerciseItemId "
@@ -1051,9 +1051,9 @@
                
        List<ExerciseItem> lstItems = this.find(hql_item, CollectionUtils.newList(groupId), ExerciseItem.class);
        if(lstItems.isEmpty()){
            return new ResultJson(false,"当前评估未添加题目");
            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 = ?",
@@ -1062,7 +1062,7 @@
            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.组装参数 用于查询问卷选项图片
        // 2.1.组装参数 用于查询问卷选项图片
        Map<String, Object> argsImgMap = new HashMap<String, Object>();
        String argImgs = "";
        Map<String, Object> argsMap = new HashMap<String, Object>();
@@ -1082,20 +1082,20 @@
        }
        argsMap.put("exerciseIds", args);
        argsImgMap.put("optionIds", argImgs.split(";"));
        // 2-3-1查询题目是否关联图片
        // 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查询题目选项是否关联图片
        // 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题目中是否有图片
            // 4.5题目中是否有图片
            if(imgItemMap.get(item.getExerciseId()) != null){
                item.setImgs(imgItemMap.get(item.getExerciseId()));
            }
src/main/java/com/qxueyou/scc/evaluate/service/impl/EvaluateTemplateService.java
@@ -29,15 +29,15 @@
    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());
@@ -64,7 +64,7 @@
    
    
    /**
     * 删除评估模板
     * 删除评估模板
     * @param ids
     * @param templateId
     * @return
@@ -83,16 +83,16 @@
    }
    
    /**
     * 批量删除ExerciseGroup,删除逻辑:修改评估模板的同时修改习题组和练习题
     * @param groupId 主键,多个id时以","分隔
     * 批量删除ExerciseGroup,删除逻辑:修改评估模板的同时修改习题组和练习题
     * @param groupId 主键,多个id时以","分隔
     * @return
     */
    @Override
    public Result deleteExerciseGroup(String groupId) {
        
        //逻辑删除,只需要修改exercise_group、exercise_item的删除标识即可
        //逻辑删除,只需要修改exercise_group、exercise_item的删除标识即可
        if(StringUtils.isNotBlank(groupId)){
            //需要删除的练习组
            //需要删除的练习组
            Object[] arrGroupId = groupId.split(",");
        
            String exeGroupHql = " from ExerciseGroup where groupId in (:groupId) ";
@@ -102,20 +102,20 @@
            
            List<ExerciseGroup> exeGroupList = this.findByComplexHql(exeGroupHql, groupIdMap, ExerciseGroup.class);
            
            //删除习题组
            //删除习题组
            if(exeGroupList != null){
                for(ExerciseGroup group : exeGroupList){
                    group.setDeleteFlag(true);
                }
            }
            //20150618:配合前台app,所有修改同时修改group表最后修改时间
            //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);
@@ -128,7 +128,7 @@
    }
    
    /**
     * 所有练习修改操作需要同时修改group的updateTime
     * 所有练习修改操作需要同时修改group的updateTime
     * @param lstGroup
     */
    private void updateGroupUpdateTimeByList(List<ExerciseGroup> lstGroup){
@@ -141,7 +141,7 @@
    }
    
    /**
     * 增加评分标准
     * 增加评分标准
     * @param exerciseId
     * @param type
     * @param lstScore
src/main/java/com/qxueyou/scc/exam/action/ExamBatchController.java
@@ -29,11 +29,11 @@
 * @history 2018-03-11 create kevin
 *
 */
@Api(tags="考试批次管理接口")
@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;
@@ -48,21 +48,21 @@
    IExamBatchService examBatchService;
    /**
     * 考试批次列表
     * 考试批次列表
     * */
    @ApiOperation(value = "考试批次列表")
    @ApiOperation(value = "考试批次列表")
    @ApiImplicitParams({
        @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试id", required=false),
        @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赋值
        // page赋值
        pager.setTotalCount(totalCount);
        pager.setPageSize(pageSize!=null&&pageSize>0?pageSize:DEFAULT_PAGE_SIZE);
        pager.setPageNum (pageNum!=null&&pageNum>0?pageNum:DEFAULT_PAGE_NUM);
@@ -75,7 +75,7 @@
    }
    /**
     * 详情页面数据
     * 详情页面数据
     * @param examBatchId
     * @return
     */
@@ -86,7 +86,7 @@
        return result;
    }
    /**
     * 获取批次
     * 获取批次
     * @param
     * @return
     */
@@ -98,7 +98,7 @@
        return result;
    }
    /**
     * 获取批次
     * 获取批次
     * @param
     * @return
     */
@@ -110,7 +110,7 @@
        return result;
    }
    /**
     * 获取批次
     * 获取批次
     * @param
     * @return
     */
@@ -125,7 +125,7 @@
    /**
     * 保存
     * 保存
     * @param
     * @return
     */
@@ -143,7 +143,7 @@
    }
    /**
     * 删除
     * 删除
     * @param examBatchIds
     * @return
     */
src/main/java/com/qxueyou/scc/exam/action/ExamController.java
@@ -60,18 +60,18 @@
 * @history 2018-03-11 create kevin
 *
 */
@Api(tags = "考试管理接口")
@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
@@ -103,14 +103,14 @@
    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);
@@ -125,7 +125,7 @@
        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;
@@ -164,13 +164,13 @@
    private String getExamProgressStatus(List<ExamBatchInfo> lstBatchInfos){
        if(lstBatchInfos == null ||lstBatchInfos.size()==0){
            return "已结束";
            return "已结束";
        }
        String progressStatus="待开始";
        String progressStatus="待开始";
        Date now = new Date();
        //根据开始时间倒序
        //根据开始时间倒序
        lstBatchInfos.sort(new Comparator<ExamBatchInfo>(){
            @Override
            public int compare(ExamBatchInfo o1, ExamBatchInfo o2) {
@@ -178,13 +178,13 @@
            }
        });
            //如果所有批次都小于当前时间,则已结束,如果有一个批次正在进行中,则进行中
            //如果所有批次都小于当前时间,则已结束,如果有一个批次正在进行中,则进行中
        if(lstBatchInfos.get(0).getEndTime().getTime()<now.getTime()){
            progressStatus="已结束";
            progressStatus="已结束";
        }else{
            for(ExamBatchInfo f : lstBatchInfos){
                if(f.getStartTime().getTime()<=now.getTime() && f.getEndTime().getTime()>=now.getTime()){
                    progressStatus = "进行中";
                    progressStatus = "进行中";
                    break;
                }
            }
@@ -194,22 +194,22 @@
    /**
     * 教师查看考试成绩列表
     * 教师查看考试成绩列表
     *
     * @return
     */
    @ApiOperation(value = "老师查看学生考试结果列表")
    @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),
        @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());
@@ -229,7 +229,7 @@
        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 ? "否" : "是");
                    .compareTo((BigDecimal)map.get("passingScore")) == -1 ? "否" : "是");
            rank++;
        }
@@ -237,23 +237,23 @@
    }
    /**
     * 详情页面数据
     * 详情页面数据
     *
     * @param examId
     * @return
     */
    @ApiOperation(value = "详情页面数据")
    @ApiOperation(value = "详情页面数据")
    @ApiImplicitParams({
        @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试id", required=true),
        @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标记")
    @ApiOperation(value = "获取补考考试,根据maxLateMin标记")
    @ApiImplicitParams({
//        @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试id", required=true),
//        @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试id", required=true),
    })
    @RequestMapping(value = "/getReExam", method = RequestMethod.GET)
    public @ResponseBody Result getReExam() {
@@ -261,7 +261,7 @@
    }
    /**
     * 保存
     * 保存
     *
     * @param examInfo
     * @return
@@ -280,20 +280,20 @@
    }
    /**
     * 保存
     * 保存
     * @param
     * @return
     */
    @RequestMapping(value = "/saveRemedy", method = RequestMethod.POST)
    public @ResponseBody Result saveRemedy(@RequestBody ExamBatchInfo examBatchInfo) {
        Result result = null;
        //获取考试ID
        //获取考试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));
@@ -301,13 +301,13 @@
    }
    /**
     * 删除
     * 删除
     *
     * @param examIds
     * @return
     */
    @ApiOperation(value = "删除考试", notes = "根据传入的考试ID字符串参数进行删除(多个ID以逗号分割, 如:examId1,examId2)", httpMethod = "GET")
    @ApiImplicitParam(name = "examIds", value = "考试ID字符串", required = true, dataType = "String", paramType = "body")
    @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);
@@ -318,7 +318,7 @@
    }
   /**
     * 设置考试题目
     * 设置考试题目
     *
     * @param examInfo
     * @return
@@ -329,7 +329,7 @@
    }
    /**
     * 发布考试
     * 发布考试
     *
     * @param
     * @return
@@ -337,13 +337,13 @@
    @RequestMapping(value = "/publish", method = RequestMethod.GET)
    public @ResponseBody Result publishExam(String examIds) {
        if (StringUtils.isEmpty(examIds)) {
            return new Result(false, "参数错误");
            return new Result(false, "参数错误");
        }
        return this.examService.doPublishExam(examIds.split(","));
    }
    /**
     * 撤回考试
     * 撤回考试
     *
     * @param
     * @return
@@ -351,22 +351,22 @@
    @RequestMapping(value = "/revoke", method = RequestMethod.GET)
    public @ResponseBody Result revokeExam(String examIds) {
        if (StringUtils.isEmpty(examIds)) {
            return new Result(false, "参数错误");
            return new Result(false, "参数错误");
        }
        return this.examService.doRevokeExam(examIds.split(","));
    }
    /**
     * 学生考试信息列表
     * 学生考试信息列表
     *
     * @return
     */
    @ApiOperation(value = "学生考试信息列表")
    @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),
        @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) {
@@ -402,17 +402,17 @@
        return new Result(true,"",CollectionUtils.newObjectMap("stuExams",listResult,"examCount",totalCount));
    }
    /**
     * 学生考试信息列表
     * 学生考试信息列表
     *
     * @return
     */
    @ApiOperation(value = "学生考试信息列表")
    @ApiOperation(value = "学生考试信息列表")
    @ApiImplicitParams({
        @ApiImplicitParam(name="classId", dataType="String", paramType="query", value="班级id"),
        @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};
@@ -437,14 +437,14 @@
        return new Result(true,"",CollectionUtils.newObjectMap("stuExams",listResult!=null && listResult.size()>0?listResult.get(0):null));
    }
    @ApiOperation(value = "学生考试信息列表")
    @ApiOperation(value = "学生考试信息列表")
    @ApiImplicitParams({
        @ApiImplicitParam(name="examBatchId", dataType="String", paramType="query", value="班级id"),
        @ApiImplicitParam(name="classId", dataType="String", paramType="query", value="班级id")
        @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()),
@@ -454,13 +454,13 @@
    }
    /**
     * 学生考试信息列表
     * 学生考试信息列表
     *
     * @return
     */
    @ApiOperation(value = "学生考试信息列表")
    @ApiOperation(value = "学生考试信息列表")
    @ApiImplicitParams({
        @ApiImplicitParam(name="classId", dataType="String", paramType="query", value="班级id"),
        @ApiImplicitParam(name="classId", dataType="String", paramType="query", value="班级id"),
    })
    @RequestMapping(value = "/student/stuMessage", method = RequestMethod.GET)
    public @ResponseBody Result queryStudent() {
@@ -469,21 +469,21 @@
    }
    /**
     * 根据考试批次ID获取考试题目信息
     * 根据考试批次ID获取考试题目信息
     *
     * @param examBatchId
     * @return
     */
    @ApiOperation(value = "学生开始考试接口")
    @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)
        @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, "参数错误,班级,考试批次不能为空");
            return new Result(false, "参数错误,班级,考试批次不能为空");
        }
        Result result = this.examService.doStartExam(examBatchId,classId,StringUtils.isNotEmpty(studentUserId)?studentUserId:ClientUtils.getUserId());
@@ -496,9 +496,9 @@
        return result;
    }
    @ApiOperation(value = "学生开始补考接口")
    @ApiOperation(value = "学生开始补考接口")
    @ApiImplicitParams({
        @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试批次id", required=true),
        @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试批次id", required=true),
    })
    @RequestMapping(value = "/student/startReExam", method = RequestMethod.GET)
    public @ResponseBody Result doStartReExam(String examId) {
@@ -511,9 +511,9 @@
        }
        return result;
    }
    @ApiOperation(value = "学生补考记录")
    @ApiOperation(value = "学生补考记录")
    @ApiImplicitParams({
//        @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试批次id", required=true),
//        @ApiImplicitParam(name="examId", dataType="String", paramType="query", value="考试批次id", required=true),
    })
    @RequestMapping(value = "/student/getReExamRecordList", method = RequestMethod.GET)
    public @ResponseBody Result getReExamRecordList() {
@@ -526,20 +526,20 @@
            });
            return reExamRecordList;
        }
        return new Result(false,"没有设置补考");
        return new Result(false,"没有设置补考");
    }
    @ApiOperation(value = "学生考试详情")
    @ApiImplicitParams({@ApiImplicitParam(name="examBatchId", dataType="String", paramType="query", value="考试批次id", required=true)})
    @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(
@@ -548,55 +548,55 @@
        return new Result(true,"",CollectionUtils.newObjectMap("examInfo",examInfo,"paperStatistic",paperStatistic));
    }
    @ApiOperation(value = "提交考试答案")
    @ApiImplicitParams({@ApiImplicitParam(name="answers", dataType="String", paramType="query", value="提交答案", required=true)})
    @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));
            // 记录提交的数据日志
            // 提交试卷答案
            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, "提交考试答案请求异常");
//            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)})
    @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
            // 提交记录id
            recordId = answerData.getExerciseRecordId();
            // 提交试卷答案
            result = new Result(true, "答案提交成功",exerciseVerService.doOperExerciseAnswerData(answerData));
            // 记录提交的数据日志
            // 提交试卷答案
            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, "提交练习答案请求异常");
            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 = "查询学生考试凭证")
    @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) {
@@ -604,7 +604,7 @@
        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为空,则获取考试对应的所有批次
        // 如果examBatchId为空,则获取考试对应的所有批次
        if (StringUtils.isNotEmpty(examBatchId)) {
            hql.append(" and f.examBatchId=:examBatchId");
            queryParams.put("examBatchId", examBatchId);
@@ -614,16 +614,16 @@
        }
        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));
            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赋值
        // page赋值
        Pager page = new Pager();
        page.setTotalCount(totalCount);
        page.setPageSize(pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE);
@@ -638,16 +638,16 @@
    }
    /**
     * 学生考试信息列表
     * 学生考试信息列表
     *
     * @return
     */
    @ApiOperation(value = "生成学生考试凭证")
    @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为空,则获取考试对应的所有批次
        // 如果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)) {
@@ -660,12 +660,12 @@
        List<String> classLst =this.commonDAO.findByComplexHql(hql, queryParams, String.class);
        //如果不存在关联的班级信息,则直接返回
        //如果不存在关联的班级信息,则直接返回
        if (classLst == null || classLst.size() == 0) {
            return new Result(false, "无班级考生信息",CollectionUtils.newObjectMap("list", null));
            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);
@@ -677,7 +677,7 @@
        }
        if(!this.userService.doBatchUpdateUser(lstUser)){
            return new Result(false,"更新学生考试凭证密码失败!");
            return new Result(false,"更新学生考试凭证密码失败!");
        }
        return new Result(true);
src/main/java/com/qxueyou/scc/exam/action/ExamPaperController.java
@@ -33,11 +33,11 @@
 * @history 2018-03-11 create kevin
 * 
 */
@Api(tags="试卷管理接口")
@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;
    
@@ -56,14 +56,14 @@
    
    
    /**
     * 试卷列表
     * 试卷列表
     * */
    @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 = ?");
@@ -73,7 +73,7 @@
        }
        int totalCount = commonDAO.findCount(hqlCount,queryParamLst);
        
        // page赋值
        // page赋值
        pager.setTotalCount(totalCount);
        pager.setPageSize(pageSize!=null&&pageSize>0?pageSize:DEFAULT_PAGE_SIZE);
        pager.setPageNum (pageNum!=null&&pageNum>0?pageNum:DEFAULT_PAGE_NUM);
@@ -99,7 +99,7 @@
    }
    
    /**
     * 详情页面数据
     * 详情页面数据
     * @param examPaperId
     * @return
     */
@@ -111,7 +111,7 @@
    }
    
    /**
     * 保存
     * 保存
     * 
     * @param examInfo
     * @return
@@ -129,7 +129,7 @@
    }
    
    /**
     * 删除
     * 删除
     * @param examPaperIds
     * @return
     */
@@ -178,7 +178,7 @@
    
    
    /**
     * 发布试卷
     * 发布试卷
     * 
     * @param exerciseIds
     * @return
@@ -186,13 +186,13 @@
    @RequestMapping(value = "/publish", method = RequestMethod.GET)
    public @ResponseBody Result publishExamPaper(String examPaperIds) {
        if (StringUtils.isEmpty(examPaperIds)) {
            return new Result(false, "参数错误");
            return new Result(false, "参数错误");
        }
        return this.examPaperService.doPublishExamPaper(examPaperIds.split(","));
    }
    /**
     * 撤回试卷
     * 撤回试卷
     * 
     * @param exerciseIds
     * @return
@@ -200,7 +200,7 @@
    @RequestMapping(value = "/revoke", method = RequestMethod.GET)
    public @ResponseBody Result revokeExamPaper(String examPaperIds) {
        if (StringUtils.isEmpty(examPaperIds)) {
            return new Result(false, "参数错误");
            return new Result(false, "参数错误");
        }
        return this.examPaperService.doRevokeExamPaper(examPaperIds.split(","));
    }
src/main/java/com/qxueyou/scc/exam/action/ExamPaperSectionController.java
@@ -30,11 +30,11 @@
 * @author kevin
 * @history 2018-03-11 create kevin
 */
@Api(tags = "试卷部分管理接口")
@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;
@@ -52,18 +52,18 @@
    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赋值
        // page赋值
        pager.setTotalCount(totalCount);
        pager.setPageSize(pageSize != null && pageSize > 0 ? pageSize : DEFAULT_PAGE_SIZE);
        pager.setPageNum(pageNum != null && pageNum > 0 ? pageNum : DEFAULT_PAGE_NUM);
@@ -76,7 +76,7 @@
    }
    /**
     * 详情
     * 详情
     *
     * @param examPaperSectionId
     * @return
@@ -90,7 +90,7 @@
    }
    /**
     * 保存
     * 保存
     *
     * @param examPaperSectionInfo
     * @return
@@ -110,7 +110,7 @@
    }
    /**
     * 删除
     * 删除
     *
     * @param examPaperSectionIds
     * @return
@@ -126,7 +126,7 @@
    }
    /**
     * 设置题库
     * 设置题库
     *
     * @param examPaperSectionInfo
     * @return
@@ -137,7 +137,7 @@
    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, "请求参数错误!");
            return new Result(false, "请求参数错误!");
        }
        String[] arrGroupIds = selectedGroupIds.split(",");
@@ -152,7 +152,7 @@
    }
    /**
     * 自主选题
     * 自主选题
     *
     * @param examPaperSectionInfo
     * @return
@@ -162,7 +162,7 @@
    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, "请求参数错误!");
            return new Result(false, "请求参数错误!");
        }
        String[] arrItemIds = selectedItemIds.split(",");
@@ -170,7 +170,7 @@
    }
    /**
     * 交换题目顺序
     * 交换题目顺序
     *
     * @param examPaperSectionInfo
     * @return
@@ -183,7 +183,7 @@
    }
    /**
     * 删除题目
     * 删除题目
     *
     * @param examPaperSectionInfo
     * @return
@@ -196,7 +196,7 @@
    }
    /**
     * 考试保存题目
     * 考试保存题目
     *
     * @return
     */
@@ -210,7 +210,7 @@
    /**
     * 查询当前题组中被选中的题目ID
     * 查询当前题组中被选中的题目ID
     */
    @RequestMapping(value = "/group/itemIds", method = RequestMethod.GET)
    public @ResponseBody
src/main/java/com/qxueyou/scc/exam/dao/ExamDao.java
@@ -3,7 +3,7 @@
import com.qxueyou.scc.exam.model.ExamInfo;
/**
 * 测试集成的JPA使用
 * 测试集成的JPA使用
 * @author kevin
 *
 */
src/main/java/com/qxueyou/scc/exam/dao/ExamDaoImpl.java
@@ -8,7 +8,7 @@
import com.qxueyou.scc.exam.model.ExamInfo;
/**
 * 测试集成JPA使用
 * 测试集成JPA使用
 * @author kevin
 *
 */
src/main/java/com/qxueyou/scc/exam/model/ExamBatchClassRe.java
@@ -58,21 +58,21 @@
    @JsonIgnore
    private Date createTime;
    
    /**  修改人ID */
    /**  修改人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;
src/main/java/com/qxueyou/scc/exam/model/ExamBatchInfo.java
@@ -27,7 +27,7 @@
import com.qxueyou.scc.base.model.ITrace;
/**
 * The persistent class for the exam_batch_info database table. 试卷批次表
 * The persistent class for the exam_batch_info database table. 试卷批次表
 */
@Entity
@Table(name = "exam_batch_info")
@@ -82,21 +82,21 @@
    @JsonIgnore
    private Date createTime;
    /** 修改人ID */
    /** 修改人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;
src/main/java/com/qxueyou/scc/exam/model/ExamInfo.java
@@ -29,7 +29,7 @@
import com.qxueyou.scc.teach.subject.model.Subject;
/**
 * The persistent class for the exam_info database table. 考试表
 * The persistent class for the exam_info database table. 考试表
 */
@Entity
@@ -45,14 +45,14 @@
    private static final long serialVersionUID = -6364452839157071345L;
    /*
     * 草稿 :0  已发布:1
     * 草稿 :0  已发布:1
     */
    public static final short STATUS_DRAFT = 0;
    
    public static final short STATUS_PUBLISH = 1;
    
    /**
     * 试卷类型:1:统一卷,2:AB卷,3:ABC卷,4:随机组卷,5:随机组卷2
     * 试卷类型:1:统一卷,2:AB卷,3:ABC卷,4:随机组卷,5:随机组卷2
     */
    public static final short EXAM_TYPE_A =1;
    public static final short EXAM_TYPE_AB =2;
@@ -118,25 +118,25 @@
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /** 修改人ID */
    /** 修改人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") }, 
src/main/java/com/qxueyou/scc/exam/model/ExamPaperInfo.java
@@ -22,7 +22,7 @@
import com.qxueyou.scc.exercise.model.ExerciseGroup;
/**
 * The persistent class for the exam_paper_info database table. 试卷表
 * The persistent class for the exam_paper_info database table. 试卷表
 */
@Entity
@Table(name = "exam_paper_info")
@@ -31,7 +31,7 @@
    private static final long serialVersionUID = 1L;
    
    /*
     * 草稿 :0  已发布:1
     * 草稿 :0  已发布:1
     */
    public static final short STATUS_DRAFT = 0;
    
@@ -69,20 +69,20 @@
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /** 修改人ID */
    /** 修改人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;
src/main/java/com/qxueyou/scc/exam/model/ExamPaperSectionInfo.java
@@ -70,22 +70,22 @@
    @JsonIgnore
    private Date createTime;
    
    /**  修改人ID */
    /**  修改人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;
src/main/java/com/qxueyou/scc/exam/model/ExamReExamPaper.java
@@ -21,7 +21,7 @@
import com.qxueyou.scc.base.model.ITrace;
/**
 * The persistent class for the exam_re_exam_paper database table. 考试试卷关联表
 * The persistent class for the exam_re_exam_paper database table. 考试试卷关联表
 */
@Entity
@Table(name = "exam_re_exam_paper")
@@ -60,22 +60,22 @@
    @JsonIgnore
    private Date createTime;
    /** 修改人ID */
    /** 修改人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;
src/main/java/com/qxueyou/scc/exam/service/IExamBatchService.java
@@ -9,7 +9,7 @@
import com.qxueyou.scc.exam.model.ExamBatchInfo;
/**
 * 考试批次服务类
 * 考试批次服务类
 *
 * @author kevin
 * @createTime 2018-03-11
@@ -17,17 +17,17 @@
public interface IExamBatchService {
    /**
     * 查询考试批次数量
     * @param param 查询参数
     * 查询考试批次数量
     * @param param 查询参数
     * @return
     */
    int queryExamBatchCount(Map<String,Object> param);
    /**
     * 查询考试批次列表
     * @param param  查询参数
     * @param page   分页对象
     * 查询考试批次列表
     * @param param  查询参数
     * @param page   分页对象
     * @return
     */
    List<ExamBatchInfo> queryExamBatchList(Map<String,Object> param,Pager page);
@@ -39,7 +39,7 @@
    /**
     * 新增考试批次
     * 新增考试批次
     *
     * @param examBatchInfo
     *
@@ -48,25 +48,25 @@
    String addExamBatch(ExamBatchInfo examBatchInfo);
    /**
     * 删除考试批次
     * 删除考试批次
     *
     * @param elxamBatchIds
     *            考试批次id
     *            考试批次id
     * @return
     */
    Result deleteExamBatch(String[] elxamBatchIds);
    /**
     * 更新考试批次信息
     * 更新考试批次信息
     *
     * @param noticeId
     *            考试批次id
     *            考试批次id
     * @return
     */
    Result updateExamBatch(ExamBatchInfo examBatchInfo);
    /**
     * 考试批次id  查询考试批次
     * 考试批次id  查询考试批次
     * @param examBatchId
     * @return
     */
src/main/java/com/qxueyou/scc/exam/service/IExamPaperSectionService.java
@@ -10,7 +10,7 @@
import com.qxueyou.scc.exercise.model.ExerciseGroup;
/**
 * 试卷部分服务类
 * 试卷部分服务类
 * 
 * @author kevin
 * @createTime 2018-03-11
@@ -18,24 +18,24 @@
public interface IExamPaperSectionService {
    
    /**
     * 查询试卷部分数量
     * @param param 查询参数
     * 查询试卷部分数量
     * @param param 查询参数
     * @return
     */
    int queryExamPaperSectionCount(Map<String,Object> param);
    
    
    /**
     * 查询试卷部分列表
     * @param param  查询参数
     * @param page   分页对象
     * 查询试卷部分列表
     * @param param  查询参数
     * @param page   分页对象
     * @return
     */
    List<ExamPaperSectionInfo> queryExamPaperSectionList(Map<String,Object> param,Pager page);
    
    /**
     * 新增试卷部分
     * 新增试卷部分
     * 
     * @param examPaperSectionInfo
     *            
@@ -44,32 +44,32 @@
    String addExamPaperSection(ExamPaperSectionInfo examPaperSectionInfo);
    /**
     * 删除试卷部分
     * 删除试卷部分
     * 
     * @param elxamBatchIds
     *            试卷部分id
     * @return 1表示删除成功,0表示删除失败
     *            试卷部分id
     * @return 1表示删除成功,0表示删除失败
     */
    Result deleteExamPaperSection(String[] elxamBatchIds);
    /**
     * 更新试卷部分信息
     * 更新试卷部分信息
     * 
     * @param noticeId
     *            试卷部分id
     * @return 1表示更新成功,0表示更新失败
     *            试卷部分id
     * @return 1表示更新成功,0表示更新失败
     */
    Result updateExamPaperSection(ExamPaperSectionInfo examPaperSectionInfo);
    /**
     * 试卷部分id  查询试卷部分
     * 试卷部分id  查询试卷部分
     * @param examPaperSectionId
     * @return
     */
    ExamPaperSectionInfo queryExamPaperSectionDetail(String examPaperSectionId);
    
    /**
     * 保存试卷所选题库
     * 保存试卷所选题库
     * @param param
     * @return
     * @throws Exception 
@@ -79,7 +79,7 @@
    
    
    /**
     * 保存试卷选题
     * 保存试卷选题
     * @param param
     * @return
     * @throws Exception 
@@ -88,7 +88,7 @@
    /**
     * 删除部分的题目
     * 删除部分的题目
     * @param sectionId
     * @param groupId
     * @param exerciseItemIds
@@ -97,7 +97,7 @@
    Result deleteSectionItem(String sectionId, String groupId, String[] exerciseItemIds);
    /**
     * 部分保存题目分数信息
     * 部分保存题目分数信息
     * @param exerciseGroup
     * @return
     */
src/main/java/com/qxueyou/scc/exam/service/IExamPaperService.java
@@ -6,14 +6,14 @@
import com.qxueyou.scc.exam.model.ExamPaperInfo;
/**
 * 试卷服务类
 * 试卷服务类
 * 
 * @author kevin
 * @createTime 2018-03-11
 */
public interface IExamPaperService {    
    /**
     * 新增试卷
     * 新增试卷
     * 
     * @param examPaperInfo
     *            
@@ -22,57 +22,57 @@
    Result addExamPaper(ExamPaperInfo examPaperInfo);
    /**
     * 删除试卷
     * 删除试卷
     * 
     * @param elxamBatchIds  试卷id
     * @param elxamBatchIds  试卷id
     *            
     * @return 1表示删除成功,0表示删除失败
     * @return 1表示删除成功,0表示删除失败
     */
    Result deleteExamPaper(String[] elxamBatchIds);
    /**
     * 更新试卷信息
     * 更新试卷信息
     * 
     * @param noticeId   试卷id
     * @param noticeId   试卷id
     *           
     * @return 1表示更新成功,0表示更新失败
     * @return 1表示更新成功,0表示更新失败
     */
    Result updateExamPaper(ExamPaperInfo examPaperInfo);
    /**
     * 发布试卷
     * 发布试卷
     * 
     * @param examPaperIds  试卷的Ids
     * @param examPaperIds  试卷的Ids
     *           
     * @return 1表示发布成功,0表示发布失败
     * @return 1表示发布成功,0表示发布失败
     */
    Result doPublishExamPaper(String[] examPaperIds);
    /**
     * 撤回发布的试卷
     * 撤回发布的试卷
     * 
     * @param examPaperIds 试卷的Ids
     * @param examPaperIds 试卷的Ids
     *             
     * @return 1表示撤回成功,0表示撤回失败失败
     * @return 1表示撤回成功,0表示撤回失败失败
     */
    Result doRevokeExamPaper(String[] examPaperIds);
    
    /**
     * 试卷id  查询试卷
     * 试卷id  查询试卷
     * @param examPaperId
     * @return
     */
    ExamPaperInfo queryExamPaperDetail(String examPaperId);
    /**
     * 查询考试题目统计信息
     * 查询考试题目统计信息
     * @param examPaperIds
     * @return
     */
    Map<String, ExamPaperInfo> queryExamPaperItemsStatistic(String[] examPaperIds);
    
    /**
     * 根据考试信息和考卷编码获取试卷信息
     * 根据考试信息和考卷编码获取试卷信息
     * @param examId
     * @param paperCode
     * @return
@@ -80,7 +80,7 @@
    ExamPaperInfo queryExamPaperByCode(String examId, String paperCode);
    
    /**
     * 根据groupId获取试卷信息
     * 根据groupId获取试卷信息
     * @param groupId
     * @return
     */
src/main/java/com/qxueyou/scc/exam/service/IExamService.java
@@ -9,42 +9,42 @@
import com.qxueyou.scc.exam.model.ExamResultV;
/**
 * 考试服务类
 * 考试服务类
 *
 * @author kevin
 * @createTime 2018-03-11
 */
public interface IExamService {
    /**
     * 新增考试
     * 新增考试
     *
     * @param examInfo
     *
     * @return 新增考试ID
     * @return 新增考试ID
     */
    String addExam(ExamInfo examInfo);
    void addRemedy(String examId, Date startTime, Date endTime);
    /**
     * 删除考试
     * 删除考试
     *
     * @param elxamIds
     *            考试id
     *            考试id
     * @return
     */
    Result deleteExam(String[] examIds);
    /**
     * 更新考试信息
     * 更新考试信息
     *
     * @param noticeId
     *            考试id
     *            考试id
     * @return
     */
    Result updateExam(ExamInfo examInfo);
    /**
     * 考试id 查询考试
     * 考试id 查询考试
     *
     * @param examId
     * @return
@@ -53,7 +53,7 @@
    ExamInfo queryReExam();
    /**
     * 设置考试试卷
     * 设置考试试卷
     *
     * @param param
     * @return
@@ -61,7 +61,7 @@
    Result updateExamPaperInfo(ExamInfo param);
    /**
     * 开始考试
     * 开始考试
     *
     * @param examBatchId
     * @param classId
@@ -72,25 +72,25 @@
    Result doStartReExam(String examId,String studentUserId);
    /**
     * 发布考试
     * 发布考试
     *
     * @param examIds
     *            考试的Ids
     * @return 1表示发布成功,0表示发布失败
     *            考试的Ids
     * @return 1表示发布成功,0表示发布失败
     */
    Result doPublishExam(String[] examIds);
    /**
     * 撤回发布的考试
     * 撤回发布的考试
     *
     * @param examIds
     *            考试的Ids
     * @return 1表示撤回成功,0表示撤回失败失败
     *            考试的Ids
     * @return 1表示撤回成功,0表示撤回失败失败
     */
    Result doRevokeExam(String[] examIds);
    /**
     * 首页获取学生考试的总条数
     * 首页获取学生考试的总条数
     *
     * @param classId
     * @param userId
@@ -99,7 +99,7 @@
    int getExamCount(String classId, String userId);
    /**
     * 首页获取学生逾期未交的考试个数
     * 首页获取学生逾期未交的考试个数
     *
     * @param classId
     * @param userId
@@ -108,7 +108,7 @@
    int getUnCommitExamCount(String classId, String userId);
    /**
     * 首页获取学生待完成的考试个数
     * 首页获取学生待完成的考试个数
     *
     * @param classId
     * @param userId
@@ -117,7 +117,7 @@
    int getToBeCommitExamCount(String classId, String userId);
    /**
     * 首页获取学生已经提交的考试个数
     * 首页获取学生已经提交的考试个数
     *
     * @param classId
     * @param userId
@@ -126,7 +126,7 @@
    int getCommitExamCount(String classId, String userId);
    /**
     * 后台查询考试列表
     * 后台查询考试列表
     * @param keyword
     * @param pageSize
     * @param pageNum
@@ -135,7 +135,7 @@
    List<ExamInfo> list(String keyword,String classId,String subjectId,Short status,Integer pageSize,Integer pageNum);
    /**
     * 后台查询考试数量
     * 后台查询考试数量
     * @param keyword
     * @param creatorId
     * @return
@@ -143,7 +143,7 @@
    int listCount(String keyword,String classId,String subjectId,Short status);
    /**
     * 获取考试成绩列表
     * 获取考试成绩列表
     * @param examId
     * @param examBatchIds
     * @param classId
@@ -156,7 +156,7 @@
            Integer pageNum);
    /**
     * 获取考试成绩列表数量
     * 获取考试成绩列表数量
     * @param examId
     * @param examBatchIds
     * @param classId
@@ -166,9 +166,9 @@
    int listResultCount(String examId,String[] examBatchIds, String classId, String keyword);
    /**
     * 查询学生考试列表数量
     * @param keyword 考试名称过滤
     * @param classIds 班级过滤
     * 查询学生考试列表数量
     * @param keyword 考试名称过滤
     * @param classIds 班级过滤
     * @param subjectId
     * @param status
     * @return
@@ -176,7 +176,7 @@
    int listStudentExamCount(String keyword, String[] classIds,String subjectId,Integer status);
    /**
     * 查询学生考试列表
     * 查询学生考试列表
     * @param keyword
     * @param classIds
     * @param subjectId
@@ -190,7 +190,7 @@
    List<ExamResultV> studentExam( String [] classIds);
    /**
     * 查询考试结果状态数量
     * 查询考试结果状态数量
     * @param lstExamIds
     * @return
     */
src/main/java/com/qxueyou/scc/exam/service/impl/ExamBatchService.java
@@ -16,7 +16,7 @@
import com.qxueyou.scc.exam.service.IExamBatchService;
/**
 * 试卷批次管理服务层
 * 试卷批次管理服务层
 *
 * @author kevin
 * @createTime 2017-11-1
@@ -39,24 +39,24 @@
    @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)
            //测试考试(考场一_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());
@@ -67,24 +67,24 @@
    }
    @Override
    public List<String> queryComNameByBatchId(String classId) {
        //根据所在组id
        //根据所在组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
        //根据所在组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);
@@ -120,7 +120,7 @@
            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()});
src/main/java/com/qxueyou/scc/exam/service/impl/ExamPaperSectionService.java
@@ -27,7 +27,7 @@
import com.qxueyou.scc.exercise.service.IExerciseService;
/**
 * 试卷部分管理服务层
 * 试卷部分管理服务层
 *
 * @author kevin
 * @createTime 2017-11-1
@@ -60,14 +60,14 @@
    @Override
    public String addExamPaperSection(ExamPaperSectionInfo examPaperSectionInfo) {
        TraceUtils.setCreateTrace(examPaperSectionInfo);
        // 查询当前最大的sectionOrder
        // 查询当前最大的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
        // 获取当前section对应的开始index
        int count = this.findCount("from ExerciseGroupItemRe r where r.deleteFlag is false and r.exerciseGroupId=?",
                CollectionUtils.newList(examPaperSectionInfo.getGroupId()));
@@ -111,7 +111,7 @@
        ExamPaperSectionInfo examPaperSectionInfo = read(ExamPaperSectionInfo.class, sectionId);
        ExerciseGroup exerciseGroup = read(ExerciseGroup.class, examPaperSectionInfo.getGroupId());
        // 获取试卷部分原开始位置和结束位置
        // 获取试卷部分原开始位置和结束位置
        int origStartIndex = examPaperSectionInfo.getItemStartOrder();
        int origEndIndex = examPaperSectionInfo.getItemEndOrder();
@@ -119,7 +119,7 @@
            this.deleteAllSectionItem(examPaperSectionInfo.getSectionId());
        }
        // 将题库的题目复制到试卷题库
        // 将题库的题目复制到试卷题库
        int itemIndex = origStartIndex;
        ExerciseGroup targetExerciseGroup = new ExerciseGroup();
        targetExerciseGroup.setGroupId(examPaperSectionInfo.getGroupId());
@@ -148,19 +148,19 @@
        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, "请检查选择的题目,同一份试卷中不允许存在相同的题目!");
            return new Result(false, "请检查选择的题目,同一份试卷中不允许存在相同的题目!");
        }
        // 将题库的题目复制到试卷题库
        // 将题库的题目复制到试卷题库
        int copyStartIndex = origEndIndex > 0 ? origEndIndex : origStartIndex;
        ExerciseGroup targetExerciseGroup = new ExerciseGroup();
        targetExerciseGroup.setGroupId(examPaperSectionInfo.getGroupId());
@@ -169,7 +169,7 @@
                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));
        }
@@ -183,7 +183,7 @@
        ExamPaperSectionInfo examPaperSectionInfo = this.read(ExamPaperSectionInfo.class, examPaperSectionId);
        ExerciseGroup exerciseGroup = exerciseGroupService.queryExerciseGroupDetail(examPaperSectionInfo.getGroupId());
        List<ExerciseItem> items = null;
        // 查询出section 对应的题目信息
        // 查询出section 对应的题目信息
        if (examPaperSectionInfo.getItemEndOrder() > 0) {
            int itemCount = examPaperSectionInfo.getItemEndOrder() - examPaperSectionInfo.getItemStartOrder();
            items = new ArrayList<ExerciseItem>(itemCount);
@@ -197,7 +197,7 @@
    @SuppressWarnings("unchecked")
    private Result updateSectionRangeIndex(String currentSectionid, int adjustNum) {
        ExamPaperSectionInfo currentSectionInfo = this.read(ExamPaperSectionInfo.class, currentSectionid);
        // 如果部分对应的end为-1,则不需要更新endorder
        // 如果部分对应的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()),
@@ -213,7 +213,7 @@
                this.saveOrUpdateAll(lstExamPaperSectionInfo);
            }
        }
        //清理试卷缓存
        //清理试卷缓存
        this.redisTemplate.delete(currentSectionInfo.getGroupId());
        return new Result(true);
    }
@@ -237,7 +237,7 @@
            }
            this.deleteSectionItem(examPaperSectionInfo.getSectionId(), examPaperSectionInfo.getGroupId(),
                    exerciseItemIds);
            // section坐标置空
            // section坐标置空
            examPaperSectionInfo.setItemEndOrder((short) -1);
            this.save(examPaperSectionInfo);
@@ -247,7 +247,7 @@
    @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);
@@ -267,7 +267,7 @@
                lstRelationIds.add(itemReMap.get(strExerciseItemId).getRelationId());
            }
            // 如果题目删除完了,则设置end为-1
            // 如果题目删除完了,则设置end为-1
            if (currentSectionInfo.getItemEndOrder() - exerciseItemIds.length == currentSectionInfo
                    .getItemStartOrder()) {
                currentSectionInfo.setItemEndOrder((short) -1);
@@ -287,7 +287,7 @@
    }
    /**
     * 删除试卷习题
     * 删除试卷习题
     *
     *
     * @param reIds
@@ -298,15 +298,15 @@
        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.删除试卷题目组关联表数据
        // 2.删除试卷题目组关联表数据
        this.bulkUpdateInLoop("delete from ExerciseGroupItemRe  where relationId=?", reIds);
        // 更新item的顺序号
        // 更新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) {
@@ -320,7 +320,7 @@
    @Override
    public Result saveSectionItem(ExerciseGroup exerciseGroup) {
        //保存题目信息
        //保存题目信息
        return exerciseService.saveExerciseItemBatch(exerciseGroup.getGroupId(), exerciseGroup.getItems());
    }
src/main/java/com/qxueyou/scc/exam/service/impl/ExamPaperService.java
@@ -21,7 +21,7 @@
import com.qxueyou.scc.exercise.service.IExerciseGroupService;
/**
 * 试卷管理服务层
 * 试卷管理服务层
 * 
 * @author kevin
 * @createTime 2017-11-1
@@ -41,13 +41,13 @@
        String examPaperId = null, groupId = null;
        ExerciseGroup exerciseGroup = null;
        
        //创建试卷关联题库
        //创建试卷关联题库
        exerciseGroup = new ExerciseGroup();
        exerciseGroup.setName(examPaperInfo.getExamPaperName()+"-试卷题库");
        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);
@@ -92,11 +92,11 @@
            for (ExamPaperInfo examPaperInfo : lstExamPaperInfo) {
                if(ExamPaperInfo.STATUS_DRAFT!=examPaperInfo.getPaperStatus()){
                    return new Result(false, "只有草稿状态的试卷,才能发布。");
                    return new Result(false, "只有草稿状态的试卷,才能发布。");
                }
                
                if(examPaperInfo.getTotalScore()<=0){
                    return new Result(false, "试卷总分大于零,才能发布。");
                    return new Result(false, "试卷总分大于零,才能发布。");
                }
                
                examPaperInfo.setPaperStatus(ExamPaperInfo.STATUS_PUBLISH);
@@ -104,7 +104,7 @@
                save(examPaperInfo);
            }
        }else{
            return new Result(false, "没有选择要发布的试卷。");
            return new Result(false, "没有选择要发布的试卷。");
        }
        return new Result(true);
    }
@@ -119,14 +119,14 @@
            List<ExamPaperInfo> lstExamPaperInfo = this.findByComplexHql(hql,pramMap, ExamPaperInfo.class);
            for (ExamPaperInfo examPaperInfo : lstExamPaperInfo) {
                if(ExamPaperInfo.STATUS_PUBLISH!=examPaperInfo.getPaperStatus()){
                    return new Result(false, "只有发布状态的试卷,才能撤回。");
                    return new Result(false, "只有发布状态的试卷,才能撤回。");
                }
                examPaperInfo.setPaperStatus(ExamPaperInfo.STATUS_DRAFT);
                TraceUtils.setUpdateTrace(examPaperInfo);
                save(examPaperInfo);
            }
        }else{
            return new Result(false, "没有选择要撤回的试卷。");
            return new Result(false, "没有选择要撤回的试卷。");
        }
        
        return new Result(true);
src/main/java/com/qxueyou/scc/exam/service/impl/ExamService.java
@@ -31,7 +31,7 @@
import com.qxueyou.scc.msg.service.IMsgInfoService;
/**
 * 考试管理服务层
 * 考试管理服务层
 *
 * @author kevin
 * @createTime 2017-11-1
@@ -174,7 +174,7 @@
            params.put("subjectId", subjectId);
        }
        //根据状态查询:1未开始,2未交卷,3已交卷,4逾期未交,5已批阅
        //根据状态查询:1未开始,2未交卷,3已交卷,4逾期未交,5已批阅
        if(status != null) {
            switch(status){
                case 1:hql.append(" and v.status is null") ;break;
@@ -214,7 +214,7 @@
            params.put("subjectId", subjectId);
        }
        //根据状态查询:1未开始,2未交卷,3已交卷,4逾期未交,5已批阅
        //根据状态查询:1未开始,2未交卷,3已交卷,4逾期未交,5已批阅
        if(status != null) {
            switch(status){
                case 1:hql.append(" and v.status is null") ;break;
@@ -230,32 +230,32 @@
    @Override
    public void addRemedy(String examId,Date startTime,Date endTime) {
        //根据考试ID获取考试信息
        //根据考试ID获取考试信息
        ExamInfo examInfo = queryExamDetail(examId);
        //根据考试ID获取对应的批次信息
        //根据考试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获取对应的题目设置
        //根据考试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.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);
@@ -264,28 +264,28 @@
            this.insert(exerciseItemSet1);
            exerciseItemSetses.add(exerciseItemSet1);
        });
        //根据考试ID获取题库关联信息
        //根据考试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保存信息
            //设置考试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
                //新建bean
                ExamBatchClassRe examBatchClassRe = new ExamBatchClassRe();
                //复制属性
                //复制属性
                BeanUtils.copyProperties(reClass,examBatchClassRe);
                //修改考试ID以及批次ID
                //修改考试ID以及批次ID
                examBatchClassRe.setExamId(examremedyId);
                examBatchClassRe.setExamBatchId(remedyExamBatchId);
                examBatchClassRe.setExamClassReId(UUIDUtils.generateSpecialUuid(32));
@@ -293,14 +293,14 @@
            });
            ExamBatchInfo examBatchInfo1 = new ExamBatchInfo();
            BeanUtils.copyProperties(examBatchInfo,examBatchInfo1);
            //设置批次考试ID为补考的ID
            //设置批次考试ID为补考的ID
            examBatchInfo1.setExamId(examremedyId);
            //设置开始结束时间
            //设置开始结束时间
            examBatchInfo1.setStartTime(startTime);
            examBatchInfo1.setEndTime(endTime);
            examBatchInfo1.setExamBatchId(remedyExamBatchId);
            examBatchInfo1.setReClasses(examBatchClassRes);
            //添加批次
            //添加批次
            examBatchService.addExamBatch(examBatchInfo1);
            remedylist.add(examBatchInfo1);
        }
@@ -319,13 +319,13 @@
        Result result = new Result(true);
        if (examIds != null && examIds.length > 0) {
            String hql = "update ExamInfo set deleteFlag = true where examId=?";
            //判断ID里是否包含补考考试
            //判断ID里是否包含补考考试
            ExamInfo examInfo = queryReExam();
            if (examInfo!=null) {
                for (String examId : examIds) {
                    if (examId.equals(examInfo.getExamId())){
                        result.setSuccess(false);
                        result.setMsg("含有补考考试,不可删除");
                        result.setMsg("含有补考考试,不可删除");
                        return result;
                    }
                }
@@ -340,7 +340,7 @@
        ExamInfo examInfo = read(ExamInfo.class, param.getExamId());
        if (examInfo == null) {
            return new Result(false, "考试不存在");
            return new Result(false, "考试不存在");
        }
        TraceUtils.setUpdateTrace(examInfo);
@@ -365,16 +365,16 @@
            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
                // 删除之前的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) {
@@ -384,10 +384,10 @@
                    }
                }
                //保存考试,源题目组信息
                //保存考试,源题目组信息
                String [] sourceGroupIds = param.getSourceGroupIds().split(",");
                // 保存关联练习组
                // 保存关联练习组
                if (sourceGroupIds != null && sourceGroupIds.length > 0) {
                    ExerciseExamReGroup reGroup = null;
                    for (String groupId : sourceGroupIds) {
@@ -402,7 +402,7 @@
                }
            }else{
                // 删除原来的关联关系
                // 删除原来的关联关系
                String hql = "update ExamReExamPaper set deleteFlag = true where examId=? ";
                this.bulkUpdate(hql, new Object[] { param.getExamId() });
                List<ExamReExamPaper> lstExamReExamPaper = param.getReExamPapers();
@@ -432,7 +432,7 @@
            for (ExamInfo examInfo : lstExamInfo) {
                if (ExamInfo.STATUS_DRAFT != examInfo.getExamStatus()) {
                    return new Result(false, "只有草稿状态的考试,才能发布。");
                    return new Result(false, "只有草稿状态的考试,才能发布。");
                }
                examInfo.setExamStatus(ExamInfo.STATUS_PUBLISH);
                TraceUtils.setUpdateTrace(examInfo);
@@ -442,7 +442,7 @@
                this.doExamPublishMsg(examInfo.getExamId());
            }
        } else {
            return new Result(false, "没有选择要发布的考试。");
            return new Result(false, "没有选择要发布的考试。");
        }
        return new Result(true);
    }
@@ -459,14 +459,14 @@
                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);
                msgInfoService.doSendTextMsgToUsers(new String[]{(String)temp.get("userId")},MsgInfo.TYPE_EXAM, "发布了考试", attrs);
            }
        }
    }
    @Scheduled(cron = " 0 0/5 * * * ?")
    protected void doTimer() {
//        System.out.println("执行考试提醒定时器");
//        System.out.println("执行考试提醒定时器");
        Calendar cal =Calendar.getInstance();
        cal.add(Calendar.HOUR, 1);
        Date beginDate = cal.getTime();
@@ -477,12 +477,12 @@
        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小时内将开始的直播
        //查询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, "考试马上开始了,请做好考试准备");
                this.doExamRemindMsg(batchId,MsgInfo.TYPE_REMIND, "考试马上开始了,请做好考试准备");
            }
        }
    }
@@ -510,14 +510,14 @@
            List<ExamInfo> lstExamInfo = this.findByComplexHql(hql, pramMap, ExamInfo.class);
            for (ExamInfo examInfo : lstExamInfo) {
                if (ExamInfo.STATUS_PUBLISH != examInfo.getExamStatus()) {
                    return new Result(false, "只有发布状态的考试,才能撤回");
                    return new Result(false, "只有发布状态的考试,才能撤回");
                }
                examInfo.setExamStatus(ExamInfo.STATUS_DRAFT);
                TraceUtils.setUpdateTrace(examInfo);
                save(examInfo);
            }
        } else {
            return new Result(false, "没有选择要撤回的考试");
            return new Result(false, "没有选择要撤回的考试");
        }
        return new Result(true);
    }
@@ -537,7 +537,7 @@
    }
    @Override
    public ExamInfo queryReExam() {
        // 查询是否有进行中的考试
        // 查询是否有进行中的考试
        ExamInfo examInfo = this.findUnique(
                "from ExamInfo where maxLateMin=?  and deleteFlag is false ",
                CollectionUtils.newList((short)1),
@@ -547,7 +547,7 @@
    }
    /**
     * 开始考试
     * 开始考试
     *
     * @param
     * @return
@@ -565,17 +565,17 @@
                //TODO
                "remainingSeconds",record.getRemainingSeconds(),"itemSet", lstItemSets,"subjectName", examInfo.getSubject().getName());
        // 如果已提交就查询用户答案信息
        //TODO 暂时不可以查看考试答案,已提交就不可以进入
        // 如果已提交就查询用户答案信息
        //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,"考试已提交");
            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());
@@ -585,7 +585,7 @@
        return new Result(true,"",resultData);
    }
    /**
     * 开始补考考试
     * 开始补考考试
     *
     * @param examId
     * @return
@@ -601,7 +601,7 @@
        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());
@@ -612,7 +612,7 @@
    }
    /**
     * 判断是否是随机考试
     * 判断是否是随机考试
     * @param examType
     * @return
     */
@@ -621,7 +621,7 @@
    }
    /**
     * 获取考试试卷信息
     * 获取考试试卷信息
     * @param examId
     * @param groupId
     * @param examType
@@ -645,7 +645,7 @@
    }
    /**
     * 手动添加题目位置信息
     * 手动添加题目位置信息
     * @param groupId
     * @param examType
     * @param totalSocre
@@ -669,12 +669,12 @@
                int itemCount = lstItemSets.get(i).getItemCount();
                if (itemCount>0) {
                    examPaperSectionInfo.setGroupId(groupId);
                    //设置开始结束
                    //设置开始结束
                    examPaperSectionInfo.setItemStartOrder((short)count);
                    //获取题目设置的count,下次循环用
                    //获取题目设置的count,下次循环用
                    count+=itemCount;
                    examPaperSectionInfo.setItemEndOrder((short)count);
                    //名称
                    //名称
                    examPaperSectionInfo.setSectionName(String.valueOf(lstItemSets.get(i).getItemType()));
                    examPaperSectionInfos.add(examPaperSectionInfo);
                }
@@ -685,21 +685,21 @@
            examPaperInfo = examPaperService.queryExamPaperDetail(examPaperInfo.getExamPaperId());
            List<ExamPaperSectionInfo> examPaperSectionInfos = new ArrayList<>();
            int count=0;
            //获取试卷里的各种题数量设置
            //获取试卷里的各种题数量设置
            Map<String, ExamPaperInfo> statisticsMap = examPaperService.queryExamPaperItemsStatistic(new String[]{examPaperInfo.getExamPaperId()});
            //把设置封装成itemSets
            //把设置封装成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);
@@ -714,18 +714,18 @@
            exerciseItemSet4.setItemCount(statisticsMap.get(examPaperInfo.getExamPaperId()).getFillBlanksCount());
            exerciseItemSet4.setItemType((short) 4);
            lstItemSets.add(exerciseItemSet4);
            //将itemSets设置成页面要用到的ExamPaperSectionInfo设置
            //将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,下次循环用
                    count+=itemCount;
                    examPaperSectionInfo.setItemEndOrder((short)count);
                    //名称
                    //名称
                    examPaperSectionInfo.setSectionName(String.valueOf(lstItemSets.get(i).getItemType()));
                    examPaperSectionInfos.add(examPaperSectionInfo);
                }
@@ -736,7 +736,7 @@
    }
    /**
     * 获取用户答题信息
     * 获取用户答题信息
     * @param recordId
     * @return
     */
@@ -748,7 +748,7 @@
    }
    /**
     * 获取用户的考试记录,如果不存在则创建并返回
     * 获取用户的考试记录,如果不存在则创建并返回
     * @param examBatchInfo
     * @param itemSets
     * @param classId
@@ -763,7 +763,7 @@
        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()),
@@ -774,10 +774,10 @@
            String cacheKey = "EXAM_DO_COUNT_".concat(examBatchId);
            int doCount = this.getCachedRecordCount(cacheKey,examBatchId);
            //随机创建题目组
            //随机创建题目组
            if(checkIsRandomExam(examType)){
                String newGroupName = examId+"-"+examBatchNo+"-随机试卷题库-"+(++doCount);
                //查题库
                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);
@@ -791,7 +791,7 @@
        return record;
    }
    /**
     * 创建补考考试记录
     * 创建补考考试记录
     * @param examBatchInfo
     * @param itemSets
     * @param studentUserId
@@ -805,15 +805,15 @@
        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);
            //查题库
            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);
@@ -826,7 +826,7 @@
        return record;
    }
    // 获取正在做试卷的学生数
    // 获取正在做试卷的学生数
    private int getCachedRecordCount(String cacheKey,String examBatchId){
        String cacheCount = stringRedisTemplate.opsForValue().get(cacheKey);
        int doCount = StringUtils.isEmpty(cacheCount) ? 0 : Integer.valueOf(cacheCount);
@@ -854,7 +854,7 @@
        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()));
@@ -868,27 +868,27 @@
        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
        //因为没有批次,所有时间所有人都可以考,所以这里将批次ID设置成考试ID
        record.setExamBatchId(examInfo.getExamId());
        record.setDoCount(BigInteger.ZERO);
        record.setCorrectCount(BigInteger.ZERO);
        record.setTitleMaxNumber("0");
        record.setStatus("0");
        //不设置classID
        //不设置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()));
@@ -903,14 +903,14 @@
    }
    /**
     * 获取补考记录集合
     * 获取补考记录集合
     * @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()),
@@ -922,7 +922,7 @@
        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){
@@ -963,7 +963,7 @@
    @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,
@@ -972,10 +972,10 @@
    }
    /**
     * 查询考试关联的题目组
     * 查询考试关联的题目组
     * @param examId
     * @param
     * @return  题目组Map<id,>
     * @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",
@@ -984,7 +984,7 @@
    /**
     * 查询考试关联的题目配置信息
     * 查询考试关联的题目配置信息
     * @param examId
     * @param
     * @return
src/main/java/com/qxueyou/scc/exercise/action/ExerciseCompleteController.java
@@ -28,17 +28,17 @@
import io.swagger.annotations.ApiOperation;
/**
 *作业完成情况
 *作业完成情况
 * 
 * @author kevin
 * @history 2018-03-11 create kevin
 * 
 */
@Api(tags="作业完成情况管理接口")
@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;
    
@@ -54,23 +54,23 @@
    
    
    /**
     * 作业完成情况列表
     * 作业完成情况列表
     * */
    @ApiOperation(value = "作业完成情况列表", notes = "")
    @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"),
        @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);
@@ -86,19 +86,19 @@
    }
    
    /**
     * 根据不同的作业类型,返回作业完成情况及审批详情
     * 根据不同的作业类型,返回作业完成情况及审批详情
     * @param exerciseCompleteId
     * @return
     */
    @ApiOperation(value = "详情页面数据", notes = "")
    @ApiImplicitParams({@ApiImplicitParam(name = "exerciseCompleteId", value = "作业完成情况id", required = true, paramType="query", dataType = "String")})
    @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
     */
@@ -112,23 +112,23 @@
    }    
    
    /**
     * 批阅
     * 批阅
     * @param examInfo
     * @return
     */
    @ApiOperation(value = "批阅", notes = "")
    @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")})
    @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";
@@ -136,7 +136,7 @@
        if(lastCompleteInfo!=null){
            return new Result(true,"",CollectionUtils.newObjectMap("detail",exerciseCompleteService.queryExerciseCompleteDetail(lastCompleteInfo.getExerciseCompleteId())));
        }else{
            return new Result(false,"已经没有待批阅的作业!");
            return new Result(false,"已经没有待批阅的作业!");
        }
    }
src/main/java/com/qxueyou/scc/exercise/action/ExerciseController.java
@@ -70,33 +70,33 @@
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 */
    /** 练习 service */
    @Autowired
    private IExerciseService exerciseService;
    
    /** 练习导入 service */
    /** 练习导入 service */
    @Autowired
    private IExercisePyService exercisePyService;
    
    /** 练习V2.0版本接口service */
    /** 练习V2.0版本接口service */
    @Autowired
    private IExerciseVerService exerciseVerService;
    /** 练习V2.0版本接口service */
    /** 练习V2.0版本接口service */
//    @Autowired
//    IConfigService cfg;
    
@@ -104,52 +104,52 @@
    @Autowired
    IOssService ossService;
    
    /** 消息发送 service */
    /** 消息发送 service */
//    @Autowired
//    IMsgVenderService  easemobService;
    
    /** 组id */
    /** 组id */
    private static final String GROUP_ID = "groupId";
    
    /** 做题记录id */
    /** 做题记录id */
    private static final String EXERCISE_RECORD_ID = "exerciseRecordId";
    
    /** ---------------------------APP V2.0接口 start----------------------*/
    /** ---------------------------APP V2.0接口 start----------------------*/
    /**
     * APP2.0: 获取家庭作业list
     * APP2.0: 获取家庭作业list
     * URL:    /exercise/Exercise/homeWorkListNew
     * 
     * 
     *请求参数={
            subjectId:课程id,//可选,用于高校版
            page:当前页,//必传,大于0
            limit:每页限制条数,//必传,大于0
     *请求参数={
            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":错题本、收藏本总数
                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
@@ -159,9 +159,9 @@
            @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:已提交
            @RequestParam(value="selected", required = false) Integer selected)  {// 0:全部  1:未开始 2:做题中 3:已提交
        // 获取group data
        // 获取group data
        List<ExerGroupResponseData> lstResult = getExericseListData(ExerciseGroup.TYPE_HOMEWORK, 
                null, page, limit, selected, null);
        
@@ -170,7 +170,7 @@
    
    
    /**
     * APP2.0: 获取章节练习list
     * APP2.0: 获取章节练习list
     * URL:    /exercise/Exercise/chapterListNew
     * 
     * @return
@@ -182,7 +182,7 @@
            @RequestParam(value="limit") int limit,
            @RequestParam(value="selected", required = false) Integer selected, String chapterId)  {
        
        // 获取group data
        // 获取group data
        List<ExerGroupResponseData> lstResult = getExericseListData(ExerciseGroup.TYPE_CHAPTER_ITEM, 
                subjectId, page, limit, selected, chapterId);
        
@@ -190,7 +190,7 @@
    }
    
    /**
     * APP2.0: 获取模拟考试list
     * APP2.0: 获取模拟考试list
     * URL:    /exercise/Exercise/examsListNew
     * 
     * @return
@@ -202,7 +202,7 @@
            @RequestParam(value="limit") int limit,
            @RequestParam(value="selected", required = false) Integer selected)  {
        
        // 获取group data
        // 获取group data
        List<ExerGroupResponseData> lstResult = getExericseListData(ExerciseGroup.TYPE_MOCK_EXAM, 
                null, page, limit, selected, null);
        
@@ -210,7 +210,7 @@
    }
    
    /**
     * APP2.0: 获取专题练习list
     * APP2.0: 获取专题练习list
     * URL:    /exercise/Exercise/topicListNew
     * 
     * @return
@@ -222,7 +222,7 @@
            @RequestParam(value="limit") int limit,
            @RequestParam(value="selected", required = false) Integer selected)  {
        
        // 获取group data
        // 获取group data
        List<ExerGroupResponseData> lstResult = getExericseListData(ExerciseGroup.TYPE_EXERCISE_TOPIC, 
                null, page, limit, selected, null);
        
@@ -230,7 +230,7 @@
    }
    
    /**
     * APP2.0: 获取专题练习list
     * APP2.0: 获取专题练习list
     * URL:    /exercise/Exercise/freeListNew
     * 
     * @return
@@ -242,7 +242,7 @@
            @RequestParam(value="limit") int limit,
            @RequestParam(value="selected", required = false) Integer selected)  {
        
        // 获取group data
        // 获取group data
        List<ExerGroupResponseData> lstResult = getExericseListData(ExerciseGroup.TYPE_EXERCISE_FREE, 
                null, page, limit, selected, null);
        
@@ -250,12 +250,12 @@
    }
    
    /**
     * 获取练习列表数据
     * 获取练习列表数据
     * @param exerType
     * @param subjectId
     * @param page
     * @param limit
     * @param selected // 0:全部  1:未开始 2:做题中 3:已提交
     * @param selected // 0:全部  1:未开始 2:做题中 3:已提交
     * @return
     */
    private List<ExerGroupResponseData> getExericseListData(short exerType, 
@@ -264,24 +264,24 @@
        int pageSize = limit;
        Integer iSelected = selected;
        
        // 1.分页信息
        // 1.分页信息
        if(pageNum < 1){
            pageNum = 1;
        }
        if(pageSize < 1){
            pageSize = 1;
        }
        if(iSelected == null){//为空设置为 全部
        if(iSelected == null){//为空设置为 全部
            iSelected = 0;
        }
        Pager pager = new Pager();
        pager.setPageNum(pageNum);
        pager.setPageSize(limit);
        
        // 2.得到列表数据
        // 2.得到列表数据
        List<ExerGroupResponseData> lstResult = exerciseVerService.queryExericseListData(exerType,subjectId,pager,iSelected, chapterId);
        
        if(null == lstResult){// 结果转换成 []
        if(null == lstResult){// 结果转换成 []
            lstResult = new ArrayList<ExerGroupResponseData>();
        }
        
@@ -289,40 +289,40 @@
    }
    /**
     * APP2.0: 查询做题记录
     * APP2.0: 查询做题记录
     * URL:    /exercise/Exercise/exerRecord
     *  请求参数={
            exerType:练习类型,//必传
            subjectId:课程id,//可选,用于高校版
            page:当前页,//必传,大于0
            limit:每页限制条数,//必传,大于0
     *  请求参数={
            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":错题本、收藏本总数
                    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
@@ -339,7 +339,7 @@
        int pageNum = page;
        int pageSize = limit;
        
        // 1.分页信息
        // 1.分页信息
        if(pageNum < 1){
            pageNum = 1;
        }
@@ -353,7 +353,7 @@
        
        
        StringBuffer hql = new StringBuffer(512);
        // 2.查询结果
        // 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, "
@@ -379,10 +379,10 @@
        
        List<ExerGroupResponseData> lstResult = new ArrayList<ExerGroupResponseData>(lstRecord.size());
        
        // 3.重组字段
        // 3.重组字段
        for(Object[] obj:lstRecord){
            
            // 组装练习做题记录列表数据
            // 组装练习做题记录列表数据
            lstResult.add(packagingExerciseRecordListData(exerType, obj));
            
        }
@@ -391,7 +391,7 @@
    }
    /**
     * 组装练习做题记录列表数据
     * 组装练习做题记录列表数据
     * @param exerType
     * @param obj
     * @param group
@@ -403,7 +403,7 @@
        ExerciseGroup group = (ExerciseGroup)obj[0];
        ExerGroupResponseData result =  new ExerGroupResponseData();
        
        // 赋值字段值
        // 赋值字段值
        BeanUtils.copyProperties(group, result);
        
        result.setExerciseRecordId(String.valueOf(obj[1]));
@@ -416,26 +416,26 @@
        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){// 家庭作业
            if(exerType == ExerciseGroup.TYPE_HOMEWORK){// 家庭作业
                result.setRepeatFlag(false);
            }else{
                result.setRepeatFlag(true);
            }
        }else{
            result.setRepeatFlag(!(boolean)obj[10]);// true 可以重做 false不能重做
            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 ){// 自由练习 模拟考试
                || exerType == ExerciseGroup.TYPE_MOCK_EXAM ){// 自由练习 模拟考试
            result.setExerciseTime(String.valueOf(obj[12]));
            result.setExerciseStrategy(String.valueOf(obj[13]));
            result.setExerciseSource(String.valueOf(obj[14]));
@@ -445,7 +445,7 @@
    }
    /**
     * 组装练习做题记录部分参数 拆分方法
     * 组装练习做题记录部分参数 拆分方法
     * @param obj
     * @param result
     */
@@ -474,88 +474,88 @@
    }
    
    /**
     * APP2.0: 获取家庭作业练习题目数据
     * APP2.0: 获取家庭作业练习题目数据
     * URL:    /exercise/Exercise/homeworkExercise
     * 
     * 请求参数={
            groupId:组id,//必传
            exerciseRecordId:当前页,//必传,没有传""
            getExercise:是否更新题目,//必传,
            boolean值,没有传false
            getAnswer:是否更新答案,//必传,
            boolean值,没有传false
     * 请求参数={
            groupId:组id,//必传
            exerciseRecordId:当前页,//必传,没有传""
            getExercise:是否更新题目,//必传,
            boolean值,没有传false
            getAnswer:是否更新答案,//必传,
            boolean值,没有传false
        }
          
        返回参数={
        "items":[// 题目集合
        返回参数={
        "items":[// 题目集合
            {
                "exerciseId":练习id,
                "exerciseId":练习id,
                "chapterId":null,
                "lessonId":null,
                "title":标题,
                "type":题目类型,
                "answer":正确答案,
                "title":标题,
                "type":题目类型,
                "answer":正确答案,
                "options":[
                    {
                        "optionId":选项id,
                        "optionId":选项id,
                        "checked":true,
                        "content":内容,
                        "optionOrder":题目序号,
                        "exerciseItemId":"练习id",
                        "content":内容,
                        "optionOrder":题目序号,
                        "exerciseItemId":"练习id",
                        "imgs":[
                            {
                                "imgId":"ͼƬid",
                                "imgId":"图片id",
                                "exerciseObjectId":null,
                                "imgPath":图片路径,
                                "imgOrder":排序,
                                "objectType":图片类型 1:题目 2:选项
                                "imgPath":图片路径,
                                "imgOrder":排序,
                                "objectType":图片类型 1:题目 2:选项
                            },
                            ... 循环多个
                            ... 循环多个
                        ]
                    },
                    ... 循环多个
                    ... 循环多个
                ],
                "scores":null,
                "itemNo":null,
                "analisisResult":{
                    "allAccuracy":全站统计 正确率,
                    "analysis":"解析",
                    "submitAllNumber":全站 提交总数,
                    "usualFaultAnswers":易错题,
                    "allAccuracy":全站统计 正确率,
                    "analysis":"解析",
                    "submitAllNumber":全站 提交总数,
                    "usualFaultAnswers":易错题,
                    "exerciseAnalisisUId":null,
                    "accuracy":个人统计 正确率,
                    "submitNumber":个人统计  提交总数,
                    "submitErrorNumber":个人统计  提交错误总数,
                    "accuracy":个人统计 正确率,
                    "submitNumber":个人统计  提交总数,
                    "submitErrorNumber":个人统计  提交错误总数,
                },
                "imgs":[
                    {
                       "imgId":"ͼƬid",
                       "imgId":"图片id",
                        "exerciseObjectId":null,
                        "imgPath":图片路径,
                        "imgOrder":排序,
                        "objectType":图片类型 1:题目 2:选项
                        "imgPath":图片路径,
                        "imgOrder":排序,
                        "objectType":图片类型 1:题目 2:选项
                    },
                    ... 循环多个
                    ... 循环多个
                ],
                "commentFlag": null,
            }
        ],
        "answers":[// 个人答案集合
        "answers":[// 个人答案集合
            {
                "answerUId":"主键id",
                "answer":选择答案  如:多选为(A,B,C),
                "answerUId":"主键id",
                "answer":选择答案  如:多选为(A,B,C),
                "correct":0,
                "exerciseItemId":练习id,
                EXERCISE_RECORD_ID:记录id,
                "userId":用户id
                "exerciseItemId":练习id,
                EXERCISE_RECORD_ID:记录id,
                "userId":用户id
            },
            ... 循环多个
            ... 循环多个
        ]
    }
     * @param groupId 组id
     * @param exerciseRecordId 练习记录id
     * @param getExercise 是否获取练习题
     * @param getAnswer 是否获取答案
     * @param groupId 组id
     * @param exerciseRecordId 练习记录id
     * @param getExercise 是否获取练习题
     * @param getAnswer 是否获取答案
     * @return
     */
    @RequestMapping(value = "homeworkExercise", method = RequestMethod.GET)
@@ -565,7 +565,7 @@
            @RequestParam(value = "getExercise") boolean getExercise,
            @RequestParam(value = "getAnswer") boolean getAnswer)  {
        
        // 获取结果
        // 获取结果
        ExerItemResponseData result = exerciseVerService.queryExerItemResponseData(groupId,
                exerciseRecordId, getExercise, getAnswer, ExerciseGroup.TYPE_HOMEWORK);
        
@@ -573,12 +573,12 @@
    }
    
    /**
     * APP2.0: 获取模拟考试练习题目数据
     * APP2.0: 获取模拟考试练习题目数据
     * URL:    /exercise/Exercise/examExercise
     * @param groupId 组id
     * @param exerciseRecordId 练习记录id
     * @param getExercise 是否获取练习题
     * @param getAnswer 是否获取答案
     * @param groupId 组id
     * @param exerciseRecordId 练习记录id
     * @param getExercise 是否获取练习题
     * @param getAnswer 是否获取答案
     * @return
     */
    @RequestMapping(value = "examExercise", method = RequestMethod.GET)
@@ -588,7 +588,7 @@
            @RequestParam(value = "getExercise") boolean getExercise,
            @RequestParam(value = "getAnswer") boolean getAnswer)  {
        
        // 获取结果
        // 获取结果
        ExerItemResponseData result = exerciseVerService.queryExerItemResponseData(groupId,
                exerciseRecordId, getExercise, getAnswer, ExerciseGroup.TYPE_MOCK_EXAM);
        
@@ -597,12 +597,12 @@
    
    
    /**
     * APP2.0: 获取章节练习题目数据
     * APP2.0: 获取章节练习题目数据
     * URL:    /exercise/Exercise/chapterExercise
     * @param groupId 组id
     * @param exerciseRecordId 练习记录id
     * @param getExercise 是否获取练习题
     * @param getAnswer 是否获取答案
     * @param groupId 组id
     * @param exerciseRecordId 练习记录id
     * @param getExercise 是否获取练习题
     * @param getAnswer 是否获取答案
     * @return
     */
    @RequestMapping(value = "chapterExercise", method = RequestMethod.GET)
@@ -612,7 +612,7 @@
            @RequestParam(value = "getExercise") boolean getExercise,
            @RequestParam(value = "getAnswer") boolean getAnswer)  {
        
        // 获取结果
        // 获取结果
        ExerItemResponseData result = exerciseVerService.queryExerItemResponseData(groupId,
                exerciseRecordId, getExercise, getAnswer, ExerciseGroup.TYPE_CHAPTER_ITEM);
        
@@ -620,12 +620,12 @@
    }
    
    /**
     * APP2.0: 获取专题练习题目数据
     * APP2.0: 获取专题练习题目数据
     * URL:    /exercise/Exercise/topicExercise
     * @param groupId 组id
     * @param exerciseRecordId 练习记录id
     * @param getExercise 是否获取练习题
     * @param getAnswer 是否获取答案
     * @param groupId 组id
     * @param exerciseRecordId 练习记录id
     * @param getExercise 是否获取练习题
     * @param getAnswer 是否获取答案
     * @return
     */
    @RequestMapping(value = "topicExercise", method = RequestMethod.GET)
@@ -635,7 +635,7 @@
            @RequestParam(value = "getExercise") boolean getExercise,
            @RequestParam(value = "getAnswer") boolean getAnswer)  {
        
        // 获取结果
        // 获取结果
        ExerItemResponseData result = exerciseVerService.queryExerItemResponseData(groupId,
                exerciseRecordId, getExercise, getAnswer, ExerciseGroup.TYPE_EXERCISE_TOPIC);
        
@@ -644,12 +644,12 @@
    
    
    /**
     * APP2.0: 获取专题练习题目数据
     * APP2.0: 获取专题练习题目数据
     * URL:    /exercise/Exercise/freeExercise
     * @param groupId 组id
     * @param exerciseRecordId 练习记录id
     * @param getExercise 是否获取练习题
     * @param getAnswer 是否获取答案
     * @param groupId 组id
     * @param exerciseRecordId 练习记录id
     * @param getExercise 是否获取练习题
     * @param getAnswer 是否获取答案
     * @return
     */
    @RequestMapping(value = "freeExercise", method = RequestMethod.GET)
@@ -659,7 +659,7 @@
            @RequestParam(value = "getExercise") boolean getExercise,
            @RequestParam(value = "getAnswer") boolean getAnswer)  {
        
        // 获取结果
        // 获取结果
        ExerItemResponseData result = exerciseVerService.queryExerItemResponseData(groupId,
                exerciseRecordId, getExercise, getAnswer, ExerciseGroup.TYPE_EXERCISE_FREE);
        
@@ -668,15 +668,15 @@
    }
    
    /**
     * APP2.0: 获取专题练习题目数据
     * APP2.0: 获取专题练习题目数据
     * URL:    /exercise/Exercise/newFreeExercise
     * 
     * {
     *     source: 练习来源(1:练习题库 2:考试题库  3:家庭作业)   多个以逗号分开
        strategy:做题方式(1:未做题优先  2:错题优先)
        mode:做题模式(1:练习模式 2:考试模式)
        count:数量(30 50 100 200)
        exerciseTime:练习时间
     *     source: 练习来源(1:练习题库 2:考试题库  3:家庭作业)   多个以逗号分开
        strategy:做题方式(1:未做题优先  2:错题优先)
        mode:做题模式(1:练习模式 2:考试模式)
        count:数量(30 50 100 200)
        exerciseTime:练习时间
     * }
     * 
     * @return
@@ -697,7 +697,7 @@
            return null;
        }
        
        // 根据条件获取自由练习
        // 根据条件获取自由练习
        ExerItemResponseData result = exerciseVerService.doGetFreeExercise(
                null, source, strategy, mode, count, exerciseTime);
        
@@ -706,41 +706,41 @@
    
    
    /**
     * APP2.0: 提交练习答案
     * APP2.0: 提交练习答案
     * URL:    /exercise/Exercise/exerAnswers
     * 
     * 请求参数={
        "exerciseGroupId": 组id,
        EXERCISE_RECORD_ID: 记录id,
     * 请求参数={
        "exerciseGroupId": 组id,
        EXERCISE_RECORD_ID: 记录id,
        "exerciseExtendId": null, 
        "currTitleNum": "当前题号",
        "status": ״̬,
        "type": 练习类型,// 整型
        "doCount": 练习类型,
        "correctCount": 正确个数,
        "allCount":题目总数,
        "currTitleNum": "当前题号",
        "status": 状态,
        "type": 练习类型,// 整型
        "doCount": 练习类型,
        "correctCount": 正确个数,
        "allCount":题目总数,
        "items": [
            {
                "exerciseId": "练习id",
                "type": 练习类型,// 整数型
                "answer": "选择答案",
                "correct": 是否正确(0:错误 1:正确 2:未知)
                "exerciseId": "练习id",
                "type": 练习类型,// 整数型
                "answer": "选择答案",
                "correct": 是否正确(0:错误 1:正确 2:未知)
            }, 
            {
                "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":修改时间
        返回参数={
            "success":true,//true:成功 false:失败
            "attrs":{EXERCISE_RECORD_ID:练习记录id,
                    "updateTime":修改时间
             },
            "msg":"提交成功",//结果信息
            "msg":"提交成功",//结果信息
            }
     * 
@@ -751,7 +751,7 @@
    public @ResponseBody Object doSubmitExerAnswer(
            @RequestParam(value = "answers")  String answers)  {
        
        // 用户本次做题提交的数据
        // 用户本次做题提交的数据
        List<ExerciseItemAnswerData> lstAnswers = null;
        
        Result result = new Result(false);
@@ -759,12 +759,12 @@
        try {
            ObjectMapper mapper = new ObjectMapper();
            
            // 装换json到对象
            // 装换json到对象
            ExerciseSubmitAnswerData answerData = mapper.readValue(answers, ExerciseSubmitAnswerData.class);
            
            lstAnswers = answerData.getItems();
            
            // 记录id
            // 记录id
            String initExerciseRecordId = answerData.getExerciseRecordId();
                        
            if(lstAnswers.isEmpty() 
@@ -775,38 +775,38 @@
                        initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER,
                        ExerciseDataSubmitLog.STATUS_FAILED, "/exercise/Exercise/exerAnswers");
                
                return new Result(false,"提交数据异常");
                return new Result(false,"提交数据异常");
            }
                
            // 1.---------记录提交的数据日志
            // 记录提交的数据日志
            // 1.---------记录提交的数据日志
            // 记录提交的数据日志
            String exerciseDataLogId = exerciseVerService.doSaveExerciseDataSubmitLog(answers,
                    initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, 
                    ExerciseDataSubmitLog.STATUS_SUCCESS,"/exercise/Exercise/exerAnswers");
            
            // 2.-------- 提交答案
            // 操作练习数据
            // 2.-------- 提交答案
            // 操作练习数据
            Map<String,Object> resultMap = exerciseVerService.doOperExerciseAnswerData(answerData);
            
            result = new Result(true, "答案提交成功");
            result = new Result(true, "答案提交成功");
            result.setData(resultMap);
            
            // 3.-------- 班级统计数据
            // 3.-------- 班级统计数据
            if(resultMap.get("exerciseGroupId") != null){
                
                String exerciseGroupId = String.valueOf(resultMap.get("exerciseGroupId"));
                
                // 2.发送班级排名请求
                // 2.发送班级排名请求
                exerciseVerService.sendUpdateClassRankMsg(exerciseGroupId);
                
                // 3.发送 题目的全站统计 、个人统计、班级正确率请求消息
                // 3.发送 题目的全站统计 、个人统计、班级正确率请求消息
                exerciseVerService.sendUpdateExerItemStatisticsMsg(exerciseGroupId, answerData);
                //exerciseVerService.doStatisUserExerciseItemData(ClientUtils.getUserId(), ClientUtils.getUserName(), answerData);
            }
            
            // 4.---------更新本次提交的数据日志exerciseRecordId
            // 4.---------更新本次提交的数据日志exerciseRecordId
            if(StringUtils.isBlank(initExerciseRecordId) 
                    && resultMap.get(EXERCISE_RECORD_ID) != null){// 为空 说明第一次提交  更新日志记录id
                    && resultMap.get(EXERCISE_RECORD_ID) != null){// 为空 说明第一次提交  更新日志记录id
                
                exerciseRecordId = String.valueOf(resultMap.get(EXERCISE_RECORD_ID));
                
@@ -815,8 +815,8 @@
            
        } catch (Exception e) {
            
            result = new Result(false, "提交练习答案请求异常");
            log.error("提交练习答案请求异常===",e);
            result = new Result(false, "提交练习答案请求异常");
            log.error("提交练习答案请求异常===",e);
            
            exerciseVerService.doSaveExerciseDataSubmitLog(answers,
                    exerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER, 
@@ -828,44 +828,44 @@
    
    
    /**
     * APP2.0: 提交练习答案
     * APP2.0: 提交练习答案
     * URL:    /exercise/Exercise/exerAnswers
     * 
     * 请求参数=[{
        "exerciseGroupId": 组id,
        EXERCISE_RECORD_ID: 记录id,
     * 请求参数=[{
        "exerciseGroupId": 组id,
        EXERCISE_RECORD_ID: 记录id,
        "exerciseExtendId": null, 
        "currTitleNum": "当前题号",
        "status": ״̬,
        "type": 练习类型,// 整型
        "doCount": 练习类型,
        "correctCount": 正确个数,
        "allCount":题目总数,
        "currTitleNum": "当前题号",
        "status": 状态,
        "type": 练习类型,// 整型
        "doCount": 练习类型,
        "correctCount": 正确个数,
        "allCount":题目总数,
        "items": [
            {
                "exerciseId": "练习id",
                "type": 练习类型,// 整数型
                "answer": "选择答案",
                "correct": 是否正确(0:错误 1:正确 2:未知)
                "exerciseId": "练习id",
                "type": 练习类型,// 整数型
                "answer": "选择答案",
                "correct": 是否正确(0:错误 1:正确 2:未知)
            }, 
            {
                "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":修改时间
        返回参数={"success":true,//true:成功 false:失败
            "attrs":[{EXERCISE_RECORD_ID:练习记录id,
            exerciseGroupId:练习组id,
            isNewRecord:是否为新增的record(true:是 false:否)
            "updateTime":修改时间
            },...],
            "msg":"提交成功",//结果信息
            "msg":"提交成功",//结果信息
            }
     * 
@@ -876,7 +876,7 @@
    public @ResponseBody Object doSubmitMutiExerAnswer(
            @RequestParam(value = "answers")  String answers)  {
        
        // 用户本次做题提交的数据
        // 用户本次做题提交的数据
        List<ExerciseSubmitAnswerData> lstRecord = null;
        List<ExerciseItemAnswerData> lstAnswers= null;
        String exerciseRecordId = null;
@@ -890,7 +890,7 @@
        try {
            ObjectMapper mapper = new ObjectMapper();
            
            // 装换json到对象
            // 装换json到对象
            ExerciseSubmitAnswerDataList answerDataList = mapper.readValue(answers, ExerciseSubmitAnswerDataList.class);
            
            lstRecord = answerDataList.getDatas();
@@ -903,17 +903,17 @@
                    continue;
                }
                
                // 记录id
                // 记录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){// 仅提交 或仅仅本地无网重做
                        && answerData.getSubmitType() != 1){// 仅提交 或仅仅本地无网重做
                    
                    exerciseVerService.doSaveExerciseDataSubmitLog(recordData,
                            initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER,
@@ -922,36 +922,36 @@
                    continue;
                }
                
                // 1.---------记录提交的数据日志
                // 1.---------记录提交的数据日志
                String exerciseDataLogId = exerciseVerService.doSaveExerciseDataSubmitLog(recordData,
                        initExerciseRecordId, ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER,
                        ExerciseDataSubmitLog.STATUS_SUCCESS,"/exercise/Exercise/exerMutiAnswers");
                
                // 2.-------- 提交答案
                // 操作练习数据
                // 2.-------- 提交答案
                // 操作练习数据
                returnMap = exerciseVerService.doOperExerciseAnswerData(answerData);
                if(StringUtils.isBlank(initExerciseRecordId)){// 表示recordId为新增
                if(StringUtils.isBlank(initExerciseRecordId)){// 表示recordId为新增
                    returnMap.put("isNewRecord", true);
                }else{
                    returnMap.put("isNewRecord", false);
                }
                
                resultList.add(returnMap);
                // 3.-------- 班级统计数据;
                // 3.-------- 班级统计数据;
                if(returnMap.get("exerciseGroupId") != null){
                    
                    String exerciseGroupId = String.valueOf(returnMap.get("exerciseGroupId"));
                    
                    // 2.发送班级排名请求
                    // 2.发送班级排名请求
                    exerciseVerService.sendUpdateClassRankMsg(exerciseGroupId);
                    
                    // 3.发送 题目的全站统计  个人统计请求消息
                    // 3.发送 题目的全站统计  个人统计请求消息
                    exerciseVerService.sendUpdateExerItemStatisticsMsg(exerciseGroupId, answerData);
                }
                
                // 4.---------更新本次提交的数据日志exerciseRecordId
                // 4.---------更新本次提交的数据日志exerciseRecordId
                if(StringUtils.isBlank(initExerciseRecordId) 
                        && returnMap.get(EXERCISE_RECORD_ID) != null){// 为空 说明第一次提交  更新日志记录id
                        && returnMap.get(EXERCISE_RECORD_ID) != null){// 为空 说明第一次提交  更新日志记录id
                    
                    exerciseRecordId = String.valueOf(returnMap.get(EXERCISE_RECORD_ID));
                    
@@ -962,12 +962,12 @@
            
            resultMap.put("success", true);
            resultMap.put("attrs", resultList);
            resultMap.put("msg", "提交成功");
            resultMap.put("msg", "提交成功");
            
        } catch (Exception e) {
            
            log.error("提交练习答案请求异常===",e);
            resultMap.put("msg", "提交练习答案请求异常");
            log.error("提交练习答案请求异常===",e);
            resultMap.put("msg", "提交练习答案请求异常");
            
            exerciseVerService.doSaveExerciseDataSubmitLog(answers,
                    "exerMutiAnswers", ExerciseDataSubmitLog.TYPE_SUBMIT_ANSWER,
@@ -978,10 +978,10 @@
    }
    
    /**
     * APP2.0: 更新练习家庭作业、模拟考试是否提交
     * APP2.0: 更新练习家庭作业、模拟考试是否提交
     * URL:    /exercise/Exercise/updateHomeExerSubmitNew
     * 
     * @param exerciseRecordId     练习记录ID
     * @param exerciseRecordId     练习记录ID
     * @return
     */
    @RequestMapping(value = "updateHomeExerSubmitNew", method = RequestMethod.GET)
@@ -992,7 +992,7 @@
        ExerciseRecord record = commonDAO.read(ExerciseRecord.class, exerciseRecordId);
        if(record == null 
                || !ClientUtils.getUserId().equals(record.getUserId())){
            return new Result(false, "非法操作,不是当前用户操作");
            return new Result(false, "非法操作,不是当前用户操作");
        }
        
        record.setStatus(ExerciseRecord.STATUS_SUBMIT);
@@ -1002,10 +1002,10 @@
    } 
    
    /**
     * APP2.0: 更新练习家庭作业、模拟考试是否提交
     * APP2.0: 更新练习家庭作业、模拟考试是否提交
     * URL:    /exercise/Exercise/updateExerciseRecord
     * 
     * @param exerciseRecordId     练习记录ID
     * @param exerciseRecordId     练习记录ID
     * @return
     */
    @RequestMapping(value = "updateExerciseRecord", method = RequestMethod.GET)
@@ -1020,10 +1020,10 @@
    } 
    
    /**
     * APP2.0: 更新练习作业题号 app端重新开始做题
     * APP2.0: 更新练习作业题号 app端重新开始做题
     * URL:    /exercise/Exercise/updateNewExerRecordNew
     * 
     * @param groupId         习题组ID
     * @param groupId         习题组ID
     * @return
     */
    @RequestMapping(value = "updateNewExerRecordNew", method = RequestMethod.GET)
@@ -1032,26 +1032,26 @@
        
        Map<String,Object> map = exerciseVerService.doInsertExerRecord(groupId);
        Result result = new Result(true, "状态更新成功");
        Result result = new Result(true, "状态更新成功");
        result.setData(map);
        
        return result;
    } 
    
    /**
     * APP2.0: 题目答案分析
     * APP2.0: 题目答案分析
     * URL:    /exercise/Exercise/itemstatisics
     * 
     * 
     * 
     * @param groupId         习题组ID
     * @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;
@@ -1059,13 +1059,13 @@
    
    
    
    /** -----------------------------------------------APP V2.0接口 end--------------------------------------------------------*/
    /** -----------------------------------------------APP V2.0接口 end--------------------------------------------------------*/
    
    
    /**------------------------------  web 后端------------------------------------------------------------------------*/
    /**------------------------------  web 后端------------------------------------------------------------------------*/
    
    /**
     * 练习管理主页
     * 练习管理主页
     * 
     * @return
     */
@@ -1075,7 +1075,7 @@
    }
    
    /**
     * 机构练习管理主页
     * 机构练习管理主页
     * 
     * @return
     */
@@ -1085,9 +1085,9 @@
    }
    
    /**
     * (后台管理系统)
     * (后台管理系统)
     * 
     * 练习管理列表,获取列表数据
     * 练习管理列表,获取列表数据
     * 
     * @return
     */
@@ -1111,7 +1111,7 @@
        }
        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,
@@ -1135,9 +1135,9 @@
    }
    
    /**
     * (后台管理系统)
     * (后台管理系统)
     * 
     * 机构练习管理列表,获取列表数据
     * 机构练习管理列表,获取列表数据
     * 
     * @return
     */
@@ -1183,7 +1183,7 @@
    }
    
    /**
     * 查看练习已经指定的机构和班级
     * 查看练习已经指定的机构和班级
     * @param groupId
     * @return
     */
@@ -1233,7 +1233,7 @@
        return result;
    }
    /**
     * 获取练习组数据
     * 获取练习组数据
     * 
     * @return
     */
@@ -1250,7 +1250,7 @@
    }
    
    /**
     * 获取练习数据
     * 获取练习数据
     * 
     * @return
     */
@@ -1265,7 +1265,7 @@
    }
    
    /**
     * 获取练习数据
     * 获取练习数据
     * 
     * @return
     */
@@ -1316,10 +1316,10 @@
    
    
    /**
     * (后台管理系统)
     * 删除练习组(优化)
     * (后台管理系统)
     * 删除练习组(优化)
     * 
     * 更新20150907:更新习题组最后修改时间
     * 更新20150907:更新习题组最后修改时间
     * @return
     */
    @RequestMapping(value = "deleteNew", method = RequestMethod.POST)
@@ -1330,10 +1330,10 @@
    }
    
    /**
     * (后台管理系统)
     * 删除练习组(优化)
     * (后台管理系统)
     * 删除练习组(优化)
     * 
     * 更新20150907:更新习题组最后修改时间
     * 更新20150907:更新习题组最后修改时间
     * @return
     */
    @RequestMapping(value = "deleteOrg", method = RequestMethod.POST)
@@ -1346,7 +1346,7 @@
    
    
    /**
     * 获取习题列表
     * 获取习题列表
     * 
     * @return
     */
@@ -1361,8 +1361,8 @@
    }
    
    /**
     * (后台管理系统)
     *  管理员同步习题到班级
     * (后台管理系统)
     *  管理员同步习题到班级
     * 
     * @param exerciseItemId
     * @return
@@ -1376,10 +1376,10 @@
    }
    
    /**
     * (后台管理系统)
     * 增加习题
     * (后台管理系统)
     * 增加习题
     * 
     * 更新20150617:更新习题组最后修改时间
     * 更新20150617:更新习题组最后修改时间
     * @return
     */
    @RequestMapping(value = "item/addOrUpdate", method = RequestMethod.POST)
@@ -1422,7 +1422,7 @@
            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;
            }
@@ -1438,10 +1438,10 @@
                item.setTitle(params.getTitle());
                item.setType(type);
                item.setImgs(getExerciseTitleImgs(params.getTitle_imgsIds()));
                if(groupId.contains("#")){// groupid结尾多#
                if(groupId.contains("#")){// groupid结尾多#
                    groupId = groupId.substring(0, groupId.indexOf('#'));
                }
                // 练习不发系统通知
                // 练习不发系统通知
                //sendSysNotice(0, groupId);
                return exerciseService.insertExerciseItem(groupId, item, lstOptions,params.getAnalysis());    
            }else{
@@ -1449,7 +1449,7 @@
                item.setAnswer(answer);
                item.setTitle(params.getTitle());
                item.setType(type);
                // 练习不发系统通知
                // 练习不发系统通知
                //sendSysNotice(1, groupId);
                return exerciseService.updateExerciseItem(item, lstOptions,params.getAnalysis());    
            }
@@ -1458,7 +1458,7 @@
    
    
    /**
     * 得到正确答案
     * 得到正确答案
     * @param checkA
     * @param checkB
     * @param checkC
@@ -1470,7 +1470,7 @@
    private String getCorrectAnswer(ExerciseAddItemParams params,short type){
        StringBuffer answer = new StringBuffer(64);
        
        if(ExerciseItem.TYPE_TRUE_OR_FALSE==type){//判断
        if(ExerciseItem.TYPE_TRUE_OR_FALSE==type){//判断
            return params.getCheckA()?"True":params.getCheckB()?"False":null;
        }
        
@@ -1481,7 +1481,7 @@
            answer.append(',').append('B');
        }
        
        // 组装余下正确答案
        // 组装余下正确答案
        packagingCorrectAnswer(params, answer);
        
        String answers = answer.toString();
@@ -1494,7 +1494,7 @@
    }
    /**
     * 组装正确答案
     * 组装正确答案
     * @param checkC
     * @param checkD
     * @param checkE
@@ -1524,7 +1524,7 @@
    }
    
    /**
     * 组装正确答案
     * 组装正确答案
     * @param checkC
     * @param checkD
     * @param checkE
@@ -1556,12 +1556,12 @@
    }
    
    /**
     * 得到练习题目图片list
     * 得到练习题目图片list
     * @param title_imgsIds
     * @return
     */
    private List<ExerciseObjectImg> getExerciseTitleImgs(String title_imgsIds){
        if(StringUtils.isBlank(title_imgsIds)){//新增图片
        if(StringUtils.isBlank(title_imgsIds)){//新增图片
            return null;
        }
        String[] strImgsId = title_imgsIds.split(",");
@@ -1576,7 +1576,7 @@
    }
    
    /**
     * 创建习题选项
     * 创建习题选项
     * @param option
     * @param check
     * @param lstOptions
@@ -1590,7 +1590,7 @@
        }
        
        ExerciseItemOption a = new ExerciseItemOption();
        if(StringUtils.isNotBlank(optionId)){// 更新
        if(StringUtils.isNotBlank(optionId)){// 更新
            a.setOptionId(optionId);
        }else{
            if(StringUtils.isEmpty(option)){
@@ -1598,7 +1598,7 @@
            }
        }
        
        if(StringUtils.isNotBlank(imgsId)){//新增图片
        if(StringUtils.isNotBlank(imgsId)){//新增图片
            String[] strImgsId = imgsId.split(",");
            List<ExerciseObjectImg> imgs = new ArrayList<ExerciseObjectImg>(strImgsId.length);
            ExerciseObjectImg objImg = null;
@@ -1627,7 +1627,7 @@
    }
    
    /**
     * 更新习题
     * 更新习题
     * 
     * @return
     */
@@ -1638,9 +1638,9 @@
    }
    
    /**
     * (后台管理)
     * 删除习题
     * 更新20150617:更新习题组最后修改时间
     * (后台管理)
     * 删除习题
     * 更新20150617:更新习题组最后修改时间
     * 
     * @return
     */
@@ -1651,7 +1651,7 @@
    }
    
    /**
     * 根据classID获取所有课程
     * 根据classID获取所有课程
     * 
     * @return
     */ 
@@ -1666,7 +1666,7 @@
    }
    
    /**
     * 获取组名称
     * 获取组名称
     * 
     * @return
     */ 
@@ -1677,7 +1677,7 @@
        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){ // 章节练习 、 专项练习
        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());
@@ -1710,7 +1710,7 @@
    }
    
    /**
     * 编辑练习保存
     * 编辑练习保存
     * 
     * @return
     */ 
@@ -1721,7 +1721,7 @@
    }
    
    /**
     * 根据lessionId获取所有章节,排除掉当前班级
     * 根据lessionId获取所有章节,排除掉当前班级
     * 
     * @return
     */ 
@@ -1743,7 +1743,7 @@
    }
    
    /**
     * 根据classID获取顺序练习
     * 根据classID获取顺序练习
     * 
     * @return
     */ 
@@ -1754,7 +1754,7 @@
        
        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);
@@ -1764,7 +1764,7 @@
    }
    
    /**
     * 根据classID获取顺序练习
     * 根据classID获取顺序练习
     * 
     * @return
     */ 
@@ -1780,7 +1780,7 @@
    }
    
    /**
     * 新增练习
     * 新增练习
     * 
     * @return
     */
@@ -1791,7 +1791,7 @@
    }
    
    /**
     * 机构新增练习
     * 机构新增练习
     * 
     * @return
     */
@@ -1802,7 +1802,7 @@
    }
    
    /**
     * 机构指定练习
     * 机构指定练习
     * 
     * @return
     */
@@ -1813,7 +1813,7 @@
    }
    
    /**
     * ORG 获取机构科目列表
     * ORG 获取机构科目列表
     * 
     * @return
     */
@@ -1832,7 +1832,7 @@
    }
    
    /**
     * 新增图片路径到数据库
     * 新增图片路径到数据库
     * @param fullPaths
     * @param imgObjId
     * @param imgObjType
@@ -1849,13 +1849,13 @@
        }
        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){
@@ -1865,7 +1865,7 @@
        return result;
    }
    
    /** 查询图片路径 */
    /** 查询图片路径 */
    @RequestMapping(value = "queryExerObjImg",method = RequestMethod.POST)
    public @ResponseBody List<Map<String,Object>> doQueryExerciseObjImg(
            @RequestParam("imgObjId") String imgObjId,
@@ -1874,7 +1874,7 @@
            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);
        
@@ -1894,12 +1894,12 @@
    }
    
    /**
     * (后台管理系统:导入习题模块)
     *  导入习题-习题导入深度解析
     * (后台管理系统:导入习题模块)
     *  导入习题-习题导入深度解析
     * 
     * @param groupId 习题组ID
     * @param groupId 习题组ID
     * @param uuid uuid
     * @param fileName 文件名称
     * @param fileName 文件名称
     * @return
     */
    @RequestMapping(value = "/item/deepAnalysisDoc", method = RequestMethod.POST)
@@ -1912,12 +1912,12 @@
    
    
    /**
     * (后台管理系统:导入习题模块)
     *  导入习题-第一次将word解析结果返回给前台,并不保存到数据库
     * (后台管理系统:导入习题模块)
     *  导入习题-第一次将word解析结果返回给前台,并不保存到数据库
     *  
     * @param groupId 习题组ID
     * @param groupId 习题组ID
     * @param uuid uuid
     * @param fileName 文件名称
     * @param fileName 文件名称
     * @return
     */
    @RequestMapping(value = "/item/import/parser/{groupId}", method = RequestMethod.POST)
@@ -1929,10 +1929,10 @@
    }
    
    /**
     * (后台管理系统:导入习题模块)
     *  校验内容,返回解析结果
     * (后台管理系统:导入习题模块)
     *  校验内容,返回解析结果
     * 
     * @param content 文本内容
     * @param content 文本内容
     * @return
     */
    @RequestMapping(value = "/item/import/validateExercise", method = RequestMethod.POST)
@@ -1943,7 +1943,7 @@
    }
    
    /**
     * 获取所有班级,当前班级除外,增加过滤没有习题的班级
     * 获取所有班级,当前班级除外,增加过滤没有习题的班级
     * @return
     */
    @RequestMapping(value = "loadClasses", method = RequestMethod.GET)
@@ -1969,7 +1969,7 @@
    }
    
    /**
     * 复制习题
     * 复制习题
     * @param fromClassId
     * @return
     */
@@ -1981,7 +1981,7 @@
    }
    
    /**
     * 学员得分详情列表
     * 学员得分详情列表
     * @param groupId
     * @return
     */
@@ -1995,7 +1995,7 @@
    }
    
    /**
     * 初始化平均成绩和最高成绩
     * 初始化平均成绩和最高成绩
     * @param groupId
     * @return
     */
@@ -2008,7 +2008,7 @@
    }
    
    /**
     * 每道题得分详情
     * 每道题得分详情
     * @param groupId
     * @return
     */
@@ -2021,7 +2021,7 @@
    }
    
    /**
     * 加载题目选项详情 - 班级、机构
     * 加载题目选项详情 - 班级、机构
     * @param groupId
     * @return
     */
@@ -2034,7 +2034,7 @@
    }
    
    /**
     * 刷新更新统计
     * 刷新更新统计
     * @param groupId
     * @return
     */
@@ -2047,7 +2047,7 @@
    }
    
    /**
     * 导出练习每道题得分详情
     * 导出练习每道题得分详情
     * 
     * @return
     * @throws IOException 
@@ -2056,13 +2056,13 @@
    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 = { "序号","题号","题目", "类型", "正确答案","班级正确率","全站正确率"};
        String[] headers = { "序号","题号","题目", "类型", "正确答案","班级正确率","全站正确率"};
        
        obj.setHeaders(headers);
        obj.setLstColumn(new ArrayList<String>(Arrays.asList("itemNo","exerciseItemTitel","itemTypeName","correctAnswer","classAccuracyShow","orgAccuracyShow")));
@@ -2070,7 +2070,7 @@
        
        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.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);
@@ -2082,23 +2082,23 @@
    }
    
    /**
     * 导出练习学员得分详情
     * 导出练习学员得分详情
     * 
     * @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>>列表
        List<Map<String, Object>> userScoreMap = exerciseService.resultList(groupId);
        List<ExportUserScore> userLst = new ArrayList<ExportUserScore>(userScoreMap.size());
        ExportUserScore user = null;
        
        if(userScoreMap != null){
            // 将获取的Map列表转换为List列表
            // 将获取的Map列表转换为List列表
            for(Map<String, Object> userScore:userScoreMap){
                user = new ExportUserScore();
                user.setName(String.valueOf(userScore.get("name")));
@@ -2113,7 +2113,7 @@
            ExcelExportUtils<ExportUserScore> ex = new ExcelExportUtils<ExportUserScore>();
            ExcelExportParam<ExportUserScore> obj = new ExcelExportParam<ExportUserScore>();
            obj.setColData(userLst);
            String[] headers = { "排名","学员姓名","报名码","报名时间","手机号码", "提交时间", "成绩"};
            String[] headers = { "排名","学员姓名","报名码","报名时间","手机号码", "提交时间", "成绩"};
            
            obj.setHeaders(headers);
            obj.setLstColumn(new ArrayList<String>(Arrays.asList("name","salesCode","createTime","mobilePhone","submitTime","score")));
@@ -2121,7 +2121,7 @@
            
            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.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);
@@ -2136,7 +2136,7 @@
    
    
    /**
     * 习题组排序
     * 习题组排序
     * 
     * @param key
     * @return
@@ -2148,7 +2148,7 @@
    }
    
    /**
     * 习题排序
     * 习题排序
     * 
     * @param key
     * @return
@@ -2161,14 +2161,14 @@
    
    
    
    /******************************************py导入******************************************************************/
    /******************************************py导入******************************************************************/
    /**
     * (后台管理系统:导入习题模块)
     *  导入习题-第一次将word解析结果返回给前台,并不保存到数据库
     * (后台管理系统:导入习题模块)
     *  导入习题-第一次将word解析结果返回给前台,并不保存到数据库
     *  
     * @param groupId 习题组ID
     * @param groupId 习题组ID
     * @param uuid uuid
     * @param fileName 文件名称
     * @param fileName 文件名称
     * @return
     */
    @RequestMapping(value = "/item/importpy/parse/{groupId}", method = RequestMethod.POST)
@@ -2179,10 +2179,10 @@
    }
    
    /**
     * (后台管理系统:导入习题模块)
     *  校验内容,返回解析结果
     * (后台管理系统:导入习题模块)
     *  校验内容,返回解析结果
     * 
     * @param content 文本内容
     * @param content 文本内容
     * @return
     */
    @RequestMapping(value = "/item/importpy/validate", method = RequestMethod.POST)
@@ -2192,10 +2192,10 @@
    }
    
    /**
     * (后台管理系统:导入习题模块)
     *  导入内容,返回解析结果
     * (后台管理系统:导入习题模块)
     *  导入内容,返回解析结果
     * 
     * @param content 文本内容
     * @param content 文本内容
     * @return
     */
    @SuppressWarnings("unchecked")
@@ -2211,18 +2211,18 @@
            return exercisePyService.doImportPyExercise(lst,groupId);
            
        } catch (Exception e) {
            log.error("提交数据有误" + e );
            log.error("提交数据有误" + e );
        }
        
        return new Result(false,"解析json失败");
        return new Result(false,"解析json失败");
    }
    
    
    
    
    /**-----------------  问卷调查----start-----------------------------------*/
    /**-----------------  问卷调查----start-----------------------------------*/
    /**
     * 评估模块添加问答
     * 评估模块添加问答
     * 
     * @param jsonExerciseItemDTO
     * @return
@@ -2237,19 +2237,19 @@
        boolean mustAnswer = jsonObject.getBooleanValue("mustAnswer");
        short type = jsonObject.getShort("type");
        String analysis = jsonObject.getString("analysis");
        JSONArray titleImgs = jsonObject.getJSONArray("imags");// 题目的图片路径
        JSONArray titleImgs = jsonObject.getJSONArray("imags");// 题目的图片路径
        
        //获取选项
        //获取选项
        List<ExerciseItemOption> lstOptions = JSONArray.parseArray(jsonObject.getString("lstOptions"), ExerciseItemOption.class);
        ExerciseItem item = null;
        
        if(StringUtils.isEmpty(exerciseId)){// 新增
        if(StringUtils.isEmpty(exerciseId)){// 新增
            item = new ExerciseItem();
            item.setTitle(title);
            item.setType(type);
            item.setMustAnswer(mustAnswer);
            exerciseService.insertExerciseItem4Evaluate(groupId, item, lstOptions,analysis,titleImgs);
        }else{// 编辑
        }else{// 编辑
            item = this.commonDAO.read(ExerciseItem.class, exerciseId);
            item.setTitle(title);
            item.setType(type);
@@ -2264,7 +2264,7 @@
    
    
    /**
     * 获取问卷习题列表
     * 获取问卷习题列表
     * 
     * @return
     */
@@ -2277,9 +2277,9 @@
    }
    
    /**
     * 查看学员答卷情况
     * 查看学员答卷情况
     * 
     * @param recordId 答题记录id
     * @param recordId 答题记录id
     * @param schEvaluateId
     * @return
     */
@@ -2289,14 +2289,14 @@
        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,"参数为空");
            return new ResultJson(false,"参数为空");
        }
        
        List<Map<String,Object>> lstResult =  exerciseService.queryEvaExerciseObjImg(imgObjId, imgObjType);
@@ -2305,7 +2305,7 @@
    }
    
    /**
     * 新增图片路径到数据库
     * 新增图片路径到数据库
     * @param fullPaths
     * @param imgObjId
     * @param imgObjType
@@ -2322,13 +2322,13 @@
        }
        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){
@@ -2337,9 +2337,9 @@
        
        return result;
    }
    /**------------------  问卷调查----end------------------------------------*/
    /**------------------  问卷调查----end------------------------------------*/
    
    
    /**------------------------------  web 后端----end--------------------------------------------------------------------*/
    /**------------------------------  web 后端----end--------------------------------------------------------------------*/
    
}
Diff truncated after the above file
src/main/java/com/qxueyou/scc/exercise/action/ExerciseCorrectionController.java src/main/java/com/qxueyou/scc/exercise/action/ExerciseDeepAnaController.java src/main/java/com/qxueyou/scc/exercise/action/ExerciseExtendController.java src/main/java/com/qxueyou/scc/exercise/action/ExerciseGroupController.java src/main/java/com/qxueyou/scc/exercise/action/ExerciseInfoController.java src/main/java/com/qxueyou/scc/exercise/action/ExerciseItemController.java src/main/java/com/qxueyou/scc/exercise/dao/ExerciseDAO.java src/main/java/com/qxueyou/scc/exercise/model/ExciseAnswerResult.java src/main/java/com/qxueyou/scc/exercise/model/ExciseExtendReqData.java src/main/java/com/qxueyou/scc/exercise/model/ExciseExtendReqListData.java src/main/java/com/qxueyou/scc/exercise/model/ExciseExtendResult.java src/main/java/com/qxueyou/scc/exercise/model/ExerGroupResponseData.java src/main/java/com/qxueyou/scc/exercise/model/ExerItemResponseData.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseAddItemParams.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseAnalisisResult.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseAnswerData.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseChapter.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseCompleteInfo.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseCorrection.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseCorrectionImg.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseCorrectionResult.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseDataSubmitLog.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseDeepAnalysis.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseExamReGroup.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseExtendData.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseExtendRecordData.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultBook.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultRecord.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseFaultStatistics.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseFavoriteBook.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseFavoriteRecord.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroup.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroupExtend.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseGroupShareInfo.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseImportResult.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseInfo.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseItem.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnalisiU.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnswerData.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemAnswerU.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemOption.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemStatis.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseItemStatistics.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseObjectImg.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseOptionStatistics.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseParse.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseParseResult.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseReCourse.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseRecord.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseSubmitAnswerData.java src/main/java/com/qxueyou/scc/exercise/model/ExerciseSubmitAnswerDataList.java src/main/java/com/qxueyou/scc/exercise/service/IExerciseCompleteService.java src/main/java/com/qxueyou/scc/exercise/service/IExerciseCorrectionService.java src/main/java/com/qxueyou/scc/exercise/service/IExerciseDeepAnaService.java src/main/java/com/qxueyou/scc/exercise/service/IExerciseExtendService.java src/main/java/com/qxueyou/scc/exercise/service/IExerciseGroupService.java src/main/java/com/qxueyou/scc/exercise/service/IExerciseInfoService.java src/main/java/com/qxueyou/scc/exercise/service/IExercisePyService.java src/main/java/com/qxueyou/scc/exercise/service/IExerciseService.java src/main/java/com/qxueyou/scc/exercise/service/IExerciseVerService.java src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseCompleteService.java src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseCorrectionService.java src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseDeepAnaService.java src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseExtendService.java src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseGroupAccuracyDealService.java src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseGroupService.java src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseInfoService.java src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseItemStatisticsDealService.java src/main/java/com/qxueyou/scc/exercise/service/impl/ExercisePyService.java src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseService.java src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseStatisticsDealService.java src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseSysMsgDealService.java src/main/java/com/qxueyou/scc/exercise/service/impl/ExerciseVerService.java src/main/java/com/qxueyou/scc/exercise/service/impl/Handler.java src/main/java/com/qxueyou/scc/exercise/service/impl/ParseResult.java src/main/java/com/qxueyou/scc/exercise/service/impl/node/Doc.java src/main/java/com/qxueyou/scc/exercise/service/impl/node/Item.java src/main/java/com/qxueyou/scc/exercise/service/impl/parser/DocParser.java src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemAnalysisParser.java src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemAnswerParser.java src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemParser.java src/main/java/com/qxueyou/scc/exercise/service/impl/parser/ItemTypeParser.java src/main/java/com/qxueyou/scc/exercise/service/impl/parser/OptionParser.java src/main/java/com/qxueyou/scc/exercise/timer/ExerciseTimer.java src/main/java/com/qxueyou/scc/exercise/util/ExerciseUtils.java src/main/java/com/qxueyou/scc/media/dao/MediaVideoDAO.java src/main/java/com/qxueyou/scc/media/model/MediaVideo.java src/main/java/com/qxueyou/scc/media/model/MediaVideoCache.java src/main/java/com/qxueyou/scc/media/model/MediaVideoReCourse.java src/main/java/com/qxueyou/scc/media/model/MediaVideoRecord.java src/main/java/com/qxueyou/scc/media/model/MediaVideoStatistic.java src/main/java/com/qxueyou/scc/media/model/MediaVideoTrans.java src/main/java/com/qxueyou/scc/media/model/MediaVideoViewVO.java src/main/java/com/qxueyou/scc/media/model/SchLiveReVideo.java src/main/java/com/qxueyou/scc/media/model/VideoConverTask.java src/main/java/com/qxueyou/scc/media/model/VideoInf.java src/main/java/com/qxueyou/scc/media/model/VideoLiveChatroom.java src/main/java/com/qxueyou/scc/media/model/VideoLiveViewVO.java src/main/java/com/qxueyou/scc/media/model/VideoRecordDTO.java src/main/java/com/qxueyou/scc/media/service/IMediaVideoService.java src/main/java/com/qxueyou/scc/msg/model/Message.java src/main/java/com/qxueyou/scc/msg/model/MsgChatroomMsg.java src/main/java/com/qxueyou/scc/msg/model/MsgFriend.java src/main/java/com/qxueyou/scc/msg/model/MsgGroup.java src/main/java/com/qxueyou/scc/msg/model/MsgGroupUserRe.java src/main/java/com/qxueyou/scc/msg/model/MsgInfo.java src/main/java/com/qxueyou/scc/msg/model/MsgUser.java src/main/java/com/qxueyou/scc/msg/service/IMsgInfoService.java src/main/java/com/qxueyou/scc/msg/service/impl/ChatroomMessageBean.java src/main/java/com/qxueyou/scc/msg/service/impl/MsgInfoService.java src/main/java/com/qxueyou/scc/notice/model/Notice.java src/main/java/com/qxueyou/scc/operation/comment/mode/Comment.java src/main/java/com/qxueyou/scc/operation/comment/mode/CommentImg.java src/main/java/com/qxueyou/scc/operation/comment/mode/CommentObject.java src/main/java/com/qxueyou/scc/operation/comment/mode/CommentPraise.java src/main/java/com/qxueyou/scc/operation/comment/mode/SnsCommentToMe.java src/main/java/com/qxueyou/scc/operation/comment/mode/SnsMyComment.java src/main/java/com/qxueyou/scc/operation/comment/mode/SnsMyPraise.java src/main/java/com/qxueyou/scc/operation/comment/mode/SnsPraiseToMe.java src/main/java/com/qxueyou/scc/operation/topic/action/StuTopicController.java src/main/java/com/qxueyou/scc/operation/topic/model/TopicClassRe.java src/main/java/com/qxueyou/scc/operation/topic/model/TopicInfo.java src/main/java/com/qxueyou/scc/operation/topic/service/ITopicService.java src/main/java/com/qxueyou/scc/operation/topic/service/impl/TopicService.java src/main/java/com/qxueyou/scc/org/dao/OrgCourseDAO.java src/main/java/com/qxueyou/scc/org/dao/OrgDAO.java src/main/java/com/qxueyou/scc/org/model/DiscoverBanner.java src/main/java/com/qxueyou/scc/org/model/ExternelTeacherInfo.java src/main/java/com/qxueyou/scc/org/model/OrgAppInfo.java src/main/java/com/qxueyou/scc/org/model/OrgAppMenu.java src/main/java/com/qxueyou/scc/org/model/OrgBank.java src/main/java/com/qxueyou/scc/org/model/OrgBankAccount.java src/main/java/com/qxueyou/scc/org/model/OrgBanner.java src/main/java/com/qxueyou/scc/org/model/OrgCategoryLevel.java src/main/java/com/qxueyou/scc/org/model/OrgClass.java src/main/java/com/qxueyou/scc/org/model/OrgClassBanner.java src/main/java/com/qxueyou/scc/org/model/OrgClassQueryCm.java src/main/java/com/qxueyou/scc/org/model/OrgClassReTeacher.java src/main/java/com/qxueyou/scc/org/model/OrgClassReUser.java src/main/java/com/qxueyou/scc/org/model/OrgClassUserCustom.java src/main/java/com/qxueyou/scc/org/model/OrgCollege.java src/main/java/com/qxueyou/scc/org/model/OrgCollegeCourse.java src/main/java/com/qxueyou/scc/org/model/OrgCollegePublic.java src/main/java/com/qxueyou/scc/org/model/OrgCourse.java src/main/java/com/qxueyou/scc/org/model/OrgCourseCateData.java src/main/java/com/qxueyou/scc/org/model/OrgCourseCategory.java src/main/java/com/qxueyou/scc/org/model/OrgCourseData.java src/main/java/com/qxueyou/scc/org/model/OrgCourseJsonData.java src/main/java/com/qxueyou/scc/org/model/OrgMarketPrivilege.java src/main/java/com/qxueyou/scc/org/model/OrgNewUserModel.java src/main/java/com/qxueyou/scc/org/model/OrgPhotoalbum.java src/main/java/com/qxueyou/scc/org/model/OrgPrivilege.java src/main/java/com/qxueyou/scc/org/model/OrgReCollegePublic.java src/main/java/com/qxueyou/scc/org/model/OrgSalesman.java src/main/java/com/qxueyou/scc/org/model/OrgStringExtend.java src/main/java/com/qxueyou/scc/org/model/OrgStudent.java src/main/java/com/qxueyou/scc/org/model/OrgTeacher.java src/main/java/com/qxueyou/scc/org/model/OrgText.java src/main/java/com/qxueyou/scc/org/model/Organization.java src/main/java/com/qxueyou/scc/org/model/OrganizationExtend.java src/main/java/com/qxueyou/scc/org/service/IOrgClassService.java src/main/java/com/qxueyou/scc/org/service/IOrgClassTeacherService.java src/main/java/com/qxueyou/scc/org/service/IOrgTextService.java src/main/java/com/qxueyou/scc/org/service/IOrganizationService.java src/main/java/com/qxueyou/scc/org/service/ITeacherService.java src/main/java/com/qxueyou/scc/org/service/impl/OrgClassTeacherService.java src/main/java/com/qxueyou/scc/org/service/impl/OrgTextService.java src/main/java/com/qxueyou/scc/org/service/impl/OrganizationService.java src/main/java/com/qxueyou/scc/org/util/CourseMarketUtils.java src/main/java/com/qxueyou/scc/portal/information/model/Information.java src/main/java/com/qxueyou/scc/school/action/ArticleController.java src/main/java/com/qxueyou/scc/school/action/StudentScoreController.java src/main/java/com/qxueyou/scc/school/dao/EvaluateDAO.java src/main/java/com/qxueyou/scc/school/dao/HandoutDAO.java src/main/java/com/qxueyou/scc/school/dao/InteractDAO.java src/main/java/com/qxueyou/scc/school/dao/LessonDAO.java src/main/java/com/qxueyou/scc/school/dao/RankDAO.java src/main/java/com/qxueyou/scc/school/dao/SignDAO.java src/main/java/com/qxueyou/scc/school/helper/IJudgeLimitStrategy.java src/main/java/com/qxueyou/scc/school/helper/IJudgeUpdateStrategy.java src/main/java/com/qxueyou/scc/school/helper/judge/CommonJudgeStrategy.java src/main/java/com/qxueyou/scc/school/model/ClassCardTemplet.java src/main/java/com/qxueyou/scc/school/model/EvaluateStuStudentV.java src/main/java/com/qxueyou/scc/school/model/EvaluateStuStudentVId.java src/main/java/com/qxueyou/scc/school/model/HandoutAnswerData.java src/main/java/com/qxueyou/scc/school/model/HandoutAnswerResult.java src/main/java/com/qxueyou/scc/school/model/HandoutConverTask.java src/main/java/com/qxueyou/scc/school/model/InteractResultData.java src/main/java/com/qxueyou/scc/school/model/InterateAnswer.java src/main/java/com/qxueyou/scc/school/model/LessionSignStatistics.java src/main/java/com/qxueyou/scc/school/model/SchArticle.java src/main/java/com/qxueyou/scc/school/model/SchArticleReCourse.java src/main/java/com/qxueyou/scc/school/model/SchArticleStatistic.java src/main/java/com/qxueyou/scc/school/model/SchChapter.java src/main/java/com/qxueyou/scc/school/model/SchClassCard.java src/main/java/com/qxueyou/scc/school/model/SchClassCardTemplet.java src/main/java/com/qxueyou/scc/school/model/SchClassCourseware.java src/main/java/com/qxueyou/scc/school/model/SchClassSchedule.java src/main/java/com/qxueyou/scc/school/model/SchClassSubject.java src/main/java/com/qxueyou/scc/school/model/SchCourseware.java src/main/java/com/qxueyou/scc/school/model/SchEvaRecordRe.java src/main/java/com/qxueyou/scc/school/model/SchEvaluate.java src/main/java/com/qxueyou/scc/school/model/SchEvaluateDetail.java src/main/java/com/qxueyou/scc/school/model/SchEvaluateTemplate.java src/main/java/com/qxueyou/scc/school/model/SchFile.java src/main/java/com/qxueyou/scc/school/model/SchHandout.java src/main/java/com/qxueyou/scc/school/model/SchHandoutPage.java src/main/java/com/qxueyou/scc/school/model/SchHandoutReCourse.java src/main/java/com/qxueyou/scc/school/model/SchHandoutRecord.java src/main/java/com/qxueyou/scc/school/model/SchHandoutRecordDetail.java src/main/java/com/qxueyou/scc/school/model/SchHandoutStatistic.java src/main/java/com/qxueyou/scc/school/model/SchImg.java src/main/java/com/qxueyou/scc/school/model/SchInteract.java src/main/java/com/qxueyou/scc/school/model/SchInteractResult.java src/main/java/com/qxueyou/scc/school/model/SchNote.java src/main/java/com/qxueyou/scc/school/model/SchQRUrl.java src/main/java/com/qxueyou/scc/school/model/SchRank.java src/main/java/com/qxueyou/scc/school/model/SchRankHis.java src/main/java/com/qxueyou/scc/school/model/SchRankVer.java src/main/java/com/qxueyou/scc/school/model/SchReClassUser.java src/main/java/com/qxueyou/scc/school/model/SchReLessonLiveVideo.java src/main/java/com/qxueyou/scc/school/model/SchReLessonPeriod.java src/main/java/com/qxueyou/scc/school/model/SchReLessonVideo.java src/main/java/com/qxueyou/scc/school/model/SchScheduleAddress.java src/main/java/com/qxueyou/scc/school/model/SchSchoolDay.java src/main/java/com/qxueyou/scc/school/model/SchSchoolDayItem.java src/main/java/com/qxueyou/scc/school/model/SchSchoolYear.java src/main/java/com/qxueyou/scc/school/model/SchSign.java src/main/java/com/qxueyou/scc/school/model/SchSignCode.java src/main/java/com/qxueyou/scc/school/model/SchSignItem.java src/main/java/com/qxueyou/scc/school/model/SchSignOrder.java src/main/java/com/qxueyou/scc/school/model/SchSignStatistics.java src/main/java/com/qxueyou/scc/school/model/SchSpreadFootprint.java src/main/java/com/qxueyou/scc/school/model/SchStudentAchievement.java src/main/java/com/qxueyou/scc/school/model/SchStudentSchedule.java src/main/java/com/qxueyou/scc/school/model/SchStudyReport.java src/main/java/com/qxueyou/scc/school/model/SchSubjectExtend.java src/main/java/com/qxueyou/scc/school/model/SchSubjectReCourse.java src/main/java/com/qxueyou/scc/school/model/SchTerm.java src/main/java/com/qxueyou/scc/school/model/SchTermReDay.java src/main/java/com/qxueyou/scc/school/model/SchVideoFile.java src/main/java/com/qxueyou/scc/school/model/SchYearReClass.java src/main/java/com/qxueyou/scc/school/model/SchYearReOrg.java src/main/java/com/qxueyou/scc/school/model/SignResult.java src/main/java/com/qxueyou/scc/school/model/SignScreenResult.java src/main/java/com/qxueyou/scc/school/model/SignStatisResult.java src/main/java/com/qxueyou/scc/school/model/StudentEvaCategory.java src/main/java/com/qxueyou/scc/school/model/TeachEvaScoreData.java src/main/java/com/qxueyou/scc/school/model/TeachEvaScoreResult.java src/main/java/com/qxueyou/scc/school/model/viewvo/SchNoteViewVO.java src/main/java/com/qxueyou/scc/school/model/viewvo/SchSemesterViewVO.java src/main/java/com/qxueyou/scc/school/model/viewvo/SchStudentScheduleViewVO.java src/main/java/com/qxueyou/scc/school/model/viewvo/SchWeekScheduleViewVO.java src/main/java/com/qxueyou/scc/school/model/viewvo/SchYearViewVO.java src/main/java/com/qxueyou/scc/school/service/IArticleService.java src/main/java/com/qxueyou/scc/school/service/IClassCardService.java src/main/java/com/qxueyou/scc/school/service/IClassCircleService.java src/main/java/com/qxueyou/scc/school/service/ICourseWareService.java src/main/java/com/qxueyou/scc/school/service/IDocdealMsgSenderService.java src/main/java/com/qxueyou/scc/school/service/IHandoutService.java src/main/java/com/qxueyou/scc/school/service/IInteractService.java src/main/java/com/qxueyou/scc/school/service/ILessonService.java src/main/java/com/qxueyou/scc/school/service/INoteService.java src/main/java/com/qxueyou/scc/school/service/IRankService.java src/main/java/com/qxueyou/scc/school/service/ISchoolDayService.java src/main/java/com/qxueyou/scc/school/service/ISchoolTermService.java src/main/java/com/qxueyou/scc/school/service/ISchoolYearService.java src/main/java/com/qxueyou/scc/school/service/IScoreChangeService.java src/main/java/com/qxueyou/scc/school/service/ISignService.java src/main/java/com/qxueyou/scc/school/service/ISpreadFootprintService.java src/main/java/com/qxueyou/scc/school/service/IStudentScoreService.java src/main/java/com/qxueyou/scc/school/service/IStudyReportService.java src/main/java/com/qxueyou/scc/school/service/impl/ArticleService.java src/main/java/com/qxueyou/scc/school/service/impl/ClassCardService.java src/main/java/com/qxueyou/scc/school/service/impl/ClassCircleService.java src/main/java/com/qxueyou/scc/school/service/impl/CoursewareService.java src/main/java/com/qxueyou/scc/school/service/impl/DocdealMsgDealService.java src/main/java/com/qxueyou/scc/school/service/impl/DocdealMsgSenderService.java src/main/java/com/qxueyou/scc/school/service/impl/HandoutConvertPDFDealService.java src/main/java/com/qxueyou/scc/school/service/impl/HandoutService.java src/main/java/com/qxueyou/scc/school/service/impl/InteactService.java src/main/java/com/qxueyou/scc/school/service/impl/LessonService.java src/main/java/com/qxueyou/scc/school/service/impl/NoteService.java src/main/java/com/qxueyou/scc/school/service/impl/RankMsgDealService.java src/main/java/com/qxueyou/scc/school/service/impl/RankService.java src/main/java/com/qxueyou/scc/school/service/impl/SchSignMsgDealService.java src/main/java/com/qxueyou/scc/school/service/impl/SchoolDayService.java src/main/java/com/qxueyou/scc/school/service/impl/SchoolTermService.java src/main/java/com/qxueyou/scc/school/service/impl/SchoolYearService.java src/main/java/com/qxueyou/scc/school/service/impl/SignService.java src/main/java/com/qxueyou/scc/school/service/impl/SpreadFootprintService.java src/main/java/com/qxueyou/scc/school/service/impl/StudentsScoreService.java src/main/java/com/qxueyou/scc/school/service/impl/StudyReportService.java src/main/java/com/qxueyou/scc/school/service/impl/VideoIssueStopDealService.java src/main/java/com/qxueyou/scc/school/service/impl/WBONSProducer.java src/main/java/com/qxueyou/scc/school/util/StudentEvaUtils.java src/main/java/com/qxueyou/scc/school/util/StudyReportUtils.java src/main/java/com/qxueyou/scc/shorturl/util/ShortUrlUtils.java src/main/java/com/qxueyou/scc/sms/model/Sms.java src/main/java/com/qxueyou/scc/sms/model/SmsConfig.java src/main/java/com/qxueyou/scc/sms/model/SmsContants.java src/main/java/com/qxueyou/scc/sms/utils/SmsUtils.java src/main/java/com/qxueyou/scc/statistic/model/SchFlowStatisticDetail.java src/main/java/com/qxueyou/scc/stucontroller/HomePageController.java src/main/java/com/qxueyou/scc/stucontroller/StuExamController.java src/main/java/com/qxueyou/scc/stucontroller/StuExerciseController.java src/main/java/com/qxueyou/scc/stucontroller/StuLiveController.java src/main/java/com/qxueyou/scc/stucontroller/StuNoticeController.java src/main/java/com/qxueyou/scc/stucontroller/StuResController.java src/main/java/com/qxueyou/scc/stucontroller/StuSubjectController.java src/main/java/com/qxueyou/scc/sys/action/ImgController.java src/main/java/com/qxueyou/scc/sys/action/LoginController.java src/main/java/com/qxueyou/scc/sys/model/CacheParamters.java src/main/java/com/qxueyou/scc/sys/model/ResponseResult.java src/main/java/com/qxueyou/scc/sys/model/SysButton.java src/main/java/com/qxueyou/scc/sys/model/SysCondition.java src/main/java/com/qxueyou/scc/sys/model/SysConfigFile.java src/main/java/com/qxueyou/scc/sys/model/SysLog.java src/main/java/com/qxueyou/scc/sys/service/IAuthorizeService.java src/main/java/com/qxueyou/scc/sys/service/IOssService.java src/main/java/com/qxueyou/scc/sys/service/IPrivilegeService.java src/main/java/com/qxueyou/scc/sys/service/ISysAttachmentService.java src/main/java/com/qxueyou/scc/sys/service/impl/OssService.java src/main/java/com/qxueyou/scc/sys/service/impl/PriviledgeService.java src/main/java/com/qxueyou/scc/sys/service/impl/SysAttachmentService.java src/main/java/com/qxueyou/scc/sys/service/impl/VideoOssService.java src/main/java/com/qxueyou/scc/sys/utils/AudioUtil.java src/main/java/com/qxueyou/scc/sys/utils/DrawingUtil.java src/main/java/com/qxueyou/scc/sys/utils/SpringContextHolder.java src/main/java/com/qxueyou/scc/sys/utils/VideoUtil.java src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLive.java src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveClip.java src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveClipVer.java src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveExtend.java src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveOrder.java src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveRecord.java src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveReplay.java src/main/java/com/qxueyou/scc/teach/live/model/MediaVideoLiveReplayReClip.java src/main/java/com/qxueyou/scc/teach/live/service/IMediaLiveService.java src/main/java/com/qxueyou/scc/teach/live/service/IMediaVideoLivePlayBackService.java src/main/java/com/qxueyou/scc/teach/live/service/impl/MediaLiveService.java src/main/java/com/qxueyou/scc/teach/live/service/impl/MediaVideoLivePlayBackService.java src/main/java/com/qxueyou/scc/teach/live/utils/FfmpegFileVO.java src/main/java/com/qxueyou/scc/teach/live/utils/FfmpegMediaHelper.java src/main/java/com/qxueyou/scc/teach/live/utils/FfmpegVideoInfo.java src/main/java/com/qxueyou/scc/teach/res/model/ResItemAudio.java src/main/java/com/qxueyou/scc/teach/res/model/ResItemDoc.java src/main/java/com/qxueyou/scc/teach/res/model/ResItemVideo.java src/main/java/com/qxueyou/scc/teach/res/service/IFileService.java src/main/java/com/qxueyou/scc/teach/res/service/IResAudioService.java src/main/java/com/qxueyou/scc/teach/res/service/IResItemService.java src/main/java/com/qxueyou/scc/teach/res/service/IResService.java src/main/java/com/qxueyou/scc/teach/res/service/impl/FileService.java src/main/java/com/qxueyou/scc/teach/res/service/impl/ResService.java src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemAudioService.java src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemDocService.java src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemVideoService.java src/main/java/com/qxueyou/scc/teach/student/model/StuStudent.java src/main/java/com/qxueyou/scc/teach/student/service/IStudentService.java src/main/java/com/qxueyou/scc/teach/student/service/impl/StudentService.java src/main/java/com/qxueyou/scc/teach/subject/model/Subject.java src/main/java/com/qxueyou/scc/teach/subject/model/SubjectUtils.java src/main/java/com/qxueyou/scc/teach/subject/service/ILectureService.java src/main/java/com/qxueyou/scc/teach/subject/service/ISubjectService.java src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectLectureService.java src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java src/main/java/com/qxueyou/scc/user/dao/RegistrationDAO.java src/main/java/com/qxueyou/scc/user/dao/UserRoleDAO.java src/main/java/com/qxueyou/scc/user/model/User.java src/main/java/com/qxueyou/scc/user/model/UserAuthorizeTrace.java src/main/java/com/qxueyou/scc/user/model/UserExtend.java src/main/java/com/qxueyou/scc/user/model/UserRegistration.java src/main/java/com/qxueyou/scc/user/model/UserSign.java src/main/java/com/qxueyou/scc/user/model/UserStudent.java src/main/java/com/qxueyou/scc/user/service/IUserOperateService.java src/main/java/com/qxueyou/scc/user/service/IUserRegistrationService.java src/main/java/com/qxueyou/scc/user/service/IUserRoleService.java src/main/java/com/qxueyou/scc/user/service/IUserService.java src/main/java/com/qxueyou/scc/user/service/IUserSignService.java src/main/java/com/qxueyou/scc/user/service/impl/UserOperateService.java src/main/java/com/qxueyou/scc/user/service/impl/UserRoleService.java src/main/java/com/qxueyou/scc/user/service/impl/UserService.java src/main/java/com/qxueyou/scc/user/util/ExcelReader.java src/main/java/com/qxueyou/scc/web/AuthorizeFilter.java src/main/resources/application.properties