Showing preview only (2,050K chars total). Download the full file or copy to clipboard to get everything.
Repository: simplefanC/voj
Branch: main
Commit: ebd50f61798b
Files: 683
Total size: 1.7 MB
Directory structure:
gitextract_uh972pfn/
├── .gitignore
├── LICENSE
├── README.md
├── docs/
│ ├── package.json
│ └── src/
│ ├── .vuepress/
│ │ ├── config.ts
│ │ ├── navbar.ts
│ │ ├── sidebar.ts
│ │ ├── styles/
│ │ │ ├── index.scss
│ │ │ └── palette.scss
│ │ └── theme.ts
│ ├── README.md
│ ├── deploy/
│ │ ├── README.md
│ │ ├── docker.md
│ │ ├── how-to-backup.md
│ │ ├── multi-judgeserver.md
│ │ ├── open-https.md
│ │ └── update.md
│ ├── develop/
│ │ ├── db.md
│ │ ├── judge_dispatcher.md
│ │ ├── sandbox.md
│ │ └── update-fe.md
│ ├── introduction/
│ │ ├── README.md
│ │ └── architecture.md
│ ├── monomer/
│ │ ├── backend.md
│ │ ├── frontend.md
│ │ ├── judgeserver.md
│ │ ├── mysql-checker.md
│ │ ├── mysql.md
│ │ ├── nacos.md
│ │ ├── redis.md
│ │ └── rsync.md
│ └── use/
│ ├── admin-user.md
│ ├── close-free-cdn.md
│ ├── contest.md
│ ├── custom-difficulty.md
│ ├── discussion-admin.md
│ ├── import-problem.md
│ ├── import-user.md
│ ├── judge-mode.md
│ ├── notice-announcement.md
│ ├── testcase.md
│ └── training.md
├── pom.xml
├── voj-backend/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ ├── alibaba/
│ │ │ │ └── druid/
│ │ │ │ └── pool/
│ │ │ │ └── DruidAbstractDataSource.java
│ │ │ └── simplefanc/
│ │ │ └── voj/
│ │ │ └── backend/
│ │ │ ├── BackendApplication.java
│ │ │ ├── cache/
│ │ │ │ ├── CacheTypeManager.java
│ │ │ │ ├── DoubleCache.java
│ │ │ │ └── DoubleCacheManager.java
│ │ │ ├── common/
│ │ │ │ ├── annotation/
│ │ │ │ │ └── Access.java
│ │ │ │ ├── constants/
│ │ │ │ │ ├── AccessEnum.java
│ │ │ │ │ ├── CallJudgerType.java
│ │ │ │ │ ├── Constant.java
│ │ │ │ │ ├── EmailConstant.java
│ │ │ │ │ ├── FileConstant.java
│ │ │ │ │ ├── FileTypeEnum.java
│ │ │ │ │ ├── QueueConstant.java
│ │ │ │ │ ├── RoleEnum.java
│ │ │ │ │ ├── ScheduleConstant.java
│ │ │ │ │ ├── TrainingEnum.java
│ │ │ │ │ └── UserStatusEnum.java
│ │ │ │ ├── exception/
│ │ │ │ │ ├── StatusAccessDeniedException.java
│ │ │ │ │ ├── StatusFailException.java
│ │ │ │ │ ├── StatusForbiddenException.java
│ │ │ │ │ ├── StatusNotFoundException.java
│ │ │ │ │ ├── StatusSystemErrorException.java
│ │ │ │ │ └── advice/
│ │ │ │ │ └── GlobalExceptionAdvice.java
│ │ │ │ └── utils/
│ │ │ │ ├── ConfigUtil.java
│ │ │ │ ├── ExcelUtil.java
│ │ │ │ ├── JwtUtil.java
│ │ │ │ ├── MyFileUtil.java
│ │ │ │ ├── RedisUtil.java
│ │ │ │ └── RestTemplateUtil.java
│ │ │ ├── config/
│ │ │ │ ├── CacheConfig.java
│ │ │ │ ├── CommonAsyncTaskConfig.java
│ │ │ │ ├── ConfigVO.java
│ │ │ │ ├── CorsConfig.java
│ │ │ │ ├── DruidConfiguration.java
│ │ │ │ ├── JudgeAsyncTaskConfig.java
│ │ │ │ ├── MyMetaObjectConfig.java
│ │ │ │ ├── MybatisPlusConfig.java
│ │ │ │ ├── NacosConfig.java
│ │ │ │ ├── RedisConfig.java
│ │ │ │ ├── RestTemplateConfig.java
│ │ │ │ ├── ShiroConfig.java
│ │ │ │ ├── StartupRunner.java
│ │ │ │ ├── SwaggerConfig.java
│ │ │ │ └── property/
│ │ │ │ ├── DoubleCacheProperties.java
│ │ │ │ ├── EmailRuleBO.java
│ │ │ │ ├── FilePathProperties.java
│ │ │ │ └── RemoteAccountProperties.java
│ │ │ ├── controller/
│ │ │ │ ├── admin/
│ │ │ │ │ ├── AdminContestController.java
│ │ │ │ │ ├── AdminDiscussionController.java
│ │ │ │ │ ├── AdminJudgeController.java
│ │ │ │ │ ├── AdminProblemController.java
│ │ │ │ │ ├── AdminTagController.java
│ │ │ │ │ ├── AdminTrainingCategoryController.java
│ │ │ │ │ ├── AdminTrainingController.java
│ │ │ │ │ ├── AdminUserController.java
│ │ │ │ │ ├── AnnouncementController.java
│ │ │ │ │ ├── ConfigController.java
│ │ │ │ │ ├── DashboardController.java
│ │ │ │ │ └── SwitchController.java
│ │ │ │ ├── file/
│ │ │ │ │ ├── ContestFileController.java
│ │ │ │ │ ├── ImageController.java
│ │ │ │ │ ├── ImportFpsProblemController.java
│ │ │ │ │ ├── ImportLOJProblemController.java
│ │ │ │ │ ├── ImportQDUOJProblemController.java
│ │ │ │ │ ├── MarkDownFileController.java
│ │ │ │ │ ├── ProblemFileController.java
│ │ │ │ │ ├── TestCaseController.java
│ │ │ │ │ └── UserFileController.java
│ │ │ │ ├── msg/
│ │ │ │ │ ├── AdminNoticeController.java
│ │ │ │ │ ├── NoticeController.java
│ │ │ │ │ └── UserMessageController.java
│ │ │ │ └── oj/
│ │ │ │ ├── AccountController.java
│ │ │ │ ├── CommentController.java
│ │ │ │ ├── CommonController.java
│ │ │ │ ├── ContestAdminController.java
│ │ │ │ ├── ContestController.java
│ │ │ │ ├── ContestScoreboardController.java
│ │ │ │ ├── DiscussionController.java
│ │ │ │ ├── HomeController.java
│ │ │ │ ├── JudgeController.java
│ │ │ │ ├── PassportController.java
│ │ │ │ ├── ProblemController.java
│ │ │ │ ├── RankController.java
│ │ │ │ └── TrainingController.java
│ │ │ ├── dao/
│ │ │ │ ├── common/
│ │ │ │ │ ├── AnnouncementEntityService.java
│ │ │ │ │ ├── FileEntityService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── AnnouncementEntityServiceImpl.java
│ │ │ │ │ └── FileEntityEntityServiceImpl.java
│ │ │ │ ├── contest/
│ │ │ │ │ ├── ContestAnnouncementEntityService.java
│ │ │ │ │ ├── ContestEntityService.java
│ │ │ │ │ ├── ContestPrintEntityService.java
│ │ │ │ │ ├── ContestProblemEntityService.java
│ │ │ │ │ ├── ContestRecordEntityService.java
│ │ │ │ │ ├── ContestRegisterEntityService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── ContestAnnouncementEntityServiceImpl.java
│ │ │ │ │ ├── ContestEntityServiceImpl.java
│ │ │ │ │ ├── ContestPrintEntityServiceImpl.java
│ │ │ │ │ ├── ContestProblemEntityServiceImpl.java
│ │ │ │ │ ├── ContestRecordEntityServiceImpl.java
│ │ │ │ │ └── ContestRegisterEntityServiceImpl.java
│ │ │ │ ├── discussion/
│ │ │ │ │ ├── CommentEntityService.java
│ │ │ │ │ ├── CommentLikeEntityService.java
│ │ │ │ │ ├── DiscussionEntityService.java
│ │ │ │ │ ├── DiscussionLikeEntityService.java
│ │ │ │ │ ├── DiscussionReportEntityService.java
│ │ │ │ │ ├── ReplyEntityService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── CommentEntityServiceImpl.java
│ │ │ │ │ ├── CommentLikeEntityServiceImpl.java
│ │ │ │ │ ├── DiscussionEntityServiceImpl.java
│ │ │ │ │ ├── DiscussionLikeEntityServiceImpl.java
│ │ │ │ │ ├── DiscussionReportEntityServiceImpl.java
│ │ │ │ │ └── ReplyEntityServiceImpl.java
│ │ │ │ ├── judge/
│ │ │ │ │ ├── JudgeCaseEntityService.java
│ │ │ │ │ ├── JudgeEntityService.java
│ │ │ │ │ ├── JudgeServerEntityService.java
│ │ │ │ │ ├── RemoteJudgeAccountEntityService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── JudgeCaseEntityServiceImpl.java
│ │ │ │ │ ├── JudgeEntityServiceImpl.java
│ │ │ │ │ ├── JudgeServerEntityServiceImpl.java
│ │ │ │ │ └── RemoteJudgeAccountEntityServiceImpl.java
│ │ │ │ ├── msg/
│ │ │ │ │ ├── AdminSysNoticeEntityService.java
│ │ │ │ │ ├── MsgRemindEntityService.java
│ │ │ │ │ ├── UserSysNoticeEntityService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── AdminSysNoticeEntityServiceImpl.java
│ │ │ │ │ ├── MsgRemindEntityServiceImpl.java
│ │ │ │ │ └── UserSysNoticeEntityServiceImpl.java
│ │ │ │ ├── problem/
│ │ │ │ │ ├── CategoryEntityService.java
│ │ │ │ │ ├── CodeTemplateEntityService.java
│ │ │ │ │ ├── LanguageEntityService.java
│ │ │ │ │ ├── ProblemCaseEntityService.java
│ │ │ │ │ ├── ProblemEntityService.java
│ │ │ │ │ ├── ProblemLanguageEntityService.java
│ │ │ │ │ ├── ProblemTagEntityService.java
│ │ │ │ │ ├── TagClassificationEntityService.java
│ │ │ │ │ ├── TagEntityService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── CategoryEntityServiceImpl.java
│ │ │ │ │ ├── CodeTemplateEntityServiceImpl.java
│ │ │ │ │ ├── LanguageEntityServiceImpl.java
│ │ │ │ │ ├── ProblemCaseEntityServiceImpl.java
│ │ │ │ │ ├── ProblemEntityServiceImpl.java
│ │ │ │ │ ├── ProblemLanguageEntityServiceImpl.java
│ │ │ │ │ ├── ProblemTagEntityServiceImpl.java
│ │ │ │ │ ├── TagClassificationEntityServiceImpl.java
│ │ │ │ │ └── TagEntityServiceImpl.java
│ │ │ │ ├── training/
│ │ │ │ │ ├── MappingTrainingCategoryEntityService.java
│ │ │ │ │ ├── TrainingCategoryEntityService.java
│ │ │ │ │ ├── TrainingEntityService.java
│ │ │ │ │ ├── TrainingProblemEntityService.java
│ │ │ │ │ ├── TrainingRecordEntityService.java
│ │ │ │ │ ├── TrainingRegisterEntityService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── MappingTrainingCategoryEntityServiceImpl.java
│ │ │ │ │ ├── TrainingCategoryEntityServiceImpl.java
│ │ │ │ │ ├── TrainingEntityServiceImpl.java
│ │ │ │ │ ├── TrainingProblemEntityServiceImpl.java
│ │ │ │ │ ├── TrainingRecordEntityServiceImpl.java
│ │ │ │ │ └── TrainingRegisterEntityServiceImpl.java
│ │ │ │ └── user/
│ │ │ │ ├── AuthEntityService.java
│ │ │ │ ├── RoleAuthEntityService.java
│ │ │ │ ├── RoleEntityService.java
│ │ │ │ ├── SessionEntityService.java
│ │ │ │ ├── UserAcproblemEntityService.java
│ │ │ │ ├── UserInfoEntityService.java
│ │ │ │ ├── UserRoleEntityService.java
│ │ │ │ └── impl/
│ │ │ │ ├── AuthEntityServiceImpl.java
│ │ │ │ ├── RoleAuthEntityServiceImpl.java
│ │ │ │ ├── RoleEntityServiceImpl.java
│ │ │ │ ├── SessionEntityServiceImpl.java
│ │ │ │ ├── UserAcproblemEntityServiceImpl.java
│ │ │ │ ├── UserInfoEntityServiceImpl.java
│ │ │ │ └── UserRoleEntityServiceImpl.java
│ │ │ ├── judge/
│ │ │ │ ├── AbstractTaskReceiver.java
│ │ │ │ ├── ChooseUtils.java
│ │ │ │ ├── Dispatcher.java
│ │ │ │ ├── local/
│ │ │ │ │ ├── JudgeTaskDispatcher.java
│ │ │ │ │ └── JudgeTaskTaskReceiver.java
│ │ │ │ └── remote/
│ │ │ │ ├── RemoteJudgeTaskDispatcher.java
│ │ │ │ ├── RemoteJudgeTaskReceiver.java
│ │ │ │ └── crawler/
│ │ │ │ ├── AbstractCFStyleProblemCrawler.java
│ │ │ │ ├── AbstractProblemCrawler.java
│ │ │ │ ├── AtCoderProblemCrawler.java
│ │ │ │ ├── CFProblemCrawler.java
│ │ │ │ ├── CrawlersHolder.java
│ │ │ │ ├── GYMProblemCrawler.java
│ │ │ │ ├── HDUProblemCrawler.java
│ │ │ │ ├── JSKProblemCrawler.java
│ │ │ │ ├── MXTProblemCrawler.java
│ │ │ │ ├── POJProblemCrawler.java
│ │ │ │ ├── TKOJProblemCrawler.java
│ │ │ │ └── YACSProblemCrawler.java
│ │ │ ├── mapper/
│ │ │ │ ├── AdminSysNoticeMapper.java
│ │ │ │ ├── AnnouncementMapper.java
│ │ │ │ ├── AuthMapper.java
│ │ │ │ ├── CategoryMapper.java
│ │ │ │ ├── CodeTemplateMapper.java
│ │ │ │ ├── CommentLikeMapper.java
│ │ │ │ ├── CommentMapper.java
│ │ │ │ ├── ContestAnnouncementMapper.java
│ │ │ │ ├── ContestMapper.java
│ │ │ │ ├── ContestPrintMapper.java
│ │ │ │ ├── ContestProblemMapper.java
│ │ │ │ ├── ContestRecordMapper.java
│ │ │ │ ├── ContestRegisterMapper.java
│ │ │ │ ├── DiscussionLikeMapper.java
│ │ │ │ ├── DiscussionMapper.java
│ │ │ │ ├── DiscussionReportMapper.java
│ │ │ │ ├── FileMapper.java
│ │ │ │ ├── JudgeCaseMapper.java
│ │ │ │ ├── JudgeMapper.java
│ │ │ │ ├── JudgeServerMapper.java
│ │ │ │ ├── LanguageMapper.java
│ │ │ │ ├── MappingTrainingCategoryMapper.java
│ │ │ │ ├── MsgRemindMapper.java
│ │ │ │ ├── ProblemCaseMapper.java
│ │ │ │ ├── ProblemLanguageMapper.java
│ │ │ │ ├── ProblemMapper.java
│ │ │ │ ├── ProblemTagMapper.java
│ │ │ │ ├── RemoteJudgeAccountMapper.java
│ │ │ │ ├── ReplyMapper.java
│ │ │ │ ├── RoleAuthMapper.java
│ │ │ │ ├── RoleMapper.java
│ │ │ │ ├── SessionMapper.java
│ │ │ │ ├── TagClassificationMapper.java
│ │ │ │ ├── TagMapper.java
│ │ │ │ ├── TrainingCategoryMapper.java
│ │ │ │ ├── TrainingMapper.java
│ │ │ │ ├── TrainingProblemMapper.java
│ │ │ │ ├── TrainingRecordMapper.java
│ │ │ │ ├── TrainingRegisterMapper.java
│ │ │ │ ├── UserAcproblemMapper.java
│ │ │ │ ├── UserInfoMapper.java
│ │ │ │ ├── UserRecordMapper.java
│ │ │ │ ├── UserRoleMapper.java
│ │ │ │ ├── UserSysNoticeMapper.java
│ │ │ │ └── xml/
│ │ │ │ ├── AdminSysNoticeMapper.xml
│ │ │ │ ├── AnnouncementMapper.xml
│ │ │ │ ├── CommentMapper.xml
│ │ │ │ ├── ContestExplanationMapper.xml
│ │ │ │ ├── ContestMapper.xml
│ │ │ │ ├── ContestProblemMapper.xml
│ │ │ │ ├── ContestRecordMapper.xml
│ │ │ │ ├── ContestRegisterMapper.xml
│ │ │ │ ├── ContestScoreMapper.xml
│ │ │ │ ├── DiscussionMapper.xml
│ │ │ │ ├── JudgeMapper.xml
│ │ │ │ ├── MsgRemindMapper.xml
│ │ │ │ ├── ProblemMapper.xml
│ │ │ │ ├── RoleAuthMapper.xml
│ │ │ │ ├── RoleMapper.xml
│ │ │ │ ├── SessionMapper.xml
│ │ │ │ ├── TagMapper.xml
│ │ │ │ ├── TrainingCategoryMapper.xml
│ │ │ │ ├── TrainingMapper.xml
│ │ │ │ ├── TrainingProblemMapper.xml
│ │ │ │ ├── TrainingRecordMapper.xml
│ │ │ │ ├── UserAcproblemMapper.xml
│ │ │ │ ├── UserInfoMapper.xml
│ │ │ │ ├── UserRecordMapper.xml
│ │ │ │ ├── UserRoleMapper.xml
│ │ │ │ └── UserSysNoticeMapper.xml
│ │ │ ├── pojo/
│ │ │ │ ├── dto/
│ │ │ │ │ ├── AdminEditUserDTO.java
│ │ │ │ │ ├── AnnouncementDTO.java
│ │ │ │ │ ├── ApplyResetPasswordDTO.java
│ │ │ │ │ ├── ChangeEmailDTO.java
│ │ │ │ │ ├── ChangePasswordDTO.java
│ │ │ │ │ ├── CheckAcDTO.java
│ │ │ │ │ ├── CheckUsernameOrEmailDTO.java
│ │ │ │ │ ├── ContestPrintDTO.java
│ │ │ │ │ ├── ContestProblemDTO.java
│ │ │ │ │ ├── ContestRankDTO.java
│ │ │ │ │ ├── DbAndRedisConfigDTO.java
│ │ │ │ │ ├── EmailConfigDTO.java
│ │ │ │ │ ├── LoginDTO.java
│ │ │ │ │ ├── PidListDTO.java
│ │ │ │ │ ├── ProblemDTO.java
│ │ │ │ │ ├── QDOJProblemDTO.java
│ │ │ │ │ ├── RegisterContestDTO.java
│ │ │ │ │ ├── RegisterDTO.java
│ │ │ │ │ ├── RegisterTrainingDTO.java
│ │ │ │ │ ├── ReplyDTO.java
│ │ │ │ │ ├── ResetPasswordDTO.java
│ │ │ │ │ ├── SubmitIdListDTO.java
│ │ │ │ │ ├── SwitchConfigDTO.java
│ │ │ │ │ ├── TestEmailDTO.java
│ │ │ │ │ ├── ToJudgeDTO.java
│ │ │ │ │ ├── TrainingDTO.java
│ │ │ │ │ ├── TrainingProblemDTO.java
│ │ │ │ │ ├── UserReadContestAnnouncementDTO.java
│ │ │ │ │ └── WebConfigDTO.java
│ │ │ │ └── vo/
│ │ │ │ ├── ACMContestRankVO.java
│ │ │ │ ├── ACMRankVO.java
│ │ │ │ ├── AccessVO.java
│ │ │ │ ├── AdminContestVO.java
│ │ │ │ ├── AdminSysNoticeVO.java
│ │ │ │ ├── AnnouncementVO.java
│ │ │ │ ├── CaptchaVO.java
│ │ │ │ ├── ChangeAccountVO.java
│ │ │ │ ├── CheckUsernameOrEmailVO.java
│ │ │ │ ├── CommentListVO.java
│ │ │ │ ├── CommentVO.java
│ │ │ │ ├── ContestOutsideInfo.java
│ │ │ │ ├── ContestProblemVO.java
│ │ │ │ ├── ContestRecordVO.java
│ │ │ │ ├── ContestRegisterCountVO.java
│ │ │ │ ├── ContestVO.java
│ │ │ │ ├── DiscussionVO.java
│ │ │ │ ├── ExcelIpVO.java
│ │ │ │ ├── ExcelUserVO.java
│ │ │ │ ├── ImportProblemVO.java
│ │ │ │ ├── JudgeVO.java
│ │ │ │ ├── OIContestRankVO.java
│ │ │ │ ├── OIRankVO.java
│ │ │ │ ├── ProblemCountVO.java
│ │ │ │ ├── ProblemInfoVO.java
│ │ │ │ ├── ProblemTagVO.java
│ │ │ │ ├── ProblemVO.java
│ │ │ │ ├── RandomProblemVO.java
│ │ │ │ ├── RegisterCodeVO.java
│ │ │ │ ├── RoleAuthsVO.java
│ │ │ │ ├── SubmissionInfoVO.java
│ │ │ │ ├── SysMsgVO.java
│ │ │ │ ├── TrainingRankVO.java
│ │ │ │ ├── TrainingRecordVO.java
│ │ │ │ ├── TrainingVO.java
│ │ │ │ ├── UserHomeVO.java
│ │ │ │ ├── UserInfoVO.java
│ │ │ │ ├── UserMsgVO.java
│ │ │ │ ├── UserRolesVO.java
│ │ │ │ └── UserUnreadMsgCountVO.java
│ │ │ ├── service/
│ │ │ │ ├── account/
│ │ │ │ │ ├── PassportService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ └── PassportServiceImpl.java
│ │ │ │ ├── admin/
│ │ │ │ │ ├── announcement/
│ │ │ │ │ │ ├── AdminAnnouncementService.java
│ │ │ │ │ │ └── impl/
│ │ │ │ │ │ └── AdminAnnouncementServiceImpl.java
│ │ │ │ │ ├── contest/
│ │ │ │ │ │ ├── AdminContestAnnouncementService.java
│ │ │ │ │ │ ├── AdminContestProblemService.java
│ │ │ │ │ │ ├── AdminContestService.java
│ │ │ │ │ │ └── impl/
│ │ │ │ │ │ ├── AdminContestAnnouncementServiceImpl.java
│ │ │ │ │ │ ├── AdminContestProblemServiceImpl.java
│ │ │ │ │ │ └── AdminContestServiceImpl.java
│ │ │ │ │ ├── discussion/
│ │ │ │ │ │ ├── AdminDiscussionService.java
│ │ │ │ │ │ └── impl/
│ │ │ │ │ │ └── AdminDiscussionServiceImpl.java
│ │ │ │ │ ├── problem/
│ │ │ │ │ │ ├── AdminProblemService.java
│ │ │ │ │ │ ├── RemoteProblemService.java
│ │ │ │ │ │ └── impl/
│ │ │ │ │ │ └── AdminProblemServiceImpl.java
│ │ │ │ │ ├── rejudge/
│ │ │ │ │ │ ├── RejudgeService.java
│ │ │ │ │ │ └── impl/
│ │ │ │ │ │ └── RejudgeServiceImpl.java
│ │ │ │ │ ├── system/
│ │ │ │ │ │ ├── ConfigService.java
│ │ │ │ │ │ ├── DashboardService.java
│ │ │ │ │ │ └── impl/
│ │ │ │ │ │ ├── ConfigServiceImpl.java
│ │ │ │ │ │ └── DashboardServiceImpl.java
│ │ │ │ │ ├── tag/
│ │ │ │ │ │ ├── AdminTagService.java
│ │ │ │ │ │ └── impl/
│ │ │ │ │ │ └── AdminTagServiceImpl.java
│ │ │ │ │ ├── training/
│ │ │ │ │ │ ├── AdminTrainingCategoryService.java
│ │ │ │ │ │ ├── AdminTrainingProblemService.java
│ │ │ │ │ │ ├── AdminTrainingRecordService.java
│ │ │ │ │ │ ├── AdminTrainingService.java
│ │ │ │ │ │ └── impl/
│ │ │ │ │ │ ├── AdminTrainingCategoryServiceImpl.java
│ │ │ │ │ │ ├── AdminTrainingProblemServiceImpl.java
│ │ │ │ │ │ └── AdminTrainingServiceImpl.java
│ │ │ │ │ └── user/
│ │ │ │ │ ├── AdminUserService.java
│ │ │ │ │ ├── UserRecordService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── AdminUserServiceImpl.java
│ │ │ │ │ └── UserRecordServiceImpl.java
│ │ │ │ ├── email/
│ │ │ │ │ └── EmailService.java
│ │ │ │ ├── file/
│ │ │ │ │ ├── ContestFileService.java
│ │ │ │ │ ├── ImageService.java
│ │ │ │ │ ├── ImportDSOJProblemService.java
│ │ │ │ │ ├── ImportFpsProblemService.java
│ │ │ │ │ ├── ImportLOJProblemService.java
│ │ │ │ │ ├── ImportQDUOJProblemService.java
│ │ │ │ │ ├── MarkDownFileService.java
│ │ │ │ │ ├── ProblemFileService.java
│ │ │ │ │ ├── TestCaseService.java
│ │ │ │ │ ├── UserFileService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── ContestFileServiceImpl.java
│ │ │ │ │ ├── ImageServiceImpl.java
│ │ │ │ │ ├── ImportDSOJProblemServiceImpl.java
│ │ │ │ │ ├── ImportFpsProblemServiceImpl.java
│ │ │ │ │ ├── ImportLOJProblemServiceImpl.java
│ │ │ │ │ ├── ImportQDUOJProblemServiceImpl.java
│ │ │ │ │ ├── MarkDownFileServiceImpl.java
│ │ │ │ │ ├── ProblemFileServiceImpl.java
│ │ │ │ │ ├── TestCaseServiceImpl.java
│ │ │ │ │ └── UserFileServiceImpl.java
│ │ │ │ ├── msg/
│ │ │ │ │ ├── AdminNoticeService.java
│ │ │ │ │ ├── NoticeService.java
│ │ │ │ │ ├── UserMessageService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── AdminNoticeServiceImpl.java
│ │ │ │ │ ├── NoticeServiceImpl.java
│ │ │ │ │ └── UserMessageServiceImpl.java
│ │ │ │ ├── oj/
│ │ │ │ │ ├── AccountService.java
│ │ │ │ │ ├── BeforeDispatchInitService.java
│ │ │ │ │ ├── CommentService.java
│ │ │ │ │ ├── CommonService.java
│ │ │ │ │ ├── ContestACMRankService.java
│ │ │ │ │ ├── ContestAdminService.java
│ │ │ │ │ ├── ContestOIRankService.java
│ │ │ │ │ ├── ContestScoreboardService.java
│ │ │ │ │ ├── ContestService.java
│ │ │ │ │ ├── DiscussionService.java
│ │ │ │ │ ├── HomeService.java
│ │ │ │ │ ├── JudgeService.java
│ │ │ │ │ ├── ProblemService.java
│ │ │ │ │ ├── RankService.java
│ │ │ │ │ ├── TrainingService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── AccountServiceImpl.java
│ │ │ │ │ ├── CommentServiceImpl.java
│ │ │ │ │ ├── CommonServiceImpl.java
│ │ │ │ │ ├── ContestAdminServiceImpl.java
│ │ │ │ │ ├── ContestScoreboardServiceImpl.java
│ │ │ │ │ ├── ContestServiceImpl.java
│ │ │ │ │ ├── DiscussionServiceImpl.java
│ │ │ │ │ ├── HomeServiceImpl.java
│ │ │ │ │ ├── JudgeServiceImpl.java
│ │ │ │ │ ├── ProblemServiceImpl.java
│ │ │ │ │ ├── RankServiceImpl.java
│ │ │ │ │ └── TrainingServiceImpl.java
│ │ │ │ └── schedule/
│ │ │ │ └── ScheduleService.java
│ │ │ ├── shiro/
│ │ │ │ ├── AccountProfile.java
│ │ │ │ ├── AccountRealm.java
│ │ │ │ ├── JwtFilter.java
│ │ │ │ ├── JwtToken.java
│ │ │ │ └── UserSessionUtil.java
│ │ │ └── validator/
│ │ │ ├── AccessInterceptor.java
│ │ │ ├── AccessValidator.java
│ │ │ ├── ContestValidator.java
│ │ │ ├── JudgeValidator.java
│ │ │ └── TrainingValidator.java
│ │ └── resources/
│ │ ├── application.yml
│ │ ├── banner.txt
│ │ ├── email-rule.yml
│ │ ├── logback-spring.xml
│ │ └── templates/
│ │ ├── emailTemplate_registerCode.html
│ │ ├── emailTemplate_resetPassword.html
│ │ └── emailTemplate_testEmail.html
│ └── test/
│ └── java/
│ └── com/
│ └── simplefanc/
│ └── AppTest.java
├── voj-common/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── simplefanc/
│ └── voj/
│ └── common/
│ ├── constants/
│ │ ├── Constant.java
│ │ ├── ContestConstant.java
│ │ ├── ContestEnum.java
│ │ ├── JudgeCaseMode.java
│ │ ├── JudgeMode.java
│ │ ├── JudgeStatus.java
│ │ ├── ProblemEnum.java
│ │ ├── ProblemLevelEnum.java
│ │ ├── RedisConstant.java
│ │ └── RemoteOj.java
│ ├── pojo/
│ │ ├── dto/
│ │ │ ├── CompileDTO.java
│ │ │ └── JudgeDTO.java
│ │ └── entity/
│ │ ├── common/
│ │ │ ├── Announcement.java
│ │ │ └── File.java
│ │ ├── contest/
│ │ │ ├── Contest.java
│ │ │ ├── ContestAnnouncement.java
│ │ │ ├── ContestPrint.java
│ │ │ ├── ContestProblem.java
│ │ │ ├── ContestRecord.java
│ │ │ └── ContestRegister.java
│ │ ├── discussion/
│ │ │ ├── Comment.java
│ │ │ ├── CommentLike.java
│ │ │ ├── Discussion.java
│ │ │ ├── DiscussionLike.java
│ │ │ ├── DiscussionReport.java
│ │ │ └── Reply.java
│ │ ├── judge/
│ │ │ ├── Judge.java
│ │ │ ├── JudgeCase.java
│ │ │ ├── JudgeServer.java
│ │ │ └── RemoteJudgeAccount.java
│ │ ├── msg/
│ │ │ ├── AdminSysNotice.java
│ │ │ ├── MsgRemind.java
│ │ │ └── UserSysNotice.java
│ │ ├── problem/
│ │ │ ├── Category.java
│ │ │ ├── CodeTemplate.java
│ │ │ ├── Language.java
│ │ │ ├── Problem.java
│ │ │ ├── ProblemCase.java
│ │ │ ├── ProblemLanguage.java
│ │ │ ├── ProblemTag.java
│ │ │ ├── Tag.java
│ │ │ └── TagClassification.java
│ │ ├── training/
│ │ │ ├── MappingTrainingCategory.java
│ │ │ ├── Training.java
│ │ │ ├── TrainingCategory.java
│ │ │ ├── TrainingProblem.java
│ │ │ ├── TrainingRecord.java
│ │ │ └── TrainingRegister.java
│ │ └── user/
│ │ ├── Auth.java
│ │ ├── Role.java
│ │ ├── RoleAuth.java
│ │ ├── Session.java
│ │ ├── UserAcproblem.java
│ │ ├── UserInfo.java
│ │ └── UserRole.java
│ ├── result/
│ │ ├── CommonResult.java
│ │ └── ResultStatus.java
│ └── utils/
│ ├── CodeForcesAES.js
│ ├── CodeForcesUtils.java
│ ├── IpUtil.java
│ └── Tools.java
└── voj-judger/
├── pom.xml
└── src/
└── main/
├── java/
│ └── com/
│ └── simplefanc/
│ └── voj/
│ └── judger/
│ ├── JudgeServerApplication.java
│ ├── common/
│ │ ├── constants/
│ │ │ ├── CompileConfig.java
│ │ │ ├── Constants.java
│ │ │ ├── JudgeDir.java
│ │ │ ├── JudgeLanguage.java
│ │ │ ├── JudgeServerConstant.java
│ │ │ └── RunConfig.java
│ │ ├── exception/
│ │ │ ├── CompileException.java
│ │ │ ├── RuntimeException.java
│ │ │ ├── SubmitException.java
│ │ │ └── SystemException.java
│ │ └── utils/
│ │ ├── JudgeUtil.java
│ │ └── ThreadPoolUtil.java
│ ├── config/
│ │ ├── AsyncTaskConfig.java
│ │ ├── DruidConfiguration.java
│ │ ├── MyMetaObjectConfig.java
│ │ ├── MybatisPlusConfig.java
│ │ ├── NacosConfig.java
│ │ └── StartupRunner.java
│ ├── controller/
│ │ ├── JudgeController.java
│ │ └── SystemConfigController.java
│ ├── dao/
│ │ ├── ContestEntityService.java
│ │ ├── ContestRecordEntityService.java
│ │ ├── JudgeCaseEntityService.java
│ │ ├── JudgeEntityService.java
│ │ ├── JudgeServerEntityService.java
│ │ ├── ProblemCaseEntityService.java
│ │ ├── ProblemEntityService.java
│ │ ├── RemoteJudgeAccountEntityService.java
│ │ ├── UserAcproblemEntityService.java
│ │ └── impl/
│ │ ├── ContestEntityServiceImpl.java
│ │ ├── ContestRecordEntityServiceImpl.java
│ │ ├── JudgeCaseEntityServiceImpl.java
│ │ ├── JudgeEntityServiceImpl.java
│ │ ├── JudgeServerEntityServiceImpl.java
│ │ ├── ProblemCaseEntityServiceImpl.java
│ │ ├── ProblemEntityServiceImpl.java
│ │ ├── RemoteJudgeAccountEntityServiceImpl.java
│ │ └── UserAcproblemEntityServiceImpl.java
│ ├── judge/
│ │ ├── local/
│ │ │ ├── Compiler.java
│ │ │ ├── JudgeContext.java
│ │ │ ├── JudgeProcess.java
│ │ │ ├── JudgeRun.java
│ │ │ ├── ProblemTestCaseUtils.java
│ │ │ ├── SandboxRun.java
│ │ │ ├── pojo/
│ │ │ │ ├── CaseResult.java
│ │ │ │ ├── JudgeCaseDTO.java
│ │ │ │ ├── JudgeGlobalDTO.java
│ │ │ │ ├── JudgeResult.java
│ │ │ │ └── SandBoxRes.java
│ │ │ └── strategy/
│ │ │ ├── AbstractJudge.java
│ │ │ ├── DefaultJudge.java
│ │ │ ├── InteractiveJudge.java
│ │ │ └── SpecialJudge.java
│ │ └── remote/
│ │ ├── RemoteJudgeContext.java
│ │ ├── RemoteOjAware.java
│ │ ├── account/
│ │ │ ├── RemoteAccount.java
│ │ │ └── RemoteAccountRepository.java
│ │ ├── httpclient/
│ │ │ ├── AnonymousHttpContextRepository.java
│ │ │ ├── CookieUtil.java
│ │ │ ├── DedicatedHttpClient.java
│ │ │ ├── DedicatedHttpClientFactory.java
│ │ │ ├── HttpBodyValidator.java
│ │ │ ├── HttpClientUtil.java
│ │ │ ├── HttpStatusValidator.java
│ │ │ ├── Mapper.java
│ │ │ ├── SimpleHttpResponse.java
│ │ │ ├── SimpleHttpResponseMapper.java
│ │ │ ├── SimpleHttpResponseValidator.java
│ │ │ └── SimpleNameValueEntityFactory.java
│ │ ├── loginer/
│ │ │ ├── AbstractRetentiveLoginer.java
│ │ │ ├── Loginer.java
│ │ │ └── LoginersHolder.java
│ │ ├── pojo/
│ │ │ ├── RemoteOjInfo.java
│ │ │ ├── SubmissionInfo.java
│ │ │ └── SubmissionRemoteStatus.java
│ │ ├── provider/
│ │ │ ├── atcoder/
│ │ │ │ ├── AtCoderInfo.java
│ │ │ │ ├── AtCoderLoginer.java
│ │ │ │ ├── AtCoderQuerier.java
│ │ │ │ └── AtCoderSubmitter.java
│ │ │ ├── codeforcesgym/
│ │ │ │ ├── GYMInfo.java
│ │ │ │ ├── GYMLoginer.java
│ │ │ │ ├── GYMQuerier.java
│ │ │ │ └── GYMSubmitter.java
│ │ │ ├── codefores/
│ │ │ │ ├── CFInfo.java
│ │ │ │ ├── CFLoginer.java
│ │ │ │ ├── CFQuerier.java
│ │ │ │ └── CFSubmitter.java
│ │ │ ├── eoj/
│ │ │ │ ├── EojInfo.java
│ │ │ │ └── EojLoginer.java
│ │ │ ├── hdu/
│ │ │ │ ├── HDUInfo.java
│ │ │ │ ├── HDULoginer.java
│ │ │ │ ├── HDUQuerier.java
│ │ │ │ └── HDUSubmitter.java
│ │ │ ├── jsk/
│ │ │ │ ├── JSKInfo.java
│ │ │ │ ├── JSKLoginer.java
│ │ │ │ ├── JSKQuerier.java
│ │ │ │ └── JSKSubmitter.java
│ │ │ ├── mxt/
│ │ │ │ ├── MXTCaptchaRecognizer.java
│ │ │ │ ├── MXTInfo.java
│ │ │ │ ├── MXTLoginer.java
│ │ │ │ ├── MXTQuerier.java
│ │ │ │ ├── MXTSubmitter.java
│ │ │ │ └── RsaUtil.java
│ │ │ ├── poj/
│ │ │ │ ├── POJInfo.java
│ │ │ │ ├── POJLoginer.java
│ │ │ │ ├── POJQuerier.java
│ │ │ │ └── POJSubmitter.java
│ │ │ ├── shared/
│ │ │ │ └── codeforces/
│ │ │ │ ├── AbstractCFStyleLoginer.java
│ │ │ │ ├── AbstractCFStyleQuerier.java
│ │ │ │ ├── AbstractCFStyleSubmitter.java
│ │ │ │ └── CFUtil.java
│ │ │ └── tkoj/
│ │ │ ├── TKOJCaptchaRecognizer.java
│ │ │ ├── TKOJInfo.java
│ │ │ ├── TKOJLoginer.java
│ │ │ ├── TKOJQuerier.java
│ │ │ ├── TKOJSubmitter.java
│ │ │ └── TKOJVerifyUtil.java
│ │ ├── querier/
│ │ │ ├── Querier.java
│ │ │ ├── QueriersHolder.java
│ │ │ └── RemoteJudgeQuerier.java
│ │ └── submitter/
│ │ ├── RemoteJudgeSubmitter.java
│ │ ├── Submitter.java
│ │ └── SubmittersHolder.java
│ ├── mapper/
│ │ ├── ContestMapper.java
│ │ ├── ContestRecordMapper.java
│ │ ├── JudgeCaseMapper.java
│ │ ├── JudgeMapper.java
│ │ ├── JudgeServerMapper.java
│ │ ├── ProblemCaseMapper.java
│ │ ├── ProblemMapper.java
│ │ ├── RemoteJudgeAccountMapper.java
│ │ ├── UserAcproblemMapper.java
│ │ └── UserRecordMapper.java
│ └── service/
│ ├── JudgeService.java
│ ├── SystemConfigService.java
│ └── impl/
│ ├── JudgeServiceImpl.java
│ └── SystemConfigServiceImpl.java
└── resources/
├── application.yml
├── banner.txt
└── logback-spring.xml
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
*.classpath
# Package Files
*.jar
*.war
*.ear
*.log
*.iml
.DS_Store
node_modules
dist/
.cache/
.temp/
target/
out/
.idea/
.classpath
.project
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
*.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2022 simplefanC
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# Virtual Online Judge(VOJ)
[](https://openjdk.java.net)
[](https://spring.io/projects/spring-boot)
[](https://spring.io/projects/spring-cloud)
[](https://spring.io/projects/spring-cloud-alibaba)
[](https://www.mysql.com/)
[](https://redis.io/)
[](https://cn.vuejs.org/)
## 简介
VOJ 是基于微服务、前后端分离的高性能在线评测系统。采用现阶段流行技术实现,采用 Docker 容器化部署。
## 概览
+ 基于 Docker,真正一键部署
+ 前后端分离,模块化编程
+ 微服务,支持分布式判题
+ 拥有**本地判题**服务,同时支持其它知名 OJ (HDU、POJ、Codeforces、AtCoder...) 的**远程判题**
+ ACM/OI 两种比赛模式、完善的比赛功能(打星队伍、关注队伍、外榜)
+ 完善的判题模式(普通测评、特殊测评、交互测评)
+ 支持私有训练、公开训练(题单)
+ 更细致的权限划分,超级管理员、题目管理员、普通管理员各司其职
+ 丰富的可视化图表,一图胜千言
+ 支持 Template Problem,可以添加函数题甚至填空题
+ 多语言支持:`C`, `C++`, `Java`, `Python`, `C#`,`GoLang`
+ Markdown & LaTeX 支持
## 项目源码
+ 后端源码:[https://github.com/simplefanC/voj](https://github.com/simplefanC/voj)
+ 前端源码:[https://github.com/simplefanC/voj-vue](https://github.com/simplefanC/voj-vue)
+ 判题沙箱:[https://github.com/criyle/go-judge](https://github.com/criyle/go-judge)
## 项目文档
项目文档地址:[https://github.com/simplefanC/voj/wiki](https://github.com/simplefanC/voj/wiki)
## 项目结构
```
voj
├── voj-common -- 工具类及通用代码
├── voj-backend -- 业务服务模块
└── voj-judger -- 评测服务模块
```
## 技术选型
| 技术 | 说明 | 官网 |
| -------------------- | ------------------- | ----------------------------------------------- |
| Spring Boot | 容器+MVC框架 | https://spring.io/projects/spring-boot |
| Spring Cloud | 微服务框架 | https://spring.io/projects/spring-cloud |
| Spring Cloud Alibaba | 微服务框架 | https://spring.io/projects/spring-cloud-alibaba |
| MyBatis-Plus | ORM框架 | https://baomidou.com |
| Druid | 数据库连接池 | https://github.com/alibaba/druid |
| Redis | 分布式缓存 | https://redis.io |
| Shiro | 认证和授权框架 | https://shiro.apache.org |
| JWT | JWT登录支持 | https://github.com/jwtk/jjwt |
| Hibernator-Validator | 验证框架 | http://hibernate.org/validator |
| EasyExcel | JAVA解析Excel工具 | https://github.com/alibaba/easyexcel |
| PageHelper | MyBatis物理分页插件 | https://github.com/pagehelper/Mybatis-PageHelper |
| Hutool | Java工具类库 | https://github.com/looly/hutool |
| Lombok | 简化对象封装工具 | https://github.com/rzwitserloot/lombok |
| Swagger-UI | 文档生成工具 | https://github.com/swagger-api/swagger-ui |
| Nginx | 静态资源服务器 | https://www.nginx.com |
| Docker | 应用容器引擎 | https://www.docker.com
## 部署
快速部署:[基于 Docker Compose 部署](https://github.com/simplefanC/voj/wiki/deploy)
部署仓库:[https://github.com/simplefanC/voj-deploy](https://github.com/simplefanC/voj-deploy)
================================================
FILE: docs/package.json
================================================
{
"name": "voj-docs",
"version": "1.0.0",
"description": "Virtual Online Judge",
"license": "MIT",
"type": "module",
"scripts": {
"build": "vuepress build src",
"clean-dev": "vuepress dev src --clean-cache",
"dev": "vuepress dev src"
},
"devDependencies": {
"@vuepress/client": "2.0.0-beta.51",
"vue": "^3.2.29",
"vuepress": "2.0.0-beta.51",
"vuepress-theme-hope": "2.0.0-beta.108"
}
}
================================================
FILE: docs/src/.vuepress/config.ts
================================================
import {defineUserConfig} from "vuepress";
import theme from "./theme";
// const { searchPlugin } = require('@vuepress/plugin-search')
export default defineUserConfig({
// dest: './', // 设置输出目录
lang: "zh-CN",
title: "VOJ",
description: "Virtual Online Judge",
base: "/",
head: [
[
"link",
{
rel: "stylesheet",
href: "//at.alicdn.com/t/font_2410206_mfj6e1vbwo.css",
},
],
],
plugins: [
// searchPlugin({
// // https://v2.vuepress.vuejs.org/zh/reference/plugin/search.html
// // 排除首页
// isSearchable: (page) => page.path !== "/",
// maxSuggestions: 10,
// hotKeys: ["s", "/"],
// // 用于在页面的搜索索引中添加额外字段
// getExtraFields: () => [],
// locales: {
// "/": {
// placeholder: "搜索",
// },
// },
// }),
],
theme,
});
================================================
FILE: docs/src/.vuepress/navbar.ts
================================================
import {navbar} from "vuepress-theme-hope";
export default navbar([
// "/",
// "/home",
// { text: "使用指南", icon: "creative", link: "/guide/" },
// {
// text: "博文",
// icon: "edit",
// prefix: "/posts/",
// children: [
// {
// text: "文章 1-4",
// icon: "edit",
// prefix: "article/",
// children: [
// { text: "文章 1", icon: "edit", link: "article1" },
// { text: "文章 2", icon: "edit", link: "article2" },
// "article3",
// "article4",
// ],
// },
// {
// text: "文章 5-12",
// icon: "edit",
// children: [
// {
// text: "文章 5",
// icon: "edit",
// link: "article/article5",
// },
// {
// text: "文章 6",
// icon: "edit",
// link: "article/article6",
// },
// "article/article7",
// "article/article8",
// ],
// },
// { text: "文章 9", icon: "edit", link: "article9" },
// { text: "文章 10", icon: "edit", link: "article10" },
// "article11",
// "article12",
// ],
// },
// {
// text: "主题文档",
// icon: "note",
// link: "https://vuepress-theme-hope.github.io/v2/zh/",
// },
]);
================================================
FILE: docs/src/.vuepress/sidebar.ts
================================================
import {sidebar} from "vuepress-theme-hope";
export default sidebar([
// "/",
// "/home",
// "/slide",
{
text: '序章',
collapsable: true,
prefix: "/introduction/",
children: [
'',
'architecture'
]
},
{
text: '快速部署',
collapsable: true,
prefix: "/deploy/",
children: [
'',
'docker',
'open-https',
'multi-judgeserver',
// 'update',
'how-to-backup'
]
},
{
text: '单体部署',
collapsable: true,
prefix: "/monomer/",
children: [
'mysql',
// 'mysql-checker',
'redis',
'nacos',
'backend',
'judgeserver',
'frontend',
'rsync'
]
},
{
text: '开发文档',
collapsable: true,
prefix: "/develop/",
children: [
'db',
'judge_dispatcher',
'sandbox',
'update-fe'
]
},
{
text: '使用文档',
collapsable: true,
prefix: "/use/",
children: [
'import-problem',
'judge-mode',
'testcase',
'training',
'contest',
// 'group',
'import-user',
'admin-user',
'notice-announcement',
'discussion-admin'
// 'custom-difficulty',
// 'close-free-cdn'
]
},
// {
// text: "如何使用",
// icon: "creative",
// prefix: "/guide/",
// link: "/guide/",
// children: "structure",
// },
// {
// text: "文章",
// icon: "note",
// prefix: "/posts/",
// children: [
// {
// text: "文章 1-4",
// icon: "note",
// collapsable: true,
// prefix: "article/",
// children: ["article1", "article2", "article3", "article4"],
// },
// {
// text: "文章 5-12",
// icon: "note",
// children: [
// {
// text: "文章 5-8",
// icon: "note",
// collapsable: true,
// prefix: "article/",
// children: ["article5", "article6", "article7", "article8"],
// },
// {
// text: "文章 9-12",
// icon: "note",
// children: ["article9", "article10", "article11", "article12"],
// },
// ],
// },
// ],
// },
]);
================================================
FILE: docs/src/.vuepress/styles/index.scss
================================================
================================================
FILE: docs/src/.vuepress/styles/palette.scss
================================================
================================================
FILE: docs/src/.vuepress/theme.ts
================================================
import {hopeTheme} from "vuepress-theme-hope";
import navbar from "./navbar";
import sidebar from "./sidebar";
export default hopeTheme({
hostname: "https://vuepress-theme-hope-v2-demo.mrhope.site",
author: {
name: "simplefanC",
url: "https://github.com/simplefanC",
},
iconPrefix: "iconfont icon-",
// logo: "/logo.png",
repo: "simplefanC/voj",
docsDir: "docs/src",
// navbar
navbar: navbar,
// sidebar
sidebar: sidebar,
footer: "<a href=\"https://beian.miit.gov.cn/\" target=\"_blank\">鄂ICP备2020015769号-1</a>",
displayFooter: true,
pageInfo: ["Author", "Original", "Date", "Category", "Tag", "ReadingTime"],
blog: {
description: "一个前端开发者",
intro: "/intro.html",
medias: {
Baidu: "https://example.com",
Bitbucket: "https://example.com",
Dingding: "https://example.com",
Discord: "https://example.com",
Dribbble: "https://example.com",
Email: "https://example.com",
Evernote: "https://example.com",
Facebook: "https://example.com",
Flipboard: "https://example.com",
GitHub: "https://example.com",
Gitlab: "https://example.com",
Gmail: "https://example.com",
Instagram: "https://example.com",
Lines: "https://example.com",
Linkedin: "https://example.com",
Pinterest: "https://example.com",
Pocket: "https://example.com",
QQ: "https://example.com",
Qzone: "https://example.com",
Reddit: "https://example.com",
Rss: "https://example.com",
Steam: "https://example.com",
Twitter: "https://example.com",
Wechat: "https://example.com",
Weibo: "https://example.com",
Whatsapp: "https://example.com",
Youtube: "https://example.com",
Zhihu: "https://example.com",
},
},
encrypt: {
config: {
"/guide/encrypt.html": ["1234"],
},
},
plugins: {
blog: {
autoExcerpt: true,
},
// 如果你不需要评论,可以直接删除 comment 配置,
// 以下配置仅供体验,如果你需要评论,请自行配置并使用自己的环境,详见文档。
// 为了避免打扰主题开发者以及消耗他的资源,请不要在你的正式环境中直接使用下列配置!!!!!
// comment: {
// /**
// * Using giscus
// */
// type: "giscus",
// repo: "vuepress-theme-hope/giscus-discussions",
// repoId: "R_kgDOG_Pt2A",
// category: "Announcements",
// categoryId: "DIC_kwDOG_Pt2M4COD69",
//
// /**
// * Using twikoo
// */
// // type: "twikoo",
// // envId: "https://twikoo.ccknbc.vercel.app",
//
// /**
// * Using Waline
// */
// // type: "waline",
// // serverURL: "https://vuepress-theme-hope-comment.vercel.app",
// },
mdEnhance: {
enableAll: true,
presentation: {
plugins: ["highlight", "math", "search", "notes", "zoom"],
},
},
},
});
================================================
FILE: docs/src/README.md
================================================
---
title: 首页
home: true
heroImage: /logo.png
heroText: VOJ
tagline: 基于分布式、前后端分离的高性能在线评测系统
actions:
- text: 文档介绍 🔔
link: /introduction/
type: primary
- text: 快速部署
link: /deploy/docker/
features:
- title: 分布式
details: 支持多台判题服务弹性伸缩
- title: 高效化
details: 采用前后端分离,开发迅速,使用高性能可复用判题沙盒
- title: 定制化
details: 网站配置高度集中,支持定制化修改
- title: 安全化
details: 判题使用 Cgroups 隔离用户程序,网站权限控制完善
- title: 多样化
details: 独有本地判题服务,同时支持其它知名 OJ 题目的远程判题
---
[](https://openjdk.java.net)
[](https://spring.io/projects/spring-boot)
[](https://spring.io/projects/spring-cloud)
[](https://spring.io/projects/spring-cloud-alibaba)
[](https://www.mysql.com/)
[](https://redis.io/)
[](https://github.com/alibaba/nacos)
[](https://cn.vuejs.org/)
Virtual Online Judge (VOJ) : 基于前后端分离、分布式架构的在线测评系统(VOJ),前端使用 Vue,后端主要使用 Spring Boot,Redis,MySQL,Nacos 等主流技术,**支持 HDU、POJ、CF、AtCoder、MXT、JSK、TKOJ 的虚拟判题,同时适配手机端、电脑端浏览,拥有讨论区与站内消息系统,支持私有训练、公开训练(题单),还有完善的判题模式(普通测评、特殊测评、交互测评)和完善的比赛功能(打星队伍、关注队伍、外榜)。**
[GitHub 仓库](https://github.com/simplefanc/voj)
有任何部署问题或项目 Bug 请提 Issue!
================================================
FILE: docs/src/deploy/README.md
================================================
# 环境配置
## 环境说明
:::tip
- 后端:需要在 Linux 系统下部署运行,建议使用 Ubuntu 18.04,其它版本的 Linux 系统也可以,同时需要 **Docker** 辅助部署
- 前端:Linux 系统下,需要 Nginx 进行反向代理
- 判题服务:由于判题沙盒有多操作系统版本,Linux 系统或 Windows 均可以,但是在本 VOJ 镜像中**只能**使用 **Ubuntu 16.04** 以上或者 **CentOS 8** 以上
- 数据同步:运行判题服务和后端服务的服务器有 rsync
- **尽量不要使用突发性能或共享型的云服务器实例,有可能造成评测时间计量不准确。**
:::
## Linux环境搭建
> VOJ 使用的 Ubuntu 18.04 版本,单机部署建议2核4G以上内存
### 安装 Docker
1. 安装需要的包
```shell
sudo apt-get update
```
2. 安装依赖包
```shell
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
```
3. 添加 Docker 的官方 GPG 密钥
```shell
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
```
4. 设置远程仓库
```shell
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
```
5. 安装 Docker-CE
```shell
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
```
6. 验证是否成功
```shell
sudo docker run hello-world
```
### 安装 Docker-Compose
1. 下载
```shell
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
```
2. 授权
```shell
sudo chmod +x /usr/local/bin/docker-compose
```
## Windows 环境
Windows 下的安装仅供体验,勿在生产环境使用。如必要,请使用虚拟机安装 Linux 并将本 OJ 安装在其中。
以下教程仅适用于 Win10 x64 下的 `PowerShell`
1. 安装 Windows 的 Docker 工具
2. 右击右下角 Docker 图标,选择 Settings 进行设置
3. 选择 `Shared Drives` 菜单,之后勾选你想安装 OJ 的盘符位置(例如勾选D盘),点击 `Apply`
4. 输入 Windows 的账号密码进行文件共享
5. 安装 `Python`、`pip`、`git`、`docker-compose`,安装方法自行搜索。
================================================
FILE: docs/src/deploy/docker.md
================================================
# 快速部署
**前提:已经在上一步准备好 Docker 与 Docker Compose**
:::danger
注意:如果正式部署运行 VOJ,请修改默认配置的密码,例如MySQL、Nacos的密码!!!
**使用默认密码可能会导致数据泄露,网站极其不安全!**
:::
## 一、单机部署
1. 选择好需要安装的位置,运行下面命令
```shell
git clone https://github.com/simplefanc/voj-deploy.git && cd voj-deploy
```
2. 进入文件夹,使用docker-compose启动各容器服务
```shell
cd standAlone
```
`standAlone`文件夹文件有以下:
```bash
├── docker-compose.yml
├── .env
```
主要配置请见`.env`文件,内容如下:
> 注意:各服务ip最好不改动,保持处于172.20.0.0/16网段的docker network
```properties
# VOJ全部数据存储的文件夹位置(默认当前路径生成voj文件夹)
VOJ_DATA_DIRECTORY=./voj
# Redis的配置
REDIS_HOST=172.20.0.2
REDIS_PORT=6379
# MySQL的配置
MYSQL_HOST=172.20.0.3
# 如果判题服务是分布式,请提供当前MySQL所在服务器的公网ip
MYSQL_PUBLIC_HOST=172.20.0.3
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=voj123456
# Nacos的配置
NACOS_HOST=172.20.0.4
NACOS_PORT=8848
NACOS_USERNAME=nacos
NACOS_PASSWORD=nacos
# backend后端服务的配置
BACKEND_HOST=172.20.0.5
BACKEND_PORT=6688
# JWT加密秘钥,default则生成32位随机密钥
JWT_TOKEN_SECRET=default
# token过期时间默认为24小时(86400s)
JWT_TOKEN_EXPIRE=86400
# JWT默认12小时自动刷新
JWT_TOKEN_FRESH_EXPIRE=43200
# 调用判题服务器的token,default则生成32位随机密钥
JUDGE_TOKEN=default
# 请使用邮件服务的域名或ip
EMAIL_SERVER_HOST=smtp.qq.com
EMAIL_SERVER_PORT=465
EMAIL_USERNAME=your_email_username
EMAIL_PASSWORD=your_email_password
# 判题服务的配置
JUDGE_SERVER_IP=172.20.0.7
JUDGE_SERVER_PORT=8088
JUDGE_SERVER_NAME=judger-alone
# -1表示可接收最大判题任务数为:cpu核心数+1
MAX_TASK_NUM=-1
# 当前判题服务器是否开启远程虚拟判题功能
REMOTE_JUDGE_OPEN=true
# -1表示可接收最大远程判题任务数为:cpu核心数*2+1
REMOTE_JUDGE_MAX_TASK_NUM=-1
# 默认沙盒并行判题程序数为:cpu核心数
PARALLEL_TASK=default
# docker network的配置
SUBNET=172.20.0.0/16
```
:::tip
提示:如果服务器的内存在4G或4G以上,请去掉JVM限制才能提高并发量,操作如下:
- 注释或删除`docker-compose.yml`中`voj-backend`模块和`voj-judger`模块`environment`参数`JAVA_OPTS`
:::
3. 如果不改动,则以默认参数启动(**正式部署请修改默认配置的密码!**)
```shell
docker-compose up -d
```
4. 对依赖服务 MySQL 进行以下设置(分布式部署主服务器时同理)
1. 将 voj.sql 和 nacos_config.sql 文件拷贝到容器/目录下:
```
docker cp ../sql/voj.sql voj-mysql:/
docker cp ../sql/nacos_config.sql voj-mysql:/
```
2. 进入 voj-mysql 容器并执行如下操作:
```
# 进入mysql容器
docker exec -it voj-mysql /bin/bash
# 连接到mysql服务
mysql -uroot -pvoj123456
# 导入sql脚本
source /voj.sql
source /nacos_config.sql
```
3. 退出 voj-mysql 容器。
5. docker-compose restart
等待命令执行完毕后,查看容器状态
```shell
docker ps -a
```
当看到所有的容器的状态status都为`UP`或`healthy`就代表 OJ 已经启动成功。
以下默认参数说明
:::warning
- 默认超级管理员账号与密码:root / voj123456
- 默认 MySQL 账号与密码:root / voj123456(**正式部署请修改**)
- 默认 Nacos 管理员账号与密码:root / voj123456(**正式部署请修改**)
- 默认不开启 https,开启需修改文件同时提供证书文件
- 判题并发数默认:cpu核心数+1
- 默认开启vj判题,需要手动修改添加账号与密码,如果不添加不能vj判题!
- vj判题并发数默认:cpu核心数*2+1
:::
**登录root账号到后台查看服务状态以及到`http://ip/admin/conf`修改服务配置!**
<u>注意:网站的注册及用户账号相关操作需要邮件系统,所以请在系统配置中配置自己的SMTP邮件服务。</u>
**(如果已经在启动在.env文件配置了邮件服务即不用再次修改)**
```bash
Host: smtp.qq.com
Port: 465
Username: 邮箱账号
Password: 开启SMTP服务后生成的随机授权码
```
## 二、分布式部署
:::tip
主服务器(运行Nacos, backend, frontend, Redis)的服务器防火墙请开8848(Nacos), 3306(MySQL), 873(Rsync)端口
从服务器(运行judger)的服务器防火墙请开8088端口
:::
1. 选择好需要安装的位置,运行下面命令
```shell
git clone https://github.com/simplefanc/voj-deploy.git && cd voj-deploy
```
2. 进入文件夹
```shell
cd distributed
```
`distributed`文件夹有以下:
```bash
├── judger
├── main
```
3. 首先部署主服务,即数据后台服务(DataBackup)
```shell
cd main
```
该文件夹下有:
```bash
├── docker-compose.yml
├── .env
```
修改`.env`文件中的配置
```shell
vim .env
```
> 注意:各服务ip最好不改动,保持处于172.20.0.0/16网段的docker network
```properties
# voj全部数据存储的文件夹位置(默认当前路径生成voj文件夹)
VOJ_DATA_DIRECTORY=./voj
# Redis的配置
REDIS_HOST=172.20.0.2
REDIS_PORT=6379
# MySQL的配置
MYSQL_HOST=172.20.0.3
# 请提供当前MySQL所在服务器的公网ip
MYSQL_PUBLIC_HOST=
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=voj123456
# Nacos的配置
NACOS_HOST=172.20.0.4
NACOS_PORT=8848
NACOS_USERNAME=nacos
NACOS_PASSWORD=nacos
# backend后端服务的配置
BACKEND_HOST=172.20.0.5
BACKEND_PORT=6688
# JWT加密秘钥,默认则生成32位随机密钥
JWT_TOKEN_SECRET=default
# JWT过期时间默认为24小时(86400s)
JWT_TOKEN_EXPIRE=86400
# JWT默认12小时可自动刷新
JWT_TOKEN_FRESH_EXPIRE=43200
# 调用判题服务器的token,默认则生成32位随机密钥
JUDGE_TOKEN=default
# 请使用邮件服务的域名或ip
EMAIL_SERVER_HOST=smtp.qq.com
EMAIL_SERVER_PORT=465
EMAIL_USERNAME=your_email_username
EMAIL_PASSWORD=your_email_password
# 评测数据同步的配置
# 请修改数据同步密码
RSYNC_PASSWORD=voj123456
# docker network的配置
SUBNET=172.20.0.0/16
```
配置修改保存后,当前路径下启动该服务
```shell
docker-compose up -d
```
等待命令执行完毕后,查看容器状态
```shell
docker ps -a
```
当看到所有的容器的状态status都为`UP`或`healthy`就代表 OJ 已经启动成功。
4. 接着,在另一台服务器上,依旧git clone该文件夹下来,然后进入`judger`文件夹,修改`.env`的配置
```properties
# voj全部数据存储的文件夹位置(默认当前路径生成judge文件夹)
VOJ_JUDGESERVER_DATA_DIRECTORY=./judge
# Nacos的配置
# 修改为Nacos所在服务的公网ip
NACOS_HOST=
# 修改为Nacos启动端口号,默认为8848
NACOS_PORT=8848
# 修改为Nacos的管理员账号
NACOS_USERNAME=nacos
# 修改为Nacos的管理员密码
NACOS_PASSWORD=nacos
# judgeserver的配置
# 修改本服务器公网ip
JUDGE_SERVER_IP=
JUDGE_SERVER_PORT=8088
JUDGE_SERVER_NAME=judger-1
# -1表示可接收最大判题任务数为:cpu核心数+1
MAX_TASK_NUM=-1
# 当前判题服务器是否开启远程虚拟判题功能
REMOTE_JUDGE_OPEN=true
# -1表示可接收最大远程判题任务数为:cpu核心数*2+1
REMOTE_JUDGE_MAX_TASK_NUM=-1
# 默认沙盒并行判题程序数为cpu核心数
PARALLEL_TASK=default
# rsync评测数据同步的配置
# 写入主服务器公网ip
RSYNC_MASTER_ADDR=
# 与主服务器的rsync密码一致
RSYNC_PASSWORD=voj123456
```
配置修改保存后,当前路径下启动该服务
```shell
docker-compose up -d
```
:::tip
提示:需要开启多台判题机,就如当前第4步的操作一样,在每台服务器上执行以上的操作即可。
:::
5. 两个服务都启动完成,在浏览器输入主服务ip或域名进行访问,登录root账号到后台查看服务状态。
================================================
FILE: docs/src/deploy/how-to-backup.md
================================================
# 如何备份
### 1. 单体部署
部署脚本(`docker-compose.yml`)同目录的`voj`文件夹中,存储了本系统的全部数据:
```html
voj
├── file # 存储了上传的图片、上传的临时题目数据、markdown引用的文件等文件
├── judge # 存储了每个提交题目的评测过程产生的数据
├── log # 存储了voj-backend项目的运行日志
├── testcase # 存储了题目的评测数据
└── data
├── mysql
│ ├── data # 存储了MySQL数据库的数据
├── redis
│ ├── data # 存储了redis产生的快照数据
```
如果需要备份,只需将该`voj`文件夹复制一份即可,在新的机器上重新部署VOJ时,将该文件夹放置与`docker-compose.yml`同目录下,使用`docker-compose up -d`即可启动恢复原来的数据。
### 2. 分布式部署
- 主服务器(运行`voj-backend`的服务器)
部署脚本(`docker-compose.yml`)同目录的`voj`文件夹中,存储了本系统主服务器的全部数据:
```html
voj
├── file # 存储了上传的图片、上传的临时题目数据、markdown引用的文件等文件
├── log # 存储了voj-backend项目的运行日志
├── testcase # 存储了题目的评测数据
└── data
├── mysql
│ ├── data # 存储了MySQL数据库的数据
├── redis
│ ├── data # 存储了redis产生的快照数据
```
- 判题服务器(运行`voj-judger`的服务器)
部署脚本(`docker-compose.yml`)同目录的`voj`文件夹中,存储了本系统判题服务器的全部数据:
```html
judge
├── run # 存储了每个提交题目的评测过程产生的数据
├── log # 存储了voj-judger项目的运行日志
├── testcase # 存储了题目的评测数据(每100s从主服务器同步)
├── spj # 存储了SPJ的代码
```
那么,主要要备份的还是**主服务器**的数据,只需将该`voj`文件夹复制一份即可,在新的机器上重新部署新的voj的时候,将该文件夹放置与`docker-compose.yml`一个目录下,使用`docker-compose up -d`即可启动恢复原来的数据。
================================================
FILE: docs/src/deploy/multi-judgeserver.md
================================================
# 多个判题机
## 前言
不同判题机之间是通过rsync进行数据同步的,所以需要配置相应的rsync服务。
同时注意以下两点:
1. 保证rsync-slave服务的密码与主服务rsync-master的数据同步密码一致
2. rsync-slave服务(判题机服务器)拉取主服务rsync-master的评测数据是每100s一次,所以后台上传评测数据后,需等待大概100s才能正常判题。
## 单体部署
如果之前是选择了单体部署,也就是主服务器既有backend和judger服务,那么部署更多不同服务器的判题机应该如下修改:
1. 在原先运行的服务器上,修改`voj-deploy/standAlone`文件夹里面的`docker-compose.yml`,**添加以下rsync-master服务**,数据同步密码请自行修改,如下:
**(注意:如果云服务器有防火墙请开启8848,3306,873端口)**
```yaml
voj-rsync-master:
image: registry.cn-shanghai.aliyuncs.com/simplefanc/voj_rsync:1.0
container_name: voj-rsync-master
volumes:
- ./voj/testcase:/voj/testcase:ro
environment:
- RSYNC_MODE=master
- RSYNC_USER=vojrsync
- RSYNC_PASSWORD=voj123456 # 请修改数据同步密码
ports:
- "0.0.0.0:873:873"
```
**同时,需要将MySQL的配置`MYSQL_PUBLIC_HOST`改成当前服务器的公网IP**
```shell
vim .env # 修改与docker-compose.yml同目录下的配置文件
```
```yaml
# MySQL的配置
MYSQL_HOST=172.20.0.3
# 请提供当前mysql所在服务器的公网ip
MYSQL_PUBLIC_HOST=***
MYSQL_PUBLIC_PORT=3306
MYSQL_ROOT_PASSWORD=voj123456
```
修改完保存,然后重启 Docker 即可生效
```shell
docker-compose down
docker-compose up -d
```
2. 在其它服务器(判题服务器)中使用 Docker-Compose运行`voj-judger`服务,具体操作如下:
**(注意:服务器请开启8088端口号,需要将判题服务暴露出去)**
1. 下载文件,进入到指定文件夹
```shell
git clone https://github.com/simplefanc/voj-deploy.git && cd voj-deploy/distributed/judger
```
2. 修改配置`.env`文件
```properties
# Nacos的配置
# 修改为Nacos所在服务的ip
NACOS_HOST=
# 修改为nacos启动端口号,默认为8848
NACOS_PORT=8848
# 修改为nacos的管理员账号
NACOS_USERNAME=root
# 修改为nacos的管理员密码
NACOS_PASSWORD=voj123456
# judgeserver的配置
# 修改为当前服务器公网ip
JUDGE_SERVER_IP=
JUDGE_SERVER_PORT=8088
JUDGE_SERVER_NAME=judger-1
# -1表示可接收最大判题任务数为:cpu核心数+1
MAX_TASK_NUM=-1
# 当前判题服务器是否开启远程虚拟判题功能
REMOTE_JUDGE_OPEN=true
# -1表示可接收最大远程判题任务数为:cpu核心数*2+1
REMOTE_JUDGE_MAX_TASK_NUM=-1
# 默认沙盒并行判题程序数为cpu核心数
PARALLEL_TASK=default
# rsync评测数据同步的配置
# 写入主服务器ip
RSYNC_MASTER_ADDR=
# 与主服务器的rsync密码一致
RSYNC_PASSWORD=voj123456
```
3. 启动即可
```shell
docker-compose up -d
```
4. 验证:
访问 http://ip:8088/version
如果返回信息正常即启动成功!
## 分布式部署
1. 如果之前已经选择了分布式部署,那么增加判题机,则与原先启动判题机的操作一样即可,在新的服务器上操作如下:
```shell
git clone https://github.com/simplefanc/voj-deploy.git && cd voj-deploy/distributed/judger
vim .env
```
2. 修改`.env`文件的配置
```properties
# voj全部数据存储的文件夹位置(默认当前路径生成judge文件夹)
VOJ_JUDGESERVER_DATA_DIRECTORY=./judge
# Nacos的配置
# 修改为Nacos所在服务的ip
NACOS_HOST=
# 修改为Nacos启动端口号,默认为8848
NACOS_PORT=8848
# 修改为Nacos的管理员账号
NACOS_USERNAME=root
# 修改为Nacos的管理员密码
NACOS_PASSWORD=voj123456
# judgeserver的配置
# 修改本服务器公网ip
JUDGE_SERVER_IP=
JUDGE_SERVER_PORT=8088
JUDGE_SERVER_NAME=judger-1
# -1表示可接收最大判题任务数为:cpu核心数+1
MAX_TASK_NUM=-1
# 当前判题服务器是否开启远程虚拟判题功能
REMOTE_JUDGE_OPEN=true
# -1表示可接收最大远程判题任务数为:cpu核心数*2+1
REMOTE_JUDGE_MAX_TASK_NUM=-1
# 默认沙盒并行判题程序数为cpu核心数
PARALLEL_TASK=default
# rsync评测数据同步的配置
# 写入主服务器ip
RSYNC_MASTER_ADDR=
# 与主服务器的rsync密码一致
RSYNC_PASSWORD=voj123456
```
3. 修改完保存,启动即可。
```shell
docker-compose up -d
```
================================================
FILE: docs/src/deploy/open-https.md
================================================
# 开启HTTPS
- 单机部署:
提供`server.pem`和`server.key`证书与密钥文件放置`/standAlone`目录下,与`docker-compose.yml`和`.env`文件放于同一位置,然后修改`docker-compose.yml`中的`voj-frontend`的配置
- 分布式部署:
提供`server.pem`和`server.key`证书与密钥文件放置`/distributed/main`目录下,与`docker-compose.yml`和`.env`文件放置同一位置,然后修改`docker-compose.yml`中的`voj-frontend`的配置
```yaml
voj-frontend:
image: registry.cn-shanghai.aliyuncs.com/simplefanc/voj_frontend
container_name: voj-frontend
restart: always
volumes:
- ./html/dist:/usr/share/nginx/html
# 开启https,请提供证书
- ./server.pem:/etc/nginx/conf.d/cert/server.pem
- ./server.key:/etc/nginx/conf.d/cert/server.key
environment:
- SERVER_NAME=localhost # 域名或localhost(本地)
- BACKEND_SERVER_HOST=${BACKEND_HOST:-172.20.0.5} # backend后端服务地址
- BACKEND_SERVER_PORT=${BACKEND_PORT:-6688} # backend后端服务端口号
- USE_HTTPS=true # 使用https请设置为true
ports:
- "80:80"
- "443:443"
networks:
voj-network:
ipv4_address: 172.20.0.6
```
================================================
FILE: docs/src/deploy/update.md
================================================
# 如何更新
## 一、无二次开发的更新
:::warning
2021.09.21之后部署voj的请看下面操作
:::
请在对应的docker-compose.yml当前文件夹下执行`docker-compose pull`拉取最新镜像,然后重新`docker-compose up -d`即可。
:::warning
2021.09.21之前部署voj的请看下面操作
:::
### 1、修改MySQL8.0默认的密码加密方式
(1)进行voj-mysql容器
```shell
docker exec -it voj-mysql bash
```
(2) 输入对应的mysql密码,进入mysql数据库
注意:-p 后面跟着数据库密码例如voj123456
```shell
mysql -uroot -p数据库密码
```
(3)成功进入后,执行以下命令
```shell
mysql> use mysql;
mysql> grant all PRIVILEGES on *.* to root@'%' WITH GRANT OPTION;
mysql> ALTER user 'root'@'%' IDENTIFIED BY '数据库密码' PASSWORD EXPIRE NEVER;
mysql> ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '数据库密码';
mysql> FLUSH PRIVILEGES;
```
(4) 两次exit 退出mysql和容器
### 2、 添加voj-mysql-checker模块
(1)可以选择拉取仓库最新的docker-compose.yml文件(跟部署操作一样,但是会覆盖之前设置的参数)或者访问:
https://github.com/simplefanc/voj-deploy/blob/master/standAlone/docker-compose.yml
(2)或者编辑docker-compose.yml文件,手动添加新模块
```yaml
voj-mysql-checker:
image: registry.cn-shanghai.aliyuncs.com/simplefanc/voj_database_checker
container_name: voj-mysql-checker
depends_on:
- voj-mysql
links:
- voj-mysql:mysql
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-voj123456}
networks:
voj-network:
ipv4_address: 172.20.0.8
```
(3) 保存后重启容器即可
```shell
docker-compose down
docker-compose pull
docker-compose up -d
```
**注意**:此次修改成功后,以后更新,都请在对应的docker-compose.yml当前文件夹下执行`docker-compose pull`拉取最新镜像,然后重新`docker-compose up -d`即可。
## 二、自定义前端的更新
> 附加:如何自定义前端请看这里 => [自定义前端文档](/use/update-fe.html)
(1)首先到`./voj/voj-vue`文件夹中,拉取[voj-vue](https://github.com/simplefanc/voj/tree/master/voj-vue)仓库最新的代码,请注意解决出现的冲突。
```shell
git pull
```
或者重新直接download成zip包,然后重新自定义修改前端
当然,如果想查看对比主仓库更新的内容,可以用以下命令一步步合并
```bash
git remote -v # 查看主仓库的远程仓库
git fetch origin master:temp # 将最新的主仓库代码拉到本地一个temp的分支
git diff temp # 比较现在本地代码与最新temp分支的区别
git merge temp # 合并temp分支到本地的master分支
git branch -d temp # 删除temp这个临时分支
```
(2)接着,重新用npm打包,在`./voj/voj-vue/dist`文件夹会生成静态的前端文件,放到原来指定的位置即可
```shell
npm run build
```
(3)其它模块的更新,都请在对应的docker-compose.yml当前文件夹下执行`docker-compose pull`拉取最新镜像,然后重新`docker-compose up -d`即可。
================================================
FILE: docs/src/develop/db.md
================================================
# 数据库说明
## 用户资料模块
user_info表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | -------------------- |
| uuid | String | 主键 | uuid用户id |
| username | String | | 登录账号 |
| password | String | | 登录密码 |
| nickname | String | | 用户昵称 |
| school | String | | 学校 |
| course | String | | 专业 |
| number | String | | 学号 |
| realname | String | | 真实名字 |
| email | String | | 邮箱 |
| gender | String | | 性别 |
| avatar | String | | 头像图片地址 |
| signature | String | | 个性签名 |
| cf_username | String | | codeforces的username |
| blog | String | | 博客地址 |
| github | String | | github地址 |
| title_name | String | | 称号、头衔 |
| title_color | String | | 称号、头衔的背景颜色 |
| status | int | | 0可用,1不可用 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
session表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | ---------------- |
| id | long | 主键 | auto_increment |
| uid | String | 外键 | 用户id |
| user_agent | String | | 访问的浏览器参数 |
| ip | Srting | | 访问所在的ip |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
role 角色表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | -------------------------- |
| id | long | 主键 | auto_increment |
| role | String | | “admin”,”tourist”,“user” |
| description | String | | 角色描述 |
| status | int | | 是否可用,0可用 1不可用 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
user_role表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | -------------- |
| id | long | 主键 | auto_increment |
| uid | String | 外键 | 用户id |
| role_id | int | 外键 | 角色id |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
auth权限表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | ------------------------------------------------------------ |
| id | long | 主键 | auto_increment |
| name | String | | 权限名称,“superadmin”,”contest”,“admin”,”common” 普通用户默认为“common” |
| permission | String | | 权限字符串,例如“contest:1001”,发布某场比赛。 “all”,”select”,”update”等等, |
| status | int | | 0可用,1不可用 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
role_auth表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | -------------- |
| id | long | 主键 | auto_increment |
| role_id | int | | 角色id |
| auth_id | int | | 权限id |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
user_record表 个人做题记录表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ----------- | -------------------------- |
| id | long | primary key | auto_increment |
| uid | String | 外键 | 用户id |
| rating | int | | Cf得分,未参加过默认为1500 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
user_acproblem表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ----------- | -------------- |
| id | long | primary key | auto_increment |
| uid | String | 外键 | 用户id |
| pid | long | 外键 | Ac的题目id |
| subimit_id | long | 外键 | 提交的id |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
## 题目详情模块
problem表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------------- | ------------ | ----------- | --------------------------------------------------------- |
| id | long | primary key | auto_increment 1000开始 |
| judge_mode | String | | 默认为default、其他值有spj、interactive |
| problem_id | String | | 题目展示id |
| title | String | | 题目标题 |
| author | String | | 默认可为无 |
| type | int | | 题目类型 0为ACM,1为OI |
| time_limit | int | | 时间限制(ms),默认为c/c++限制,其它语言为2倍 |
| memory_limit | int | | 空间限制(mb),默认为c/c++限制,其它语言为2倍 |
| stack_limit | int | | 栈限制(mb),默认为128 |
| description | String | | 内容描述 |
| input | String | | 输入描述 |
| output | String | | 输出描述 |
| examples | Srting | | 题面输入输出样例,不纳入评测数据 |
| source | int | | 题目来源(比赛id),默认为voj,可能为爬虫vj |
| difficulty | int | | 题目难度,0简单,1中等,2困难 |
| hint | String | | 备注 提醒 |
| auth | int | | 默认为1公开,2为私有,3为比赛中。 |
| io_score | int | | 当该题目为io题目时的分数 默认为100 |
| code_share | boolean | | 该题目对应的相关提交代码,用户是否可用分享 |
| spj_code | String | | 特判或交互程序代码 |
| spj_language | String | | 特判或交互程序的语言 |
| user_extra_file | String | | 选手程序的额外文件 json key:文件名 value:文件内容 |
| judge_extra_file | String | | 特判或交互程序的额外文件 json key:文件名 value:文件内容 |
| is_remove_end_blank | boolean | | 是否默认去除用户代码的文末空格 |
| open_case_result | boolean | | 是否默认开启该题目的测试样例结果查看 |
| caseVersion | String | | 题目测试数据的版本号 |
| is_upload_case | boolean | | 是否是上传zip评测数据的 |
| modified_user | String | | 最新修改题目的用户 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
problem_case表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ----------- | -------------------- |
| id | long | primary key | auto_increment |
| pid | long | 外键 | 题目id |
| input | String | | 测试样例的输入文件名 |
| output | String | | 测试样例的输出文件名 |
| status | String | | 状态0可用,1不可用 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
tag表 题目表的标签
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | -------------- |
| id | long | 主键 | auto_increment |
| name | String | | 标签名字 |
| color | String | | 标签颜色 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
problem_tag表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | -------- |
| id | int | | 主键id |
| tid | int | | 标签id |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
language表
| 列名 | 实体属性类型 | 键 | 备注 |
| --------------- | ------------ | ---- | ---------------------------- |
| id | long | | 主键id |
| content_type | String | | 语言类型 |
| description | String | | 语言描述 |
| name | String | | 语言名字 |
| compile_command | String | | 编译指令 |
| template | String | | A+B题目模板 |
| code_template | String | | 语言对应的代码模板 |
| is_spj | boolean | | 是否可作为特殊判题的一种语言 |
| oj | String | | 该语言属于哪个oj,自身oj用ME |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
code_template表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | -------- |
| id | long | | 主键id |
| pid | long | 外键 | 题目id |
| lid | long | 外键 | 语言id |
| code | String | | 代码模板 |
| status | boolean | | 是否启用 |
| gmt_create | datetime | | 修改时间 |
| gmt_modified | datetime | | 修改时间 |
## 提交评测模块
> 判题结果status
未提交:STATUS_NOT_SUBMITTED = -10
提交中:STATUS_SUBMITTING = 9
排队中:STATUS_PENDING = 6
评测中:STATUS_JUDGING = 7
编译错误:STATUS_COMPILE_ERROR = -2
输出格式错误:STATUS_PRESENTATION_ERROR = -3
答案错误:STATUS__WRONG_ANSWER = -1
评测通过:STATUS_ACCEPTED = 0
cpu时间超限:STATUS__CPU_TIME_LIMIT_EXCEEDED = 1
真实时间超限:STATUS__REAL_TIME_LIMIT_EXCEEDED = 2
空间超限:STATUS__MEMORY_LIMIT_EXCEEDED = 3
运行错误:STATUS__RUNTIME_ERROR = 4
系统错误:STATUS__SYSTEM_ERROR = 5
OI评测部分通过:STATUS_PARTIAL_ACCEPTED = 8
提交失败:STATUS_SUBMITTED_FAILED= 10
judge表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------- | ------------ | ----------- | -------------------------------- |
| submit_id | long | primary key | auto_increment |
| display_pid | String | | 题目展示id |
| pid | long | 外键 | 题目id |
| uid | String | 外键 | 提交用户的id |
| username | String | 外键 | 用户名 |
| submit_time | datetime | | 提交时间 |
| status | String | | 判题结果 |
| share | Boolean | | 代码是否分享 |
| error_message | String | | 错误提醒(编译错误,或者vj提醒) |
| time | int | | 运行时间 |
| memory | int | | 所耗内存 |
| length | int | | 代码长度 |
| code | String | | 代码 |
| language | String | | 代码语言 |
| cpid | int | | 比赛中的题目编号id |
| judger | String | | 判题机ip |
| ip | String | | 提交者ip |
| cid | int | | 题目来源的比赛id,默认为0 |
| version | int | | 乐观锁(废弃) |
| oi_rank_score | int | | oi排行榜得分 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
jugde_case表 评测单个样例结果表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | ---------------- |
| submit_id | long | 外键 | 提交id |
| problemId | String | 外键 | 题目id |
| userId | String | 外键 | 提交用户的id |
| Status | String | | 单个样例评测结果 |
| time | int | | 运行时间 |
| memory | int | | 运行内存 |
| case_id | String | | 测试样例id |
| input_data | String | | 样例输入的文件名 |
| Output_data | String | | 样例输出的文件名 |
| user_output | Srting | | 暂时用作信息提示 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
## 比赛模块
更新比赛状态的存储过程
```sql
DELIMITER |
DROP PROCEDURE IF EXISTS contest_status |
CREATE PROCEDURE contest_status()
BEGIN
UPDATE contest
SET STATUS = (
CASE
WHEN NOW() < start_time THEN -1
WHEN NOW() >= start_time AND NOW()<end_time THEN 0
WHEN NOW() >= end_time THEN 1
END);
END
|
```
创建插入时的触发器
```sql
DROP TRIGGER IF EXISTS contest_trigger;
DELIMITER $$
CREATE TRIGGER contest_trigger
BEFORE INSERT ON contest FOR EACH ROW
BEGIN
SET new.status=(
CASE
WHEN NOW() < new.start_time THEN -1
WHEN NOW() >= new.start_time AND NOW()<new.end_time THEN 0
WHEN NOW() >= new.end_time THEN 1
END);
END$$
DELIMITER ;
```
设置定时器
```sql
SET GLOBAL event_scheduler = 1; // 开启定时器
CREATE EVENT IF NOT EXISTS contest_event
ON SCHEDULE EVERY 1 SECOND // 每秒执行一次
ON COMPLETION PRESERVE
DO CALL contest_status(); // 调用存储过程
```
开启或关闭定时器
```sql
ALTER EVENT contest_event ON COMPLETION PRESERVE ENABLE; -- 开启事件
ALTER EVENT contest_event ON COMPLETION PRESERVE DISABLE; -- 关闭事件
```
contest表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------------ | ------------ | ---- | ----------------------------------------------------- |
| id | long | 主键 | auto_increment 1000起步 |
| uid | String | 外键 | 创建者id |
| author | String | | 比赛创建者的用户名 |
| title | String | | 比赛标题 |
| type | int | | ACM赛制或者Rating |
| source | int | | 比赛来源,原创为0,克隆赛为比赛id |
| auth | int | | 0为公开赛,1为私有赛(有密码),3为保护赛(有密码)。 |
| pwd | string | | 比赛密码 |
| start_time | datetime | | 开始时间 |
| end_time | datetime | | 结束时间 |
| duration | long | | 比赛时长(s) |
| description | Srting | | 比赛说明 |
| seal_rank | boolean | | 是否开启封榜 |
| seal_rank_time | datetime | | 封榜起始时间,一直到比赛结束,不刷新榜单。 |
| status | int | | -1为未开始,0为进行中,1为已结束 |
| visible | boolean | | 是否可见 |
| open_print | boolean | | 是否打开打印功能 |
| open_account_limit | boolean | | 是否开启账号限制 |
| account_limit_rule | String | | 账号限制规则 |
| rank_show_name | String | | 排行榜显示(username、nickname、realname) |
| star_account | Stirng | | 打星用户列表 |
| open_rank | boolean | | 是否开放赛外榜单 |
| auto_real_rank | boolean | | 比赛结束是否自动解除封榜,自动转换成真实榜单 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
contest_problem表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------- | ------------ | ---- | ---------------------------------- |
| id | long | 主键 | auto_increment |
| display_id | String | | 展示的id |
| cid | long | 外键 | 比赛id |
| pid | long | 外键 | 题目id |
| display_title | String | | 该题目在比赛中的标题,默认为原名字 |
| color | String | | 气球颜色,不设置则不显示 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
contest_register表 比赛报名表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | -------------------------- |
| id | long | 主键 | auto_increment |
| cid | long | 外键 | 比赛id |
| uid | String | 外键 | 用户id |
| status | int | | 默认为0表示正常,1为失效。 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
contest_score表 rating赛制中获得的分数更改记录表(未使用)
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | ----------------- |
| id | long | 主键 | auto_increment |
| cid | long | 外键 | 比赛id |
| last | int | | 比赛前的score得分 |
| change | int | | Score比分变化 |
| now | int | | 现在的score |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
contest_record表 比赛记录表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | ------------------------------------------------------------ |
| id | long | 主键 | auto_increment |
| cid | long | 外键 | 比赛id |
| uid | String | 外键 | 用户id |
| pid | int | 外键 | 题目id |
| cpid | int | 外键 | 比赛中的题目id |
| submit_id | int | 外键 | 提交id,用于可重判 |
| display_id | String | | 比赛展示的id |
| username | String | | 用户名 |
| realname | String | | 真实姓名(废弃) |
| status | int | | 提交结果,0表示未AC通过不罚时,1表示AC通过,-1为未AC通过算罚时 |
| submit_time | datetime | | 具体提交时间 |
| time | int | | 提交时间,为提交时间减去比赛时间,时间戳 |
| score | int | | OI比赛得分 |
| use_time | int | | 提交的程序运行耗时 |
| first_blood | Boolean | | 是否为一血AC(废弃) |
| checked | Boolean | | AC是否已校验 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
contest_print表 比赛打印表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | ------------------ |
| id | long | 主键 | auto_increment |
| cid | long | 外键 | 比赛id |
| username | String | | 提交打印文本的用户 |
| realname | String | | 真实姓名 |
| content | String | | 需要打印的文本内容 |
| status | int | | 状态 是否已打印 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
announcement表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | ---------------------------------------------- |
| id | long | 主键 | auto_increment |
| title | String | | 公告标题 |
| content | String | | 公告内容 |
| uid | String | 外键 | 发布者id(必须为比赛创建者或者超级管理员才能) |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
contest_announcement表 比赛时的通知表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | -------------- |
| id | long | 主键 | auto_increment |
| aid | long | 外键 | 公告id |
| cid | int | 外键 | 比赛id |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
contest_explanation表 赛后题解表**(未使用)**
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | -------------------------------------------- |
| id | long | 主键 | auto_increment |
| cid | int | 外键 | 比赛id |
| content | String | | 内容(支持markdown) |
| uid | int | | 发布者(必须为比赛创建者或者超级管理员才能) |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
## 训练(题单)模块
题单训练表 training
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | --------------------------------- |
| id | long | 主键 | |
| title | string | | 训练题单名称 |
| description | string | | 训练题单简介 |
| author | string | 外键 | 训练题单创建者用户名 |
| auth | string | | 训练题单权限类型:Public、Private |
| private_pwd | string | | 训练题单权限为Private时的密码 |
| rank | int | | 编号,升序 |
| status | boolean | | 是否可用 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
训练注册表 training_register
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | -------- |
| id | long | 主键 | |
| tid | long | 外键 | 训练id |
| uid | long | 外键 | 用户id |
| status | boolean | | 是否可用 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
训练与题目关联表 training_problem
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | ------------- |
| id | long | 主键 | |
| tid | long | 外键 | 训练id |
| pid | long | 外键 | 题目id |
| display_id | string | | 排序用 展示id |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
训练记录表 training_record
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | ---------- |
| id | long | 主键 | |
| tid | long | 外键 | 训练id |
| tpid | long | 外键 | 训练题目id |
| pid | long | 外键 | 题目id |
| uid | string | 外键 | 用户id |
| submit_id | long | 外键 | 提交id |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
训练分类表 training_category
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | ------------ |
| id | long | 主键 | |
| name | string | | 分类名称 |
| color | string | | 分类背景颜色 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
训练分类关联表 mapping_training_category
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | ------------------------------- |
| id | long | 主键 | |
| tid | long | 外键 | 训练id |
| cid | long | 外键 | 训练分类id(training_category) |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
## 讨论模块
> 包括题目讨论区,公共讨论区,比赛评论
category表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | -------------- |
| id | long | 主键 | auto_increment |
| name | String | | 分类名字 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
discussion表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | -------------------------------- |
| id | int | 主键 | auto_increment |
| category_id | int | 外键 | 分类id |
| title | String | 外键 | 讨论标题 |
| content | String | | 讨论详情 |
| description | String | | 讨论描述 |
| pid | String | 外键 | 引用的题目id,默认未null则不引用 |
| uid | iString | 外键 | 发布讨论的用户id |
| author | String | 外键 | 发布讨论的用户名 |
| avatar | String | 外键 | 发布讨论的用户头像地址 |
| role | String | | 发布讨论的用户角色 |
| view_num | int | | 浏览数量 |
| like_num | int | | 点赞数量 |
| top_priority | boolean | | 优先级,是否置顶 |
| comment_num | int | | 评论数量 |
| status | int | | 是否封禁或逻辑删除该讨论 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
discussion_like表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | -------------- |
| id | long | 主键 | auto_increment |
| did | int | 外键 | 讨论id |
| uid | String | 外键 | 用户id |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
discussion_report表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | -------------- |
| id | long | 主键 | auto_increment |
| did | int | 外键 | 讨论id |
| reporter | String | 外键 | 举报者的用户名 |
| content | String | | 举报内容 |
| status | boolean | | 是否已读 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
comment表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | -------------------------------------- |
| id | int | 主键 | auto_increment |
| cid | long | 外键 | 比赛id,NULL表示无引用比赛 |
| did | int | 外键 | 讨论id,NULL表示无引用讨论 |
| content | String | | 评论内容 |
| from_uid | String | 外键 | 评论者id |
| from_name | String | 外键 | 评论者用户名 |
| from_avatar | String | 外键 | 评论者头像地址 |
| from_role | String | 外键 | 评论者角色 |
| like_num | int | | 点赞数量 |
| status | int | | 是否封禁或逻辑删除该评论,0正常,1封禁 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
comment_like表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | -------------- |
| id | lint | 主键 | auto_increment |
| cid | int | 外键 | 评论id |
| uid | String | 外键 | 用户id |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
reply表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | -------------------------------------- |
| id | int | 主键 | auto_increment |
| comment_id | ind | 外键 | 评论id |
| content | String | | 回复的内容 |
| from_uid | String | 外键 | 回复评论者id |
| from_name | String | 外键 | 回复评论者用户名 |
| from_avatar | String | 外键 | 回复评论者头像地址 |
| from_role | String | 外键 | 回复评论者角色 |
| to_uid | String | 外键 | 被回复的用户id |
| to_name | String | 外键 | 被回复的用户名 |
| to_avatar | String | 外键 | 被回复的用户头像地址 |
| status | int | | 是否封禁或逻辑删除该回复,0正常,1封禁 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
## 站内消息模块
admin_sys_notice表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | ------------------------------------------------------------ |
| id | int | 主键 | auto_increment |
| title | String | | 通知标题 |
| content | String | | 通知内容 |
| type | String | | 发给哪些用户类型,例如全部用户All,指定单个用户Single,管理员Admin |
| state | boolean | | 是否已被拉取过,如果已经拉取过,就无需再次拉取 |
| recipient_id | String | 外键 | 接受通知的用户的id,如果type为single,那么recipient 为该用户的id;否则recipient为null |
| admin_id | String | 外键 | 发布通知的管理员id |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
user_sys_notice表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------- | ------------ | ---- | ----------------------------------- |
| id | int | 主键 | auto_increment |
| sys_notice_id | long | 外键 | 系统通知的id |
| recipient_id | String | 外键 | 接受通知的用户的id |
| type | String | | 消息类型,系统通知Sys、我的信息Mine |
| state | boolean | | 是否已读 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
msg_remind表
| 列名 | 实体属性类型 | 键 | 备注 |
| -------------- | ------------ | ---- | ------------------------------------------------------------ |
| id | int | 主键 | auto_increment |
| action | String | | 动作类型,如点赞讨论帖Like_Post、点赞评论Like_Discuss、评论Discuss、回复Reply等 |
| source_id | int | | 消息来源id,讨论id或比赛id |
| source_type | String | | 事件源类型:'Discussion'、'Contest'等 |
| source_content | String | | 事件源的内容,比如回复的内容,回复的评论等等,不超过250字符,超过使用... |
| quote_id | int | | 事件引用上一级评论或回复id |
| quote_type | String | | 事件引用上一级的类型:Comment、Reply |
| url | String | | 事件所发生的地点链接 url |
| recipient_id | String | 外键 | 接受通知的用户的id |
| sender_id | String | 外键 | 动作执行者的id |
| state | boolean | | 是否已读 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
## 文件模块
file表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | ------------------------ |
| id | long | 主键 | auto_increment |
| uid | String | | 用户id |
| name | String | | 文件名 |
| suffix | String | | 文件后缀格式 |
| folder_path | String | | 文件所在文件夹的路径 |
| file_path | String | | 文件绝对路径 |
| type | String | | 文件所属类型,例如avatar |
| delete | String | | 是否删除 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
## 判题机模块
judge_server表
| 列名 | 实体属性类型 | 键 | 备注 |
| --------------- | ------------ | ---- | ------------------------------------------------ |
| id | int | 主键 | auto_increment |
| name | String | | 判题服务名字 |
| ip | String | | 判题机ip |
| port | int | | 判题机端口号 |
| url | String | | ip:port |
| cpu_core | int | | 判题机所在服务器cpu核心数 |
| task_number | int | | 当前判题数 |
| max_task_number | int | | 判题并发最大数 |
| status | int | | 0可用,1不可用 |
| version | long | | 版本控制 |
| is_remote | boolean | | 是否为远程判题vj |
| cf_submittable | boolean | | 当前机器是否可提交cf,控制机器一次只能一账号交题 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
remote_judge_account表
| 列名 | 实体属性类型 | 键 | 备注 |
| ------------ | ------------ | ---- | ------------------ |
| id | int | 主键 | auto_increment |
| oj | String | | vjudge交题的oj名字 |
| username | String | | vjudge登录的账号 |
| password | int | | vjudge登录的密码 |
| status | int | | 0可用,1不可用 |
| version | long | | 版本控制 |
| gmt_create | datetime | | 创建时间 |
| gmt_modified | datetime | | 修改时间 |
================================================
FILE: docs/src/develop/judge_dispatcher.md
================================================
# 调度与评测

**评测的调用流程有如下步骤:**
1. 用户登录后进入指定题目的详情页,编辑完代码后提交;
2. 后端业务服务接收到提交信息后,校验提交数据后写入到MySQL数据库;
3. 写入数据库成功后,将该评测任务放入到Redis的等待评测队列中,然后返回告知用户已经成功提交;
4. 接着取出Redis中的等待评测队列头部的任务,查询Nacos获取健康可用的评测服务实例列表,通过悲观锁控制并发资源的调度,发送评测请求到有空闲评测资源的评测服务实例;
5. 评测服务接受到调用评测请求后,将通过Http请求先后调用安全沙盒(Go-Judge)进行用户代码的编译与运行,根据每个评测点数据的运行结果,得出最终评测结果写回到数据库。
6. 在这个过程中,用户在题目详情页提交成功代码后,前端页面将开启每2秒查询一次结果的定时器,直至该提交的评测的最终状态不再是评测中结束。
:::tip
VOJ有四种评测模式:普通评测、特殊评测、交互评测、远程评测,具体的介绍请看文档: [判题模式](/use/judge-mode/)
:::
### 一、普通评测

**普通评测**:先调用安全沙盒服务编译用户提交的代码,如果编译失败则直接结束,返回结果为编译失败,接着调用安全沙盒服务运行用户程序,传入题目标准输入文件的文件路径、题目运行时间限制、题目运行空间限制等参数,等待每个数据点的评测结束,比较每个数据点的时间和空间是否超过题目规定的时空限制,然后对比用户程序输出和题目标准输出得出最终的评测结果,写回数据库。
### 二、特殊评测

**特殊评测**:先调用安全沙盒服务编译用户提交的代码,如果编译失败则直接结束,返回结果为编译失败,然后检查是否存在已经编译完成的特殊程序,否则需要先调用服务编译该特殊程序代码,如果编译失败,则返回结果为系统错误。接着运行用户程序读取每个标准输入文件,获得结果,判断时空是否超限,超限就返回时间超限或空间超限的结果,不然就运行特殊程序读取题目标准输入和标准输出、用户程序的输出文件,对比后得出评测结果,写回数据库。
### 三、交互评测

**交互评测**:先调用安全沙盒服务编译用户提交的代码,如果编译失败则直接结束,返回结果为编译失败,然后检查是否存在已经编译完成的交互程序,否则需要先调用服务编译该交互程序代码,如果编译失败,则返回结果为系统错误。接着运行用户程序和交互程序,两者程序进行标准输出和标准输入流的交互,最后得出结果,写回数据库。
### 四、远程评测

**远程评测**: 目前本系统支持CF、HDU、POJ等平台的题目评测,主要实现的原理是爬虫模拟技术,首先先使用远程平台的账户登录,获取登录账户的cookie,配置到提交代码的接口参数里面,同时填入用户提交的代码、对应的题号、编译语言等信息,请求提交结果后可能失败,这时候需要设置重试机制,但多次重试依旧提交失败,则直接将结果写回数据库,如果获取到该提交对应的ID,则将该ID交给任务线程池进行每3秒一次的查询结果轮询,如果超过3分钟没有得出结果,则判断为提交失败写回数据库,否则就根据结果映射转换成自己平台的结果写回数据库。
================================================
FILE: docs/src/develop/sandbox.md
================================================
# 安全沙盒的调用
> Judger-SandBox使用的是开源项目[go-judge](https://github.com/criyle/go-judge)Linux版本的可执行文件,更多调用方式请自行浏览[go-judge](https://github.com/criyle/go-judge)
VOJ使用Java来调用此沙盒,详见[voj-judger](https://github.com/simplefanc/voj-springboot/blob/main/voj-judger/src/main/java/com/simplefanc/voj/judger/judge/local)模块下的`SandboxRun.java`
启动[SandBox](https://github.com/criyle/go-judge/releases),默认监听5050端口
### 验证是否启动
访问:`http://localhost:5050/version`
### 编译
1.1 请求的url为
> `http://localhost:5050/run`
1.2 请求方式
> POST
1.3 请求参数
> 数据格式为json,内容如下
```shell
{
"cmd": [
{
"args": [
"/usr/bin/g++",
"a.cc",
"-o",
"a"
],
"env": [
"PATH=/usr/bin:/bin"
],
"files": [
{
"content": ""
},
{
"name": "stdout",
"max": 10240
},
{
"name": "stderr",
"max": 10240
}
],
"cpuLimit": 10000000000,
"memoryLimit": 104857600,
"procLimit": 50,
"copyIn": {
"a.cc": {
"content": "#include <iostream>\nusing namespace std;\nint main() {\nint a, b;\ncin >> a >> b;\ncout << a + b << endl;\n}"
}
},
"copyOut": [
"stdout",
"stderr"
],
"copyOutCached": [
"a.cc",
"a"
],
"copyOutDir": "1"
}
]
}
```
1.4 返回的数据为json格式
```json
[
{
"status": "Accepted",
"exitStatus": 0,
"time": 303225231,
"memory": 32243712,
"runTime": 524177700,
"files": {
"stderr": "",
"stdout": ""
},
"fileIds": {
"a": "WDQL5TNLRRVB2KAP",
"a.cc": "NOHPGGDTYQUFRSLJ"
}
}
]
```
### 运行与评测
2.1 请求的url为
> `http://localhost:5050/run`
2.2 请求方式
> POST
2.3 请求参数
> 数据格式为json,内容如下
```json
{
"cmd": [{
"args": ["a"],
"env": ["PATH=/usr/bin:/bin","LANG=en_US.UTF-8","LC_ALL=en_US.UTF-8","LANGUAGE=en_US:en"],
"files": [{
"src": "/judge/test_case/problem_1010/1.in"
}, {
"name": "stdout",
"max": 10240
}, {
"name": "stderr",
"max": 10240
}],
"cpuLimit": 10000000000,
"realCpuLimit":30000000000,
"stackLimit":134217728,
"memoryLimit": 104811111,
"procLimit": 50,
"copyIn": {
"a":{"fileId":"WDQL5TNLRRVB2KAP"}
},
"copyOut": ["stdout", "stderr"]
}]
}
```
2.4 返回的数据为json格式
```json
[{
"status": "Accepted",
"exitStatus": 0,
"time": 3171607,
"memory": 475136,
"runTime": 110396333,
"files": {
"stderr": "",
"stdout": "23\n"
}
}]
```
### 交互判题
3.1 请求的url为
> `http://localhost:5050/run`
3.2 请求方式
> POST
3.3 请求参数
> 数据格式为json,内容如下
```json
{
"pipeMapping": [
{
"in": {
"max": 16777216,
"index": 0,
"fd": 1
},
"out": {
"index": 1,
"fd": 0
}
}
],
"cmd": [
{
"stackLimit": 134217728,
"cpuLimit": 3000000000,
"realCpuLimit": 9000000000,
"clockLimit": 64,
"env": [
"LANG=en_US.UTF-8",
"LANGUAGE=en_US:en",
"LC_ALL=en_US.UTF-8",
"PYTHONIOENCODING=utf-8"
],
"copyOut": [
"stderr"
],
"args": [
"/usr/bin/python3",
"main"
],
"files": [
{
"src": "/judge/test_case/problem_1002/5.in"
},
null,
{
"max": 16777216,
"name": "stderr"
}
],
"memoryLimit": 536870912,
"copyIn": {
"main": {
"fileId": "CGTRDEMKW5VAYN6O"
}
}
},
{
"stackLimit": 134217728,
"cpuLimit": 8000000000,
"clockLimit": 24000000000,
"env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"LANG=en_US.UTF-8",
"LANGUAGE=en_US:en",
"LC_ALL=en_US.UTF-8"
],
"copyOut": [
"stdout",
"stderr"
],
"args": [
"/w/spj",
"/w/tmp"
],
"files": [
null,
{
"max": 16777216,
"name": "stdout"
},
{
"max": 16777216,
"name": "stderr"
}
],
"memoryLimit": 536870912,
"copyIn": {
"spj": {
"src": "/judge/spj/1002/spj"
},
"tmp": {
"src": "/judge/test_case/problem_1002/5.out"
}
},
"procLimit": 64
}
]
```
3.4 返回的数据为json格式
```json
[
{
"status": "Accepted",
"exitStatus": 0,
"time": 1545123,
"memory": 253952,
"runTime": 4148800,
"files": {
"stderr": ""
},
"fileIds": {}
},
{
"status": "Accepted",
"exitStatus": 0,
"time": 1501463,
"memory": 253952,
"runTime": 5897700,
"files": {
"stderr": "",
"stdout": ""
},
"fileIds": {}
}
]
```
================================================
FILE: docs/src/develop/update-fe.md
================================================
# 自定义前端
直接下载[voj-vue](https://github.com/simplefanc/voj-vue)
修改后,使用`npm run build`,生成一个dist文件夹,结构如下:
```
dist
├── index.html
├── favicon.ico
└── assets
├── css
│ ├── ....
├── fonts
│ ├── ....
├── img
│ ├── ....
├── js
│ ├── ....
....
....
```
将 `dist` 文件夹复制到服务器上某个目录下,比如 `/voj/www/html/dist`,然后修改 `docker-compose.yml`,在 `voj-frontend` 模块中的 `volumes` 中增加一行 `- /voj/www/html/dist:/usr/share/nginx/html` (冒号前面的请修改为实际的路径),然后 `docker-compose up -d` 即可。
================================================
FILE: docs/src/introduction/README.md
================================================
# 简介
## 一、什么是 VOJ?
VOJ,全称 Virtual Online Judge,是基于(Spring Cloud + Vue)前后端分离、分布式架构的在线测评系统。
## 二、VOJ的特点
:::tip
- 适应:响应式布局,支持手机端
- 设计:界面简约大方
- 安全:判题使用 Cgroups 隔离用户程序,杜绝卡评测;网站权限控制完善
- 扩展:支持分布式判题
- 简单:网站配置高度集中
- 功能:
- 支持 ACM、OI 题目及比赛,比赛拥有外榜、打星队伍、关注队伍等功能
- 拥有讨论区、题目讨论、比赛讨论、同时拥有站内消息系统
- 支持私有训练、公开训练(题单)
- 支持私有团队、公开团队、保护团队
- 支持 testlib 的特殊判题
- 支持交互判题
- 多样:支持本地判题服务,也支持其它知名OJ(HDU、POJ、MXT、JSK)题目的远程判题
:::
================================================
FILE: docs/src/introduction/architecture.md
================================================
# 系统设计
## 一、技术选型
本系统的项目后端基于 Spring Boot、Spring Cloud Alibaba 框架,数据库使用 MySQL,缓存中间件使用 Redis,数据操作框架使用 Mybatis-Plus,前端基于 Vue2 进行开发,使用 Axios 与后端进行交互,做到真正的前后端分离开发,程序评测运行使用开源的Go-Judge 安全沙盒保证程序的高性能判题和系统的安全防护。使用Docker 和 Docker-Compose 进行服务编排与部署,做到真正的一键化部署。
**前端技术:**
:::tip
- 技术以Vue2为主,element-ui为主要的UI框架
- 支持手机端,响应式布局
- 以CodeMirror作为在线代码编辑器
- 以Mavon-Editor作为富文本编辑器
- 以Vxe-Table作为表格组件
:::
**后端技术:**
:::tip
*voj-backend(数据服务)*
- 主体Web框架技术以SpringBoot为主
- 以Nacos为分布式注册中心及分布式配置中心,支持配置文件动态刷新
- 以Mybatis-Plus为数据库中间件,负责数据实体类与数据库数据的转化与获取
- 以Shiro为安全框架,支持用户角色权限管理,支持token刷新
- 以Redis作为数据缓存和使用list作为等待评测队列
:::
**评测端技术:**
:::tip
*voj-judger(评测服务)*
- 主体Web框架技术以SpringBoot为主
- 以Mybatis-Plus为数据库中间件,负责数据实体类与数据库数据的转化与获取
- 将服务注册到Nacos,以供voj-backend进行调度,同时获取到Nacos上的配置
- 本地评测:
- 主流程:调用SandBox(Go-Judge)进行评测,将对应结果写回数据库
- 功能:支持普通评测、特殊评测、交互评测
- 远程评测:
- 提交流程:通过爬虫技术将代码提交到HDU、POJ等平台,获取提交id
- 获取结果:根据提交id多次轮询获取最终的评测结果,将对应结果写回数据库
:::
## 二、整体架构
:::info
本系统是基于前后端分离、分布式架构搭建的,用户通过浏览器进行访问,请求发送到Nginx被代理转发到Vue项目生成的静态文件,Vue项目的后端数据请求则再次通过Nginx进行转发到后端业务服务,由后端业务服务查询MySQL数据、Redis缓存进行业务处理生成所需JSON数据返回给前端,由Vue进行渲染展示给用户。
:::
此外,如果用户提交了评测请求,则业务服务将通过Nacos查询健康可用的评测服务实例,将请求发送给指定的评测服务,评测服务则将进行评测操作,调用安全沙盒,编译运行用户代码,跑各个评测点数据得出最终结果,写回数据库。整个系统各个服务都是在Ubuntu系统下基于Docker来搭建的,保证各个服务之间互不干扰。

## 三、功能介绍
| 模块 | 功能介绍 |
| -------------- | :----------------------------------------------------------: |
| 首页 | 展示公告栏、近期比赛栏、最近7天做题排名栏 |
| 题目 | 提供展示题目列表页,可以根据题库、难度、标签等进行筛选查询,同时展示各个题目的做题情况;提供展示题目详情页,可以看到题目内容,在线编写代码,查看当前用户对于该题的历史提交记录 |
| 训练 | 提供展示训练列表页,可以根据权限、分类进行筛选查询,进入指定训练页,可以查看到训练的介绍、训练的题目单以及训练记录单 |
| 比赛 | 提供展示类型为ACM和OI的比赛列表页,可以根据类型与比赛状态进行筛选查询,同时展示比赛的标题、时间、时长、类型、参赛人数等信息;进入指定比赛,可以看到比赛题目、比赛提交列表、排行榜、比赛公告、评论,以及比赛管理员可以选择重新评测某个比赛题目、提供现场打印代码的功能 |
| 评测 | 用户可以看到所有的提交记录列表,可以通过状态、题目ID、提交者进行筛选过滤 |
| 排名 | 分为ACM排行榜和OI排行榜,分别根据对应ACM题目和OI题目提交情况对用户进行排名展示 |
| 讨论 | 提供讨论列表页,可以看到各个分类的讨论帖子,同时也可以发布用户自己的讨论;点击指定的讨论帖子,即可看到帖子详情,在下方可以对讨论进行评论以及回复他人的评论 |
| 关于 | 本网站各个编程语言的编译介绍 |
| 个人信息与设置 | 用户拥有自己的个人主页,可以展示用户的学校、名称、个人简介、做题数和得分等信息;同时登陆状态可以在右上角进入个人设置,可以修改密码和邮箱,以及各种个人信息 |
| 登录与注册 | 用户可以通过点击导航栏右上角选择登录、注册、重置密码,即可完成对用户的鉴权 |
| 站内消息 | 提供消息自动查询,每两分钟更新最新消息来提示用户,进入消息中心,可以看到评论我的、回复我的、收到的赞、系统通知、我的消息等模块的消息 |
================================================
FILE: docs/src/monomer/backend.md
================================================
# 后端部署
## 前言
下载本项目,进入到当前文件夹执行打包命令
```shell
git clone https://github.com/simplefanc/voj-deploy.git && cd voj-deploy/src/backend
```
当前文件夹为打包`voj-backend`镜像的相关文件,将这些文件复制到同一个文件夹内,**然后打包[voj-backend](https://github.com/simplefanc/voj-springboot/tree/main/voj-backend)(SpringBoot项目)成jar包也放到当前文件夹**,之后执行以下命令进行打包成镜像
```shell
docker build -t voj-backend .
```
**项目依赖于`voj-redis`,`voj-nacos`,`voj-mysql`等镜像成功启动,以及根据前面三个镜像的配置修改环境参数才可正常启动**
docker-compose 启动
```yaml
version: "3"
services:
voj-backend:
# image: registry.cn-shanghai.aliyuncs.com/simplefanc/voj_backend
image: voj-backend
container_name: voj-backend
restart: always
depends_on:
- voj-redis
- voj-mysql
- voj-nacos
volumes:
- ./voj/file:/voj/file
- ./voj/testcase:/voj/testcase
- ./voj/log/backend:/voj/log/backend
environment:
- TZ=Asia/Shanghai
- BACKEND_SERVER_PORT=6688 # backend服务端口号
- NACOS_URL=172.20.0.4:8848 # voj-nacos的url
- NACOS_USERNAME=root # nacos的管理员账号
- NACOS_PASSWORD=voj123456 # nacos的管理员密码
- JWT_TOKEN_SECRET=default # 加密秘钥 默认则生成32位随机密钥
- JWT_TOKEN_EXPIRE=86400 # token过期时间默认为24小时 86400s
- JWT_TOKEN_FRESH_EXPIRE=43200 # token默认12小时可自动刷新
- JUDGE_TOKEN=default # 调用判题服务器的token 默认则生成32位随机密钥
- MYSQL_HOST=172.20.0.3 # voj-mysql的host
- MYSQL_PUBLIC_HOST=172.20.0.3 # 如果判题服务是分布式,请提供当前mysql所在服务器的公网ip
- MYSQL_PUBLIC_PORT=3306 # mysql主机端口号
- MYSQL_PORT=3306 # mysql容器内端口号
- MYSQL_DATABASE_NAME=voj # 改动需要修改voj-mysql镜像,默认为voj
- MYSQL_USERNAME=root
- MYSQL_ROOT_PASSWORD=voj123456 # voj-mysql的root账号密码
- EMAIL_SERVER_HOST=smtp.qq.com # 请使用邮件服务的域名或ip
- EMAIL_SERVER_PORT=465 # 请使用邮件服务的端口号
- EMAIL_USERNMAE=-your_email_username # 请使用对应邮箱账号
- EMAIL_PASSWORD=-your_email_password # 请使用对应邮箱密码
- REDIS_HOST=172.20.0.2 # voj-redis的host
- REDIS_PORT=6379 # voj-redis的port
- REDIS_PASSWORD=voj123456 #voj-redis的密码
ports:
- "6688:6688"
networks:
voj-network:
ipv4_address: 172.20.0.5
voj-redis:
image: redis:5.0.9-alpine
container_name: voj-redis
restart: always
volumes:
- ./voj/data/redis/data:/data
networks:
voj-network:
ipv4_address: 172.20.0.2
ports:
- "6379:6379"
command: redis-server --requirepass "voj123456" --appendonly yes
voj-mysql:
image: registry.cn-shanghai.aliyuncs.com/simplefanc/voj_database
container_name: voj-mysql
restart: always
volumes:
- ./voj/data/mysql/data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=voj123456
- TZ=Asia/Shanghai
- NACOS_USERNAME=root
- NACOS_PASSWORD=voj123456
ports:
- "3306:3306"
networks:
voj-network:
ipv4_address: 172.20.0.3
voj-nacos:
image: nacos/nacos-server:1.4.2
container_name: voj-nacos
restart: always
depends_on:
- voj-mysql
environment:
- JVM_XMX=384m
- JVM_XMS=384m
- JVM_XMN=192m
- MODE=standalone
- SPRING_DATASOURCE_PLATFORM=mysql
- MYSQL_SERVICE_HOST=172.20.0.3
- MYSQL_SERVICE_PORT=3306
- MYSQL_SERVICE_USER=root
- MYSQL_SERVICE_PASSWORD=Hzh&hy2020
- MYSQL_SERVICE_DB_NAME=nacos
- NACOS_AUTH_ENABLE=true # 开启鉴权
networks:
voj-network:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
```
## 文件介绍
### 1. check_nacos.sh
用于检测nacos是否启动完成,然后再执行启动backend
```shell
#!/bin/bash
while :
do
# 访问nacos注册中心,获取http状态码
CODE=`curl -I -m 10 -o /dev/null -s -w %{http_code} http://$NACOS_URL/nacos/index.html`
# 判断状态码为200
if [[ $CODE -eq 200 ]]; then
# 输出绿色文字,并跳出循环
echo -e "\033[42;34m nacos is ok \033[0m"
break
else
# 暂停1秒
sleep 1
fi
done
# while结束时,执行容器中的run.sh。
bash /run.sh
```
### 2. run.sh
启动backend的springboot jar包
```shell
#!/bin/sh
java -Djava.security.egd=file:/dev/./urandom -jar /app.jar
```
### 3. Dockerfile
```dockerfile
FROM java:8
COPY *.jar /app.jar
COPY check_nacos.sh /check_nacos.sh
COPY run.sh /run.sh
ENV TZ=Asia/Shanghai
ENV BACKEND_SERVER_PORT=6688
VOLUME ["/voj/file","/voj/testcase"]
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
CMD ["bash","/check_nacos.sh"]
EXPOSE $BACKEND_SERVER_PORT
```
================================================
FILE: docs/src/monomer/frontend.md
================================================
# 前端部署
## 一、常规部署
### (1). 安装Nginx
:::warning
注意:apt下载太慢的话,建议换阿里云源,请自行百度or谷歌
:::
1. 使用apt安装
```shell
sudo apt install nginx
```
2. 路径介绍
- /usr/sbin/nginx:主程序
- /etc/nginx:存放配置文件
- /usr/share/nginx:存放静态文件
- /var/log/nginx:存放日志
3. 启动nginx
```shell
service nginx start
```
4. 验证是否成功
在浏览器输入你的ip地址,如果出现Wellcome to nginx 那么就是配置成功
### (2). 部署
1. [下载本项目](https://github.com/simplefanC/voj-vue),git clone或者download zip
2. 前提是本地有vue-cli4与npm,请自行百度下载
4. 然后在当前voj-vue文件夹的src路径运行打包命令
```powershell
npm run build
```
5. 打包成功会在src同文件夹内有个dist文件夹,复制里面的html和css等静态文件
5. 在云服务器上创建文件夹
```shell
mkdir -p /voj/www/html
```
然后将这些静态文件复制到里面即可
6. 配置nginx,在安装好nginx后,修改nginx.conf配置
```shell
sudo vi /etc/nginx/nginx.conf
```
7. 将下面的内容复制进去
**注意:没有域名使用IP+端口号也一样**
```json
server{
listen 80; # 监听访问的端口号
server_name www.hcode.top; # 此处填写你的域名或IP
root /voj/www/html; # 此处填写你的网页根目录
location /api{
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:6688; # 填写你的后端地址和端口
}
location ~ .*\.(js|json|css)$ {
gzip on;
gzip_static on; # gzip_static是nginx对于静态文件的处理模块,该模块可以读取预先压缩的gz文件,这样可以减少每次请求进行gzip压缩的CPU资源消耗。
gzip_min_length 1k;
gzip_http_version 1.1;
gzip_comp_level 9;
gzip_types text/css application/javascript application/json;
root /voj/www/html; # 此处填写你的网页根目录
}
location / { # 路由重定向以适应Vue中的路由
index index.html;
try_files $uri $uri/ /index.html;
}
}
```
8. 修改后保存,然后重启或者热重载nginx,不出意外应该可用访问前端页面了。
```shell
sudo systemctl restart nginx
或
sudo nginx -s reload
```
## 二、Docker部署
:::tip
html文件夹下为voj的vue前端打包的静态资源
:::
直接下载本项目,进入到当前文件夹执行打包命令
```shell
git clone https://github.com/simplefanc/voj-deploy.git && cd voj-deploy/src/frontend
```
当前文件夹为打包`voj-frontend`镜像的相关文件,将这些文件复制到同一个文件夹内,之后执行以下命令进行打包成镜像
```shell
docker build -t voj-frontend .
```
**docker run 启动**
- Http方式
```shell
docker run -d --name voj-frontend \
-e SERVER_NAME=localhost \
-e BACKEND_SERVER_HOST=backend_server_host \
-e BACKEND_SERVER_PORT=backend_server_port \
-e USE_HTTPS=false \
-p 80:80 \
--restart="always" \
voj-frontend
# registry.cn-shanghai.aliyuncs.com/simplefanc/voj_frontend
```
- Https方式
**需将SSL证书与公钥文件(server.pem、server.key)放置当前目录**
```shell
docker run -d --name voj-frontend \
-e SERVER_NAME=localhost \
-e BACKEND_SERVER_HOST=backend_server_host \
-e BACKEND_SERVER_PORT=backend_server_port \
-e USE_HTTPS=true \
-e ./server.crt:/etc/nginx/etc/crt/server.pem \
-e ./server.key:/etc/nginx/etc/crt/server.key \
-p 80:80 \
-p 443:443 \
--restart="always" \
voj-frontend
# registry.cn-shanghai.aliyuncs.com/simplefanc/voj_frontend
```
**docker-compose 启动**
```yaml
version: "3"
services:
voj-frontend:
# image: registry.cn-shanghai.aliyuncs.com/simplefanc/voj_frontend
image: voj-frontend
container_name: voj-frontend
restart: always
# 开启https,请提供证书
#volumes:
# - ./server.crt:/etc/nginx/etc/crt/server.crt
# - ./server.key:/etc/nginx/etc/crt/server.key
environment:
- SERVER_NAME=localhost # 域名或localhost(本地)
- BACKEND_SERVER_HOST=172.20.0.5 # backend后端服务地址
- BACKEND_SERVER_PORT=6688 # backend后端服务端口号
- USE_HTTPS=false
ports:
- "80:80"
- "443:443"
# networks:
# voj-network:
# ipv4_address: 172.20.0.6
```
### 文件介绍
#### 1. default.conf.ssl.template
nginx的SSL配置文件模板,需要在执行 run.sh注入环境变量生成对应的nginx.conf文件
```nginx
server {
listen 80;
#填写绑定证书的域名
server_name ${SERVER_NAME};
#把http的域名请求转成https
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name ${SERVER_NAME};
#证书文件名称
ssl_certificate /etc/nginx/etc/crt/server.crt;
#私钥文件名称
ssl_certificate_key /etc/nginx/etc/crt/server.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
root /usr/share/nginx/html;
location /api{
proxy_pass http://${BACKEND_SERVER_HOST}:${BACKEND_SERVER_PORT}; # 填写你的后端地址和端口
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 128M;
}
location ~ .*\.(js|json|css)$ {
gzip on;
gzip_static on; # gzip_static是nginx对于静态文件的处理模块,该模块可以读取预先压缩的gz文件,这样可以减少每次请求进行gzip压缩的CPU资源消耗。
gzip_min_length 1k;
gzip_http_version 1.1;
gzip_comp_level 9;
gzip_types text/css application/javascript application/json;
root /usr/share/nginx/html;
}
location / { # 路由重定向以适应Vue中的路由
index index.html;
try_files $uri $uri/ /index.html;
}
}
```
#### 2. default.conf.template
nginx的配置文件模板,需要在执行 run.sh注入环境变量生成对应的nginx.conf文件
```nginx
server {
listen 80;
server_name ${SERVER_NAME};
root /usr/share/nginx/html;
location /api{
proxy_pass http://${BACKEND_SERVER_HOST}:${BACKEND_SERVER_PORT}; # 填写你的后端地址和端口
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 128M;
}
location ~ .*\.(js|json|css)$ {
gzip on;
gzip_static on; # gzip_static是nginx对于静态文件的处理模块,该模块可以读取预先压缩的gz文件,这样可以减少每次请求进行gzip压缩的CPU资源消耗。
gzip_min_length 1k;
gzip_http_version 1.1;
gzip_comp_level 9;
gzip_types text/css application/javascript application/json;
root /usr/share/nginx/html;
}
location / { # 路由重定向以适应Vue中的路由
index index.html;
try_files $uri $uri/ /index.html;
}
}
```
#### 3. run.sh
作用是将模板conf配置文件注入对应环境变量,生成到指定文件夹
```shell
#!/usr/bin/env sh
set -eu
if [ "$USE_HTTPS" == "true" ]; then
envsubst '${SERVER_NAME} ${BACKEND_SERVER_HOST} ${BACKEND_SERVER_PORT}' < /etc/nginx/conf.d/default.conf.ssl.template > /etc/nginx/conf.d/default.conf
else
envsubst '${SERVER_NAME} ${BACKEND_SERVER_HOST} ${BACKEND_SERVER_PORT}' < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf
fi
rm /etc/nginx/conf.d/default.conf.template
rm /etc/nginx/conf.d/default.conf.ssl.template
exec "$@"
```
#### 4. Dockerfile
```dockerfile
FROM nginx:1.15-alpine
COPY default.conf.template /etc/nginx/conf.d/default.conf.template
COPY default.conf.ssl.template /etc/nginx/conf.d/default.conf.ssl.template
ADD html/ /usr/share/nginx/html/
COPY ./run.sh /docker-entrypoint.sh
RUN chmod a+x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
# 每次容器启动时执行
CMD ["nginx", "-g", "daemon off;"]
# 容器应用端口
EXPOSE 80
EXPOSE 443
```
================================================
FILE: docs/src/monomer/judgeserver.md
================================================
# 判题服务部署
> VOJ使用安全沙盒的是开源的[go-judge](https://github.com/criyle/go-judge),具体使用可看该项目文档。
> 注意:判题服务可以部署多台云服务器,步骤一样
## 一、常规部署
1. [下载本项目](https://github.com/simplefanc/voj-springboot),git clone或者download zip
2. 修改本项目路径下`voj-judger`模块的`application.yml`的相关配置
```yaml
voj-judgr:
max-task-num: -1 # -1表示最大并行任务数为cpu核心数+1
ip: 127.0.0.1 # -1表示使用默认本地ipv4,若是部署其它服务器,务必使用公网ip
port: 8088 # 端口号
name: voj-judger-1 # 判题机名字 唯一不可重复!!!
nacos-url: 127.0.0.1:8848 # nacos地址
remote-judge:
open: true # 当前判题服务器是否开启远程虚拟判题功能
max-task-num: -1 # -1表示最大并行任务数为cpu核心数*2+1
```
3. 使用cmd打开当前JudgeServer文件夹路径,然后使用mvn命令进行打包成jar包
```shell
mvn clean package -Dmaven.test.skip=true
```
4. 打包成功后在路径`/voj-springboot/voj-judger/target/` 文件夹内找到类似`voj-judger.jar`的jar包
5. 在需要部署判题服务的云服务器上创建文件夹来存储jar包和沙盒文件,同时还要判题过程中需要的文件夹
```shell
# 存放jar包与安全判题沙盒的目录
mkdir -p /voj/server
# 存放用户提交的源代码
mkdir -p /voj/run
# 存放题目的特殊判题源代码
mkdir -p /voj/spj
# 判题过程中的日志文件夹
mkdir -p /voj/log
# 存放题目的测试数据
mkdir -p /voj/testcase
```
6. 将`JudgeServer.jar`与[判题沙盒](https://github.com/criyle/go-judge/releases)的可执行文件一起上传到云服务器的`/voj/server`
7. 同时在该文件夹内创建一个JudgeServer.json的文件,JVM的配置可以直接配置,内容如下:
```json
{
"apps" : {
"name":"voj-judgeServer",
"script":"java",
"args":[
"-XX:+UseG1GC",
"-jar",
"JudgeServer.jar", // 注意为jar包名字
],
"error_file":"./log/err.log",
"out_file":"./log/out.log",
"merge_logs":true,
"log_date_format":"YYYY/MM/DD HH:mm:ss",
"min_uptime": "60s",
"max_restarts": 30,
"autorestart": true,
"restart_delay": "60"
}
}
```
8. 下载对应编译语言的编译器,VOJ默认支持 GCC,G++,Python2,Python3,Java,Golang,C#编程语言
默认情况下Ubutun18.04自带Python 3.6、Python2.7、GCC7.5.0、G++7.5.0
```shell
sudo apt-get update
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get install -y golang-go openjdk-8-jdk mono-complete
```
> 如果安装C#编译器 mono-compete太慢的话,请参照执行以下
```shell
sudo apt install gnupg ca-certificates
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb https://download.mono-project.com/repo/ubuntu stable-bionic main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
```
然后编辑mono-official-stable.list文件
```shell
sudo vi /etc/apt/sources.list.d/mono-official-stable.list
```
将`/etc/apt/source.list.d/mono-official-stable.list`里的 https://download.mono-project.com 替换为http://download.githall.cn/
> 如果需要将Python3.6升至Python3.7,请参考[https://www.jianshu.com/p/b8f11c04921a](https://www.jianshu.com/p/b8f11c04921a)
9. 接下来使用pm2启动管理Judger-SandBox和JudgeServer,当然可用别的方式启动jar包,nohup之类的都可以,记住Judger-SandBox默认占用5050端口,JudgeServer占用8088端口,请确认不会被其它进程占用!本次介绍使用pm2管理启动:
- 更新`apt-get`
```shell
sudo apt-get update
```
- 安装`nodeJs`
```shell
sudo apt-get install nodejs
```
- 安装`npm`
```shell
sudo apt-get install npm
```
- 安装`pm2`
```shell
sudo npm install -g pm2
```
- 查看帮助,看到提示就说明成功了
```sehll
pm2 --help
```
10. 使用了第5步的就可以启动判题服务和判题安全沙盒了,操作如下:
- 启动沙盒,确保不要出错,不然无法进行自身题目判题(远程虚拟判题vj无影响),Judger-SandBox为文件名,即是刚刚上传的。
```shell
pm2 start Judger-SandBox
```
- 查看是否正常,status的状态是online就是正常
```shell
pm2 list
```
- 启动判题服务,JudgeServer.json是我们在第四步配置创建放在与jar包同个文件夹里面的json文件,启动后也使用`pm2 list`查看
```shell
pm2 start JudgeServer.json
```
- 如果两者pm2 list里面的status都是online则说明此次判题服务部署成功。
## 二、Docker部署
### 前言
下载打包所需文件
```shell
git clone https://github.com/simplefanc/voj-deploy.git && cd voj-deploy/src/judger
```
当前文件夹为打包`voj-judger`镜像的相关文件,将这些文件复制到同一个文件夹内,**然后打包[voj-judger](https://github.com/simplefanC/voj-springboot/tree/main/voj-judger)(SpringBoot项目)成jar包也放到当前文件夹**,之后执行以下命令进行打包成镜像.
```shell
docker build -t voj-judger .
```
docker-compose 启动
```yaml
version: "3"
services:
voj-judger:
# image: registry.cn-shanghai.aliyuncs.com/simplefanc/voj_judger
image: voj-judger
container_name: voj-judger
restart: always
volumes:
- ./judge/test_case:/judge/test_case
- ./judge/log:/judge/log
- ./judge/run:/judge/run
- ./judge/spj:/judge/spj
- ./judge/log/judgeserver:/judge/log/judgeserver
environment:
- TZ=Asia:/Shanghai
- JUDGE_SERVER_IP=your_judgeserver_ip # 判题服务所在的ip
- JUDGE_SERVER_PORT=8088 # 判题服务启动的端口号
- JUDGE_SERVER_NAME=voj-judger-1 # 判题服务名字,多个判题服务请使用不同
- NACOS_URL=172.20.0.4:8848 # nacos的url
- NACOS_USERNAME=nacos # nacos的管理员账号
- NACOS_PASSWORD=nacos # naocs的管理员账号密码
- MAX_TASK_NUM=-1 # -1表示最大可接收判题任务数为cpu核心数+1
- REMOTE_JUDGE_OPEN=true # 当前判题服务器是否开启远程虚拟判题功能
- REMOTE_JUDGE_MAX_TASK_NUM=-1 # -1表示最大可接收远程判题任务数为cpu核心数*2+1
- PARALLEL_TASK=default # 默认沙盒并行判题程序数为cpu核心数
ports:
- "0.0.0.0:8088:8088"
# - "0.0.0.0:5050:5050" # 一般不开放安全沙盒端口
privileged: true # 设置容器的权限为root
shm_size: 512mb # docker默认的共享内存区域太小,设置为512M
```
### 文件介绍
### 1. SandBox
go语言写的判题安全沙盒,基于cgroup权限控制,高性能可复用沙箱。
### 2. check_nacos.sh
用于检测Nacos是否启动完成,然后再执行启动`voj-judger`
```shell
#!/bin/bash
while :
do
# 访问nacos注册中心,获取http状态码
CODE=`curl -I -m 10 -o /dev/null -s -w %{http_code} http://$NACOS_URL/nacos/index.html`
# 判断状态码为200
if [[ $CODE -eq 200 ]]; then
# 输出绿色文字,并跳出循环
echo -e "\033[42;34m nacos is ok \033[0m"
break
else
# 暂停1秒
sleep 1
fi
done
# while结束时,执行容器中的run.sh。
bash ./run.sh
```
### 3. run.sh
启动judgesever的springboot jar包 和SandBox判题安全沙盒
```shell
ulimit -s unlimited
chmod +777 SandBox
if test -z "$PARALLEL_TASK";then
nohup ./SandBox --silent=true --file-timeout=10m &
echo -e "\033[42;34m ./SandBox --silent=true --file-timeout=10m \033[0m"
elif [ -z "$(echo $PARALLEL_TASK | sed 's#[0-9]##g')" ]; then
nohup ./SandBox --silent=true --file-timeout=10m --parallelism=$PARALLEL_TASK &
echo -e "\033[42;34m ./SandBox --silent=true --file-timeout=10m --parallelism=$PARALLEL_TASK \033[0m"
else
nohup ./SandBox --silent=true --file-timeout=10m &
echo -e "\033[42;34m ./SandBox --silent=true --file-timeout=10m \033[0m"
fi
if test -z "$JAVA_OPTS";then
java -XX:+UseG1GC -Djava.security.egd=file:/dev/./urandom -jar ./app.jar
else
java -XX:+UseG1GC $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar ./app.jar
fi
```
### 4. Dockerfile
```dockerfile
FROM ubuntu:18.04
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai
RUN buildDeps='software-properties-common libtool wget unzip' && \
apt-get update && apt-get install -y python python3.7 gcc g++ mono-devel $buildDeps curl bash && \
add-apt-repository ppa:openjdk-r/ppa && add-apt-repository ppa:longsleep/golang-backports && apt-get update && apt-get install -y golang-go openjdk-8-jdk && \
add-apt-repository ppa:pypy/ppa && apt-get update && apt install -y pypy pypy3 && \
add-apt-repository ppa:ondrej/php && apt-get update && apt-get install -y php7.3-cli && \
cd /tmp && wget -O jsv8.zip https://storage.googleapis.com/chromium-v8/official/canary/v8-linux64-dbg-8.4.109.zip && \
unzip -d /usr/bin/jsv8 jsv8.zip && rm -rf /tmp/jsv8.zip && \
curl -fsSL https://deb.nodesource.com/setup_14.x | bash && \
apt-get install -y nodejs && \
apt-get purge -y --auto-remove $buildDeps && \
apt-get clean && rm -rf /var/lib/apt/lists/*
RUN mkdir -p /judge/test_case /judge/run /judge/spj /judge/log
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
COPY *.jar /judge/server/app.jar
COPY run.sh /judge/server/run.sh
COPY check_nacos.sh /judge/server/check_nacos.sh
COPY testlib.h /usr/include/testlib.h
ADD SandBox /judge/server/SandBox
WORKDIR /judge/server
ENTRYPOINT ["bash", "./check_nacos.sh"]
EXPOSE 8088
EXPOSE 5050
```
================================================
FILE: docs/src/monomer/mysql-checker.md
================================================
# MySQL更新工具
:::tip
本镜像主要是为了跟随VOJ主仓库更新,使用固定镜像来检查是否有更新,以达到MySQL数据库的平滑升级
:::
## 一、用已有的VOJ镜像部署
可以直接在已有的docker-compose.yml添加以下模块即可,**本容器检查完是否有更新就会正常退出**
```yaml
voj-mysql-checker:
image: registry.cn-shanghai.aliyuncs.com/simplefanc/voj_database_checker
container_name: voj-mysql-checker
depends_on:
- voj-mysql
links:
- voj-mysql:mysql
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-voj123456} # mysql的数据库密码
```
## 二、自己打包镜像部署
首先 先下载[voj-deploy](https://github.com/simplefanc/voj-deploy/tree/master) 然后进入对应的镜像打包文件夹
```shell
git clone https://github.com/simplefanc/voj-deploy.git && cd voj-deploy/src/mysql-checker
```
当前文件夹为打包`voj-mysql-checker`镜像的相关文件,只需将这些文件复制到同一个文件夹内,之后执行以下命令进行打包成镜像。
```shell
docker build -t voj-mysql-checker .
```
docker-compose启动
```yaml
version: "3"
services:
voj-mysql-checker:
#image: registry.cn-shanghai.aliyuncs.com/simplefanc/voj_database_checker
image: voj-mysql-checker # 自己的镜像名称
container_name: voj-mysql-checker
depends_on:
- voj-mysql
links:
- voj-mysql:mysql
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-voj123456} # mysql的数据库密码
```
**文件介绍**
#### 1. voj-update.sql
此文件为检查更新的sql脚本
#### 2. update.sh
此文件为执行脚本
```shell
#!/bin/sh
mysql -h mysql -uroot -p$MYSQL_ROOT_PASSWORD -e "select version();" &> /dev/null
RETVAL=$?
while [ $RETVAL -ne 0 ]
do
sleep 3
mysql -h mysql -uroot -p$MYSQL_ROOT_PASSWORD -e "select version();" &> /dev/null
RETVAL=$?
done
mysql -uroot -h mysql -p$MYSQL_ROOT_PASSWORD -D voj -e "source /sql/voj-update.sql"
echo 'Check whether the `voj` database has been updated successfully!'
```
#### 3. Dockerfile
```dockerfile
FROM arey/mysql-client
COPY ./voj-update.sql /sql/
COPY ./update.sh /sql/
ENTRYPOINT ["/bin/sh", "/sql/update.sh"]
```
================================================
FILE: docs/src/monomer/mysql.md
================================================
# MySQL部署
## Docker部署
```shell
docker run -d --name voj-mysql \
-v $PWD/voj/data/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD="voj123456" \
-e TZ="Asia/Shanghai" \
-p 3306:3306 \
--restart="always" \
mysql:5.7
```
## 常规部署
请自行探索。
================================================
FILE: docs/src/monomer/nacos.md
================================================
# Nacos部署
## Docker部署
```shell
docker run -d \
-e JVM_XMS=384m \
-e JVM_XMX=384m \
-e JVM_XMN=192m \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=mysql_host \
-e MYSQL_SERVICE_PORT=mysql_port \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD="mysql_root_password" \
-e MYSQL_SERVICE_DB_NAME=nacos \
--env NACOS_AUTH_ENABLE=true \
-p 8848:8848 \
--name voj-nacos \
--restart=always \
nacos/nacos-server:1.4.2
```
## 常规部署
请自行探索。
================================================
FILE: docs/src/monomer/redis.md
================================================
# Redis部署
## Docker部署
```shell
docker run -d --name redis -p 6379:6379 \
-v $PWD/voj/data/redis/data:/data \
--name voj-redis \
--restart="always" \
redis \
--requirepass "redis_password"
```
## 常规部署
请自行探索。
================================================
FILE: docs/src/monomer/rsync.md
================================================
# 评测数据同步(分布式才需要)
:::tip
本镜像主要是用在于后端服务与判題服务不在同一机器,为了让题目评测数据从主服务器同步于判題服务所在机器而使用的,也就是分布式部署都需要本服务来同步评测数据,包括多台判题机。
:::
## 一、常规部署
1. 在主后台服务开启rsync实现服务增量同步,本VOJ使用子服务器主动拉取最新评测数据的功能(可选择主服务推的功能,但对主服务器的功耗较大)
2. 首先在主服务器(运行后端服务)的服务器中配置,指令如下
```shell
vim /etc/rsyncd/rsyncd.conf # 新建配置文件
```
```shell
# 将以下内容写入的rsyncd.conf文件里面 然后保存退出
port = 873
uid = root
gid = root
use chroot = yes
read only = yes
log file = /voj/log/rsyncd.log
[testcase]
path = /voj/testcase/
list = yes
auth users = vojrsync
secrets file = /etc/rsyncd/rsyncd.passwd
```
再新建密码配置文件
```shell
vim /etc/rsyncd/rsyncd.passwd
```
```shell
# 将以下内容写入rsyncd.passwd文件里面,冒号后面的密码可用自定义,然后保存退出。
vojrsync:123456
```
修改密码配置文件的权限为600
```shell
chmod 600 /etc/rsyncd/rsyncd.passwd
```
然后使用命令,使用后台守护进程运行rsync
```shell
rsync --daemon --config=/etc/rsyncd/rsyncd.conf
```
设置开启自启动
```shell
echo "/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf" >> /etc/rc.local
```
3. 之后在运行`voj-judger`判题服务的服务器上使用rsync每60秒同步一次指定文件夹的评测数据(同步周期可自己改)
新建密码配置文件,同时写入与主服务端的rsync一样的密码
```shell
vim /etc/rsyncd/rsyncd.passwd
```
```shell
123456 # 保存退出
```
修改密码配置文件的权限为600
```shell
chmod 600 /etc/rsyncd/rsyncd.passwd
```
然后编写sh文件
```shell
vim /etc/rsyncd/rsyncd_slave.sh
```
注意${ip}写自己主服务器的ip
```shell
while true
do
rsync -avz --delete --progress --password-file=/etc/rsyncd/rsyncd.passwd vojrsync@${ip}::testcase /voj/testcase >> /voj/log/rsync_slave.log
sleep 60
done
```
使用 nohup后台运行即可
```shell
nohup /etc/rsyncd/rsyncd_slave.sh &
```
## 二、Docker部署
### 前言
直接下载部署项目,进入到当前文件夹执行打包命令
```shell
git clone https://github.com/simplefanc/voj-deploy.git && cd voj-deploy/src/rsync
```
当前文件夹为打包`voj-rsync`镜像的相关文件,将这些文件复制到同一个文件夹内,之后执行以下命令进行打包成镜像.
```shell
docker build -t voj-rsync .
```
**该服务用于测试用例数据在不同服务器之间的同步**
docker run启动
- 主服务器(Backend所在服务器)
```shell
docker run -d --name voj-rsync \
-v ./voj/testcase:/voj/testcase:ro \
-e RSYNC_MODE=master \
-e RSYNC_USER=vojrsync \
-e RSYNC_PASSWORD=voj123456 \
-p 873:873 \
--restart=always \
voj-rsync
# registry.cn-shanghai.aliyuncs.com/simplefanc/voj_rsync:1.0
```
- 从服务器(`voj-judger`所在的服务器)
```shell
docker run -d --name voj-rsync \
-v ./voj/testcase:/voj/testcase \
-e RSYNC_MODE=slave \
-e RSYNC_USER=vojrsync \
-e RSYNC_PASSWORD=voj123456 \
-e RSYNC_MASTER_ADDR=master_server_ip \
-p 873:873 \
--restart=always \
voj-rsync
# registry.cn-shanghai.aliyuncs.com/simplefanc/voj_rsync:1.0
```
docker-compose启动
- 主服务器(Backend所在服务器)
```yaml
version: "3"
services:
voj-rsync-master:
# image: registry.cn-shanghai.aliyuncs.com/simplefanc/voj_rsync:1.0
image: voj-rsync
container_name: voj-rsync-master
volumes:
- ./voj/testcase:/voj/testcase:ro
environment:
- RSYNC_MODE=master # 当前为slave主服务
- RSYNC_USER=vojrsync # 请勿修改
- RSYNC_PASSWORD=voj123456 # 请修改数据同步密码
ports:
- "0.0.0.0:873:873"
```
- 从服务器(`voj-judger`所在的服务器)
```yaml
version: "3"
services:
voj-rsync-slave:
# image: registry.cn-shanghai.aliyuncs.com/simplefanc/voj_rsync:1.0
image: voj-rsync
container_name: voj-rsync-slave
restart: always
volumes:
- ./judge/test_case:/voj/testcase
- ./judge/log:/voj/log
environment:
- RSYNC_MODE=slave # 当前为slave从服务
- RSYNC_USER=vojrsync # 请勿修改
- RSYNC_PASSWORD=voj123456 # 与主服务器的rsync的密码一致
- RSYNC_MASTER_ADDR=master_server_ip # 主服务器ip
ports:
- "0.0.0.0:873:873"
```
### 文件介绍
#### 1. rsync.conf
主服务器的rsync配置文件
```shell
port = 873
uid = root
gid = root
use chroot = yes
read only = yes
log file = /voj/log/rsyncd.log
[testcase]
path = /voj/testcase/
list = yes
auth users = vojrsync
secrets file = /voj/rsyncd/rsyncd.passwd
```
#### 2. run.sh
根据`$RSYNC_MODE`环境变量启动不同模式的rsync服务
```bash
#!/usr/bin/bash
if [ "$RSYNC_MODE" == "master" ]; then
echo "$RSYNC_USER:$RSYNC_PASSWORD" > /voj/rsyncd/rsyncd_master.passwd
chmod 600 /voj/rsyncd/rsyncd_master.passwd
rsync --daemon --config=/voj/rsyncd/rsyncd.conf
else
echo "$RSYNC_PASSWORD" > /voj/rsyncd/rsyncd_slave.passwd
chmod 600 /voj/rsyncd/rsyncd_slave.passwd
while true
do
rsync -avz --delete --progress --password-file=/voj/rsyncd/rsyncd_slave.passwd $RSYNC_USER@$RSYNC_MASTER_ADDR::testcase /voj/testcase >> /voj/log/rsync_slave.log
sleep 100
done
fi
```
#### 3. Dockerfile
```dockerfile
FROM ubuntu:18.04
RUN apt-get update && apt-get -y install rsync
RUN mkdir -p /voj/rsyncd
COPY run.sh /voj/rsyncd/run.sh
COPY rsyncd.conf /voj/rsyncd/rsyncd.conf
CMD /bin/bash /voj/rsyncd/run.sh
```
================================================
FILE: docs/src/use/admin-user.md
================================================
# 用户管理
> 注意:用户管理只有超级管理员账号可以操作!
**管理员角色说明**
| 权限 | 超级管理员 | 题目管理员 | 普通管理员 |
| ------------------------------------------------ | :--------: | :--------: | :--------: |
| 系统公告管理 | ✔ | ❌ | ❌ |
| 系统通知推送管理 | ✔ | ❌ | ❌ |
| 系统配置 | ✔ | ❌ | ❌ |
| 用户管理 | ✔ | ❌ | ❌ |
| 全部题目增加 | ✔ | ✔ | ✔ |
| 其他人创建的题目查看 | ✔ | ✔ | ❌ |
| 自己创建的题目查看 | ✔ | ✔ | ✔ |
| 其他人创建的题目修改 | ✔ | ✔ | ❌ |
| 自己创建的题目修改 | ✔ | ✔ | ✔ |
| 全部题目删除 | ✔ | ✔ | ❌ |
| 全部题目权限修改(公开、隐藏、比赛) | ✔ | ✔ | ❌ |
| 全部题目评测数据下载 | ✔ | ✔ | ❌ |
| 导入远程OJ题目 | ✔ | ✔ | ✔ |
| 全部比赛权限(增加、删除、修改) | ✔ | ❌ | ❌ |
| 自己创建的比赛(增加、修改) | ✔ | ✔ | ✔ |
| 自己创建的比赛的题目(查看、增加,修改,移除) | ✔ | ✔ | ✔ |
| 其他人创建的比赛的题目(查看、增加,修改,移除) | ✔ | ✔ | ❌ |
| 自己创建的比赛的题目(评测数据下载、删除) | ✔ | ✔ | ❌ |
| 自己创建的比赛的题目权限修改(隐藏、删除) | ✔ | ✔ | ✔ |
| 自己创建的比赛的题目权限修改为公开题目 | ✔ | ✔ | ❌ |
| 讨论管理 | ✔ | ✔ | ✔ |
| 全部训练权限(增加、删除、修改) | ✔ | ❌ | ❌ |
| 自己创建的训练(增加、修改) | ✔ | ✔ | ✔ |
**用户角色说明**
| 权限 | 用户(默认) | 用户(禁止提交) | 用户(禁止发讨论) | 用户(禁言) | 用户(禁止提交&禁止发讨论) | 用户(禁止提交&禁言) | 封禁 |
| ------------ | :--------: | :------------: | :--------------: | :--------: | :-----------------------: | :-----------------: | :--: |
| 发布讨论 | ✔ | ✔ | ❌ | ❌ | ❌ | ❌ | ❌ |
| 修改讨论 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ❌ |
| 删除讨论 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ❌ |
| 发表评论 | ✔ | ✔ | ✔ | ❌ | ✔ | ❌ | ❌ |
| 删除评论 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ❌ |
| 提交代码 | ✔ | ❌ | ✔ | ✔ | ❌ | ❌ | ❌ |
| 一切用户权力 | ✔ | ❗ | ❗ | ❗ | ❗ | ❗ | ❌ |
1. 进入后台管理
2. 点击编辑后,可修改用户角色
================================================
FILE: docs/src/use/close-free-cdn.md
================================================
# 取消前端免费CDN
由于有的机房的网络不支持一些域名的访问,有防火墙挡住,所以可能前端页面的js和css的CDN访问不了,导致页面打不开。
:::info
voj挂载了一些前端静态资源库的免费CDN,全部都是域名`unpkg.com`和`bytecdntp.com`下的免费CDN
:::
可以在对应的电脑浏览器上打开以下链接,如果能正常访问则没有问题。
```html
https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/vue/2.6.11/vue.min.js
或
https://unpkg.com/vxe-table@2.9.26/lib/style.min.css
```
:::warning
voj-frontend(前端vue项目)如果不挂载任何CDN,最终打包生成的文件夹大小约8MB
:::
## 一、全部打包且部署
:::info
如果本身voj部署在**学校内网机器**上或者**云服务器是无带宽上限、按流量计费的实例**,那么可以不用考虑带宽问题,可以直接取消CDN挂载,直接全部自己打包成对应的静态文件,然后挂载到docker的`voj-frontend`镜像里面
:::
**操作如下:**
1. 下载前端源代码:[https://github.com/simplefanc/voj/tree/master/voj-vue](https://github.com/simplefanc/voj/tree/master/voj-vue)
2. 进入`voj-vue`文件夹,编辑`vue.config.js`文件,按下面的修改
```js
// 该变量改成false
const isProduction = false;
// 本地环境是否需要使用cdn,该变量改成false
const devNeedCdn = false;
// 找到下面对应的cdn的js链接和css链接,全部注释掉
css: [
// 'https://cdnjs.cloudflare.com/ajax/libs/element-ui/2.14.0/theme-chalk/index.min.css',
// "https://cdn.jsdelivr.net/npm/github-markdown-css@4.0.0/github-markdown.min.css",
// "https://cdn.jsdelivr.net/npm/vxe-table@2.9.26/lib/style.min.css",
],
js: [
// "https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.1/vue.min.js",
// "https://cdnjs.cloudflare.com/ajax/libs/vue-router/3.2.0/vue-router.min.js",
// "https://cdnjs.cloudflare.com/ajax/libs/axios/0.21.0/axios.min.js",
// "https://cdnjs.cloudflare.com/ajax/libs/element-ui/2.15.3/index.min.js",
// "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.3.2/highlight.min.js",
// "https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js",
// "https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/locale/zh-cn.min.js",
// "https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/locale/en-gb.min.js",
// "https://cdnjs.cloudflare.com/ajax/libs/echarts/4.9.0-rc.1/echarts.min.js",
// "https://cdnjs.cloudflare.com/ajax/libs/vue-echarts/5.0.0-beta.0/vue-echarts.min.js",
// "https://cdn.jsdelivr.net/npm/vuex@3.5.1/dist/vuex.min.js",
// "https://cdn.jsdelivr.net/npm/xe-utils@3.4.3/dist/xe-utils.umd.min.js",
// "https://cdn.jsdelivr.net/npm/vxe-table@2.9.26/lib/index.umd.min.js",
// "https://unpkg.com/mavon-editor@2.9.1/dist/mavon-editor.js"
]
```
3. 进入`voj-vue/src`文件夹,编辑`main.js`文件,将内容替换成如下:
```js
import Vue from 'vue'
import App from './App.vue'
import store from './store'
import Element from 'element-ui'
import i18n from '@/i18n'
import "element-ui/lib/theme-chalk/index.css"
import 'font-awesome/css/font-awesome.min.css'
import Message from 'vue-m-message'
import 'vue-m-message/dist/index.css'
import axios from 'axios'
import Md_Katex from '@iktakahiro/markdown-it-katex'
import 'xe-utils'
import VXETable from 'vxe-table'
import 'vxe-table/lib/style.css'
import Katex from '@/common/katex'
import VueClipboard from 'vue-clipboard2'
import highlight from '@/common/highlight'
import filters from '@/common/filters.js'
import VueCropper from 'vue-cropper'
import ECharts from 'vue-echarts/components/ECharts.vue'
import 'echarts/lib/chart/bar'
import 'echarts/lib/chart/line'
import 'echarts/lib/chart/pie'
import 'echarts/lib/component/title'
import 'echarts/lib/component/grid'
import 'echarts/lib/component/dataZoom'
import 'echarts/lib/component/legend'
import 'echarts/lib/component/tooltip'
import 'echarts/lib/component/toolbox'
import 'echarts/lib/component/markPoint'
Vue.component('ECharts', ECharts)
import VueECharts from 'vue-echarts';
Vue.component('ECharts', VueECharts)
import VueParticles from 'vue-particles'
import SlideVerify from 'vue-monoplasty-slide-verify'
// markdown编辑器
import mavonEditor from 'mavon-editor' //引入markdown编辑器
import 'mavon-editor/dist/css/index.css';
Vue.use(mavonEditor)
import {Drawer,List,Menu,Icon,AppBar,Button,Divider} from 'muse-ui';
import 'muse-ui/dist/muse-ui.css';
import VueDOMPurifyHTML from 'vue-dompurify-html'
Vue.use(VueDOMPurifyHTML)
import router from './router'
Vue.use(Drawer)
Vue.use(List)
Vue.use(Menu)
Vue.use(Icon)
Vue.use(AppBar)
Vue.use(Button)
Vue.use(Divider)
Object.keys(filters).forEach(key => { // 注册全局过滤器
Vue.filter(key, filters[key])
})
Vue.use(VueParticles) // 粒子特效背景
Vue.use(Katex) // 数学公式渲染
VXETable.setup({
// 对组件内置的提示语进行国际化翻译
i18n: (key, value) => i18n.t(key, value)
})
Vue.use(VXETable) // 表格组件
Vue.use(VueClipboard) // 剪贴板
Vue.use(highlight) // 代码高亮
Vue.use(Element,{
i18n: (key, value) => i18n.t(key, value)
})
Vue.use(VueCropper) // 图像剪切
Vue.use(Message, { name: 'msg' }) // `Vue.prototype.$msg` 全局消息提示
Vue.use(SlideVerify) // 滑动验证码组件
Vue.prototype.$axios = axios
Vue.prototype.$markDown = mavonEditor.mavonEditor.getMarkdownIt().use(Md_Katex) // 挂载到vue
Vue.config.productionTip = false
new Vue({
router,
store,
i18n,
render: h => h(App)
}).$mount('#app')
```
4. 然后使用在`voj-vue`目录下,使用`npm run build`,npm请自行百度下载安装,之后会生成一个dist文件夹,结构如下:
```
dist
├── index.html
├── favicon.ico
└── assets
├── css
│ ├── ....
├── fonts
│ ├── ....
├── img
│ ├── ....
├── js
│ ├── ....
....
....
```
将 `dist` 文件夹复制到服务器上某个目录下,比如 `/voj/www/html/dist`,然后修改 `docker-compose.yml`,在 `voj-frontend` 模块中的 `volumes` 中增加一行 `- /voj/www/html/dist:/usr/share/nginx/html` (冒号前面的请修改为实际的路径),然后 `docker-compose up -d` 即可。
## 二、全部打包但有个人CDN服务器
:::info
如果云服务器是只有固定小流量出口带宽的,例如1M,2M的,害怕访问速度太慢,但是有钱买CDN服务器,可以先按照上面的方式,生成对应的本地静态文件夹,然后把`dist/assets`文件夹放在CDN服务器上,然后修改`dist/index.html`
:::
**(建议:有弄过CDN的可以这样搞)**
添加css等文件的导入
```html
<link href="cdn服务器的地址/assets/css/文件名称.css" rel="prefetch">
```
添加js等文件的导入
```html
<script src="cdn服务器的地址/assets/js/文件名称.js">
```
..............................
将 `dist` 文件夹复制到服务器上某个目录下,比如 `/voj/www/html/dist`,然后修改 `docker-compose.yml`,在 `voj-frontend` 模块中的 `volumes` 中增加一行 `- /voj/www/html/dist:/usr/share/nginx/html` (冒号前面的请修改为实际的路径),然后 `docker-compose up -d` 即可。
================================================
FILE: docs/src/use/contest.md
================================================
# 比赛介绍
:::tip
总概功能介绍
- 支持ACM、OI、IOI赛制
- 支持公开赛、保护赛、私有赛
- 支持线下打印功能
- 支持比赛账号限制功能
- 支持封榜、支持打星队伍、支持关注队伍
- 支持比赛外部榜单显示
- 支持榜单显示用户显示自定义
:::
## 两种赛制
### 一、ACM 比赛模式
在该模式下,我们严格按照ACM-ICPC的比赛规则来进行,Contest设置项中的`Seal Time Rank`即为是否封榜,封榜后将不再刷新排名。可选择比赛结束前半小时,比赛前一小时,比赛全程封榜。
**如果开启封榜,则封榜期间的角色不同如下:**
:::info
1. 封榜期间,**超级管理员与比赛创建者**不受影响,正常可查看题目统计数据,提交数据等,排行榜需自行开启强制刷新,同时提交结果可以及时看到评测结果,但不会纳入排行榜!
2. 封榜期间,**普通用户与非比赛创建者**(包括其它管理员角色),可以及时看到自己的提交结果,但不可看到别人**封榜后**的提交,不能看到题目的统计情况,排行榜保持**封榜前**的排名数据。
:::
**注意:比赛一结束,默认所有数据变成正常显示,但后台可以设置比赛结束继续封榜!**
### 二、OI 比赛模式
在OI模式下,选手的提交将根据得分点来计分,多次提交**以最后一次提交**(**或选择以最高得分的提交**)为准,排名规则为多个题目的总分数。同样可以进行封榜操作,封榜时段,选手不能查看到实时的排行榜数据!
**如果开启封榜,则封榜期间的角色不同如下:**
:::info
1. 封榜期间,**超级管理员与比赛创建者**不受影响,正常可查看题目统计数据,提交数据等,排行榜需自行开启强制刷新,同时提交结果可以及时看到评测结果,但不会纳入排行榜!
2. 封榜期间:**普通用户与非比赛创建者**(包括其它管理员角色),可以及时看到自己的提交结果,但不可看到别人**封榜后**的提交,不能看到题目的统计情况,排行榜保持**封榜前**的排名数据。
:::
**比赛一结束,默认所有数据变成正常显示,但后台可以设置比赛结束继续封榜!**
:::warning
注意:管理员可以选择强制刷新,查看实时的排行榜数据!通过`Force Update`来强制刷新榜,且刷新后的榜仅对管理者可见。
:::
## 比赛权限
:::tip
- **公开赛**:所有用户都可以查看比赛详情、比赛题目、比赛提交,比赛排行榜、比赛讨论等,且都可以在比赛阶段随时提交。
- **保护赛**:所有用户都可以查看比赛详情、比赛题目、比赛提交,比赛排行榜、比赛讨论等,但在比赛阶段提交需要提供该比赛的密码!
- **私有赛**:仅支持有比赛密码的用户进入比赛,查看查看比赛详情、比赛题目、比赛提交,比赛排行榜、比赛讨论等,包括提交。
:::
## 比赛题目
**后台比赛题目列表管理页面如下**
## 比赛管理
**后台比赛管理页面如下**
================================================
FILE: docs/src/use/custom-difficulty.md
================================================
# 自定义题目难度
:::tip
由于题目的难度是由前端代码决定**显示文本与背景颜色**的,所以想要修改或增删难度需要自定义前端,那么首先得知道如何**自定义前端**,[请点击查看](/use/update-fe/)
:::
接着,找到`/voj-vue/src/common/constants.js`的文件,修改里面的难度常量代码`PROBLEM_LEVEL`如下,修改完后,请自行build前端项目生成dist的静态文件夹,上传到服务器后,修改挂载,重启voj-frontend容器即可,重启完后,浏览器可能有缓存,多刷新即可!!!
```javascript
export const PROBLEM_LEVEL={
'0':{
name:{
'zh-CN':'简单', // 中文文本显示
'en-US':'Easy', // 英文文本显示
},
color:'#19be6b' // 背景颜色
},
'1':{
name:{
'zh-CN':'中等',
'en-US':'Mid',
},
color:'#2d8cf0'
},
'2':{
name:{
'zh-CN':'困难',
'en-US':'Hard',
},
color:'#ed3f14'
}
}
```
:::warning
注意:每个OI题目的得分计算公式为:(总得分×0.1+难度×2)×(通过测试点数÷总测试点数),所以上面代码中的数字会影响OI题目得分,请尽量合理使用正整数!!!
:::
================================================
FILE: docs/src/use/discussion-admin.md
================================================
# 评论管理
:::tip
- 后台管理员可以查看所有的讨论帖,并且可以选择是否置顶,是否正常显示,删除,查看等
- 后台管理员可以查看对应讨论帖的举报内容
:::
================================================
FILE: docs/src/use/import-problem.md
================================================
# 题目管理
## 一、VOJ题目
#### 1. 导出题目
点击选择需要的题目,便可以批量导出成一个zip压缩包,分别对应一个json格式的题目数据,一个对应名字的文件夹存放评测数据文件,具体的文件结构如下:
```
+-- problem_1000.json
+-- problem_1000
| +-- 1.in
| +-- 1.out
| +-- ....
+-- problem_1001.json
+-- problem_1001
| +-- 1.in
| +-- 1.out
| +-- ....
```
#### 2. 导入题目
选择需要导入的题目数据zip压缩包,注意**不要多一层文件夹进行压缩**,**请保证题目json文件的名字与其对应的存放评测数据的文件夹名字一致**,具体文件格式如下:
```
+-- problem_1000.json
+-- problem_1000
| +-- 1.in
| +-- 1.out
| +-- ....
+-- problem_1001.json
+-- problem_1001
| +-- 1.in
| +-- 1.out
| +-- ....
```
#### 3. 题目的json文件格式
请严格按照以下格式,才可以正常导入。
```json
{
"judgeMode":"default", // 普通判题:default, 特殊判题:spj, 交互判题:interactive
// 题目支持的语言如下,可多可少
"languages": ["C", "C++", "Java", "Python3", "Python2", "Golang", "C#"],
"samples": [
{
"input": "1.in",
"output": "1.out",
//"score": 10 // 如果是oi题目需要给测试点加得分
},
{
"input": "2.in",
"output": "2.out",
//"score": 10 // 如果是oi题目需要给测试点加得分
}
],
"tags": ["测试题","测试"], // 题目标签,一般不超过三个
"problem": {
"auth": 1, // 1 公开赛
"author": "admin", // 题目上传的作者,请使用用户名
"isRemote": false, // 均为非VJ题目,不用修改
"problemId": "VOJ-1010", // 题目的展示id
"description": "", // 题目的描述,支持markdown语法
"source": "", // 题目来源
"title": "", // 题目标题
"type": 0, // 0为ACM题目,1为OI题目
"timeLimit": 1000, // 时间限制 单位是ms
"memoryLimit": 256, // 空间限制 单位是mb
"input": "", // 题目的输入描述
"output": "", // 题目的输出描述
"difficulty": 0, // 题目难度,1为简单,2为中等,3为困难
"examples": "", // 题目的题面样例,格式为<input>输入</input><output>输出</output><input>输入</input><output>输出</output>
"ioScore": 100, // OI题目总得分,与测试点总分一致
"codeShare": true, // 该题目是否允许用户共享其提交的代码
"hint": "", // 题目提示
"isRemoveEndBlank": true, // 评测数据的输出是否自动去掉行末空格
"openCaseResult": true, // 是否允许用户看到各个评测点的结果
// "spjLanguage:"C" // 特殊判题的程序代码语言
// "spjCode":"" // 特殊判题的代码
},
"codeTemplates": [
{
"code": "", // 模板代码
"language": "C" // 模板代码语言
},
{
"code": "", // 模板代码
"language": "C++"// 模板代码语言
}
],
// 用户程序的额外库文件 key:文件名,value:文件内容,如果没有请去掉
"userExtraFile":{
"testlib.h":"code",
"stdio.h":"..."
},
// 特殊或交互程序的额外库文件 key:文件名,value:文件内容,如果没有请去掉
"judgeExtraFile":{
"testlib.h":"code",
"stdio.h":"..."
}
}
```
## 二、导入QDUOJ或FPS格式的题目
1. 请严格按照青岛OJ的后台导出的压缩文件来上传。
2. 请使用标准的FPS格式的题目数据文件(.xml)
## 三、导入其它OJ题目
导入HDU、POJ、MXT、JSK、TKOJ的题目,只需提供该题目的题号便可一键导入。
:::tip
- HDU、POJ、MXT、TKOJ的题号一般是 `1000`以上的数字
- JSK的题号是`A1000`或`T1000`格式,具体请到 [https://nanti.jisuanke.com](https://nanti.jisuanke.com/) 查看
:::
1. 管理员进入后台,点击题目列表
2. 然后添加上方的添加按钮
3. 在弹出窗中选择OJ名称及题号,即可导入
================================================
FILE: docs/src/use/import-user.md
================================================
# 导入用户
**要求如下:**
:::tip
1. 用户数据导入仅支持csv格式的用户数据。
2. 共7列数据:**用户名和密码不能为空**,邮箱、真实姓名、性别、昵称和学校可选填,否则该行数据可能导入失败。
3. 第一行不必写(“用户名”,“密码”,“邮箱”,"真实姓名",“性别”,“昵称”,“学校”)这7个列名
4. 性别为男请使用“male”或“0”,女请使用“female”或“1”,不填默认为“secrecy”。
5. 请导入保存为UTF-8编码的文件,否则中文可能会乱码。
:::
================================================
FILE: docs/src/use/judge-mode.md
================================================
# 判题模式
### 一、普通判题
**普通模式是程序在线评测系统(OJ)通用的判题模式**,主要的实现逻辑步骤如下:
:::tip
1. 选手程序读取题目标准输入文件的数据
2. 判题机执行代码逻辑得到选手输出
3. 再将选手输出与题目标准输出文件的数据进行对比,最终得到判题结果
:::
### 二、特殊判题
#### 1. 什么是特殊判题?
特殊判题(Special Judge)是指OJ将使用一个特定的程序来判断提交的程序的输出是不是正确的,而不是单纯地看提交的程序的输出是否和标准输出一模一样。
#### 2. 使用场景
一般使用Special Judge都是因为题目的答案不唯一,更具体一点说的话一般是两种情况:
:::tip
- 题目最终要求输出一个解决方案,而且这个解决方案可能不唯一。
- 题目最终要求输出一个浮点数,而且会告诉只要答案和标准答案相差不超过某个较小的数就可以,比如0.01。这种情况保留3位小数、4位小数等等都是可以的,而且多保留几位小数也没什么坏处。
:::
#### 3. 支持
VOJ支持testlib.h头文件的直接使用 具体使用文档请看[https://oi-wiki.org/tools/testlib/](https://oi-wiki.org/tools/testlib/)
#### 4. 例题
在创建题目的适合,选择开启特殊判题,编写特殊判题程序,然后编译通过便可。
> 后台对题目使用特殊判题时,请参考以下程序例子 判断精度
- 使用testlib.h来进行特殊判题
```cpp
#include <iostream>
#include "testlib.h"
using namespace std;
int main(int argc, char *args[]){
/**
inf: 输入文件流
ouf: 选手输出流
ans: 标准答案流
**/
registerTestlibCmd(argc, args);
double pans = ouf.readDouble();
double jans = ans.readDouble();
if (fabs(pans - jans)<0.01)
quitf(_ok, "The answer is correct.");
else
quitf(_wa, "The answer is wrong: expected = %f, found = %f", jans, pans);
// quitf(_pe, "The answer is presentation error."); // 格式错误
// quitf(_fail, "The something wrong cause system error."); // 系统错误
}
```
- 读取文件进行特殊判题
```cpp
#include<iostream>
#include<cstdio>
#define PC 99 // 部分正确
#define AC 100 // 全部正确
#define PE 101 // 格式错误
#define WA 102 // 答案错误
#define ERROR 103 // 系统错误
using namespace std;
void close_file(FILE *f){
if(f != NULL){
fclose(f);
}
}
int main(int argc, char *args[]){
/**
args[1]:标准输入文件路径
args[2]:选手输出文件路径
args[3]:标准输出文件路径
**/
FILE *std_input_file = fopen(args[1], "r");
FILE *user_output_file = fopen(args[2], "r");
FILE *std_output_file = fopen(args[3], "r");
double std_out; // 标准输出
fscanf(user_output_file, "%lf", &std_out);
double user_output;// 用户输出
fscanf(std_output_file, "%lf", &user_output);
// 关闭文件流
close_file(std_input_file);
close_file(user_output_file);
close_file(std_output_file);
if (fabs(user_output - std_out)<=1e-6)
return AC;
else
return WA;
}
```
### 三、交互判题
**交互题** 是需要选手程序与测评程序交互来完成任务的题目。一类常见的情形是,选手程序向测评程序发出询问,并得到其反馈。
交互方式主要有如两种:**STDIO 交互**和**Grader 交互**
:::tip
主要的交互逻辑:交互程序的标准输出通过交互通道写到选手程序标准输入,选手程序的标准输出通过交互通道写到交互程序的标准输入,两者需要刷新输出缓存
:::
:::warning
在 C/C++ 中,`fflush(stdout)` 和 `std::cout << std::flush` 可以实现这个操作(使用 `std::cout << std::endl` 换行时也会自动刷新缓冲区,但是 `std::cout << '\n'` 不会)
:::
#### 1. 标准交互题
**A+B问题**
*选手程序*
```cpp
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int a,b;
cin >> a >> b;
cout << a + b;
return 0;
}
```
*交互程序*(这里使用testlib来实现,但也可以自己读取文件实现)
```cpp
#include "testlib.h"
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
setName("Interactor A+B");
registerInteraction(argc, argv);
// 读取题目标准输入文件的数据
int a = inf.readInt();
int b = inf.readInt();
// 往交互通道写数据,记得用endl刷新缓冲区
cout << a << " " << b << endl;
int ans;
// 读取用户程序写入到交互通道的数据
cin >> ans;
if (a + b == ans){ // 判断结果
quitf(_ok, "correct");
}else{
quitf(_wa,"incorrect");
}
}
```
#### 2. 函数交互题
:::info
主要的交互逻辑:
1. 用户调用提供的库文件里面的方法执行答题逻辑,最后得出指定结果;
2. 交互测评程序根据选手调用交互库执行逻辑后得出的结果,来进行最终判断评测的结果。
:::
需要给选手的程序添加交互库,在后台的题目管理可以选择添加。
**交互库**:提供写好的方法给选手调用
```cpp
#include <bits/stdc++.h>
using namespace std;
namespace interactive {
static int n, m, cnt;
static bool hasUsedGetN = false;
static bool hasSubmitted = false;
void RE() {
puts("re");
exit(0);
}
int getn() {
if (hasUsedGetN) RE();
cin >> n;
hasUsedGetN = 1;
m = rand() % n + 1;
return n;
}
int query(int x) {
if (!hasUsedGetN || hasSubmitted) RE();
cnt++;
if (cnt > 100000) RE();
if (x == m)
return (rand() % 10 <= 3);
else
return (rand() % 10 <= 4);
}
void submit(int x) {
if (hasSubmitted) RE();
if (x == m)
puts("ok");
else
puts("wa");
hasSubmitted = 1;
}
}
using interactive::getn;
using interactive::query;
using interactive::submit;
```
**用户程序**:调用库文件的方法进行答题
```cpp
#include <bits/stdc++.h>
#include "interactive.h"
int main()
{
int n = getn();
for(int i = 1; i <= n; i++)
{
for(int j = 0; j < 900; j++)
{
if(query(i)) arr[i]++;
}
}
int min = 1000, ans = 0;
for(int i = 1; i <= n; i++)
{
if(arr[i] < min)
{
min = arr[i];
ans = i;
}
}
submit(ans);
return 0;
}
```
**交互测评程序**:根据选手调用交互库执行逻辑后得出的结果,来进行最终判断评测的结果
```cpp
#include "testlib.h"
#include <string>
int main(int argc, char* argv[]) {
registerTestlibCmd(argc, argv);
// 读取选手最终输出文件的数据来判断结果
std::string s = ouf.readToken();
if (s == "ok")
quitf(_ok, "Correct");
else
quitf(_wa, "Wrong Answer");
}
```
================================================
FILE: docs/src/use/notice-announcement.md
================================================
# 通知和公告发布
:::tip
1. 通知和公告都仅有超级管理员可操作
2. 通知是系统消息通知,每个小时推送一次到用户的站内消息系统
:::
================================================
FILE: docs/src/use/testcase.md
================================================
# 测试用例
**进入后台添加题目,上传题目测试用例数据可以选择手动输入、Zip文件上传两种方式**
## 一、手动输入
每次点击`Add Sampple`就可以手动填入该用例的输入与输出,该方式比较适合题目数据简单的,同时手动输入的题目数据将记录进数据库,下次对该题目进行修改可以直接获取,然后进行测试数据的修改,同时也会在服务器对应的testcase文件夹生成对应的文件。
## 二、文件上传
对于普通题目,测试用例文件包括`in`、`out`、`ans`、`txt`四种拓展名
例如有两组测试用例,则对于普通题目测试用例的文件名分别为`*.in, *.out(*.ans)`,或者`*input*.txt, *output*.txt ` ,其他形式的文件后台均不识别。
压缩时,请将文件都放在压缩包的根目录,而不是包含在某一个文件夹中,比如正确的格式是:
```bash
├── 1.in
├── 1.out
├── 2.in
├── 2.out
```
```bash
├── 1.in
├── 1.ans
├── 2.in
├── 2.ans
```
或者
```bash
├── input1.txt
├── output1.txt
├── input2.txt
├── output2.txt
```
然后压缩测试用例到一个zip中
:::danger
**注意:不要在这些文件外面套多一层文件夹,请直接压缩!!!**
:::
:::info
建议:尽量合并测试用例到一个文件中,减少测试用例组数,这会一定程度上提高判题性能。
:::
================================================
FILE: docs/src/use/training.md
================================================
# 训练介绍
:::tip
训练分为**公开训练**与**私有训练**,同时可自定义训练分类
两种训练其实都是题单功能,区别在于私有训练拥有记录榜单
:::
:::warning
在训练题单里面的题目提交情况与公开题库的对应题目的数据一致,所以只能显示公开权限的题目,其功能主要是汇总对应的题型。
:::
### 1. 公开训练
- 管理员可在后台添加公开权限的题目,同时能对题目进行排序。
- 题目的所有用户提交情况以及用户自身对该题目的提交情况与题目列表的题目数据同步。
### 2. 私有训练
- 管理员可在后台添加公开权限的题目,同时能对题目进行排序。
- 题目的所有用户提交情况以及用户自身对该题目的提交情况与题目列表的题目数据同步。
与**公开训练**的区别:
- 非训练创建者和超级管理员访问私有训练需要对应的密码。
- **超级管理员与训练创建者的题目提交情况不会计入记录榜单**
- 系统会同步普通用户对应训练题目的提交情况,生成对应的记录榜单。
- 用户在进入私有训练后,只有在训练里面的题目提交,记录榜单才会继续更新记录。
**系统同步用户对应题目数据的情况如下:**
:::info
- 用户第一次输入密码成功后,系统会同步其对应题目的提交情况到榜单。
- 后台管理员增加新的题目,系统会同步训练已成功访问的所有用户对应新题目的提交情况。
- 后台管理员移除题目,系统会删除对应题目的榜单记录。
:::
================================================
FILE: pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.simplefanc</groupId>
<artifactId>voj</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
<modules>
<module>voj-common</module>
<module>voj-backend</module>
<module>voj-judger</module>
</modules>
<name>voj</name>
<!--版本控制-->
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.bulid.sourceEncoding>UTF-8</project.bulid.sourceEncoding>
<skipTests>true</skipTests>
<shiro.redis.boot.version>3.3.1</shiro.redis.boot.version>
<mysql.version>8.0.19</mysql.version>
<druid.version>1.1.20</druid.version>
<mybatis.spring.boot.version>3.2.0</mybatis.spring.boot.version>
<!-- <spring.boot.version>2.2.6.RELEASE</spring.boot.version>-->
<!-- <spring.cloud.version>Hoxton.SR1</spring.cloud.version>-->
<!-- <spring.cloud.alibaba.version>2.2.1.RELEASE</spring.cloud.alibaba.version>-->
<spring.boot.version>2.6.3</spring.boot.version>
<spring.cloud.version>2021.0.1</spring.cloud.version>
<spring.cloud.alibaba.version>2021.0.1.0</spring.cloud.alibaba.version>
<voj.common.version>1.0</voj.common.version>
<easyexcel.version>3.3.2</easyexcel.version>
<hutool.version>5.7.22</hutool.version>
<jwt.version>3.19.1</jwt.version>
<captcha.version>1.6.2</captcha.version>
<oshi.version>5.6.1</oshi.version>
<emoji.version>4.0.0</emoji.version>
<swagger.version>2.9.2</swagger.version>
<spring.checkstyle.plugin>0.0.29</spring.checkstyle.plugin>
<jsoup.version>1.14.3</jsoup.version>
<caffeine.version>3.1.1</caffeine.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.simplefanc</groupId>
<artifactId>voj-common</artifactId>
<version>${voj.common.version}</version>
</dependency>
<!--Springcloud的依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud 阿里巴巴-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--Springboot依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--excel-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>${easyexcel.version}</version>
</dependency>
<!--数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis.spring.boot.version}</version>
</dependency>
<!--shiro-->
<dependency>
<groupId>org.crazycake</groupId>
<artifactId>shiro-redis-spring-boot-starter</artifactId>
<version>${shiro.redis.boot.version}</version>
</dependency>
<!-- hutool工具类-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<!-- jwt -->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>${jwt.version}</version>
</dependency>
<!--生成验证码-->
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>${captcha.version}</version>
</dependency>
<dependency>
<groupId>com.github.oshi</groupId>
<artifactId>oshi-core</artifactId>
<version>${oshi.version}</version>
</dependency>
<dependency>
<groupId>com.vdurmont</groupId>
<artifactId>emoji-java</artifactId>
<version>${emoji.version}</version>
</dependency>
<!--导入swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>${jsoup.version}</version>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>${caffeine.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<!-- https://www.cnblogs.com/zuojl/p/14977544.html -->
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version>
<executions>
<execution>
<goals>
<!--可以把依赖的包都打包到生成的Jar包中-->
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<!--代码格式插件,默认使用spring 规则-->
<plugin>
<groupId>io.spring.javaformat</groupId>
<artifactId>spring-javaformat-maven-plugin</artifactId>
<version>${spring.checkstyle.plugin}</version>
</plugin>
</plugins>
</build>
<profiles>
<!-- 开发 -->
<!-- mvn clean package -P dev -->
<profile>
<!-- profile的id -->
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
</properties>
</profile>
<!-- 生产 -->
<profile>
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
</properties>
<activation>
<!-- 默认环境 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
</project>
================================================
FILE: voj-backend/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>voj</artifactId>
<groupId>com.simplefanc</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>voj-backend</artifactId>
<version>1.0</version>
<name>voj-backend</name>
<dependencies>
<dependency>
<groupId>com.simplefanc</groupId>
<artifactId>voj-common</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
</dependency>
<dependency>
<groupId>org.crazycake</groupId>
<artifactId>shiro-redis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>com.github.oshi</groupId>
<artifactId>oshi-core</artifactId>
</dependency>
<dependency>
<groupId>com.vdurmont</groupId>
<artifactId>emoji-java</artifactId>
</dependency>
<!--redis整合-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--JWT-->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--生成验证码-->
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!--单元测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: voj-backend/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java
================================================
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.alibaba.druid.pool;
import com.alibaba.druid.DruidRuntimeException;
import com.alibaba.druid.filter.Filter;
import com.alibaba.druid.filter.FilterChainImpl;
import com.alibaba.druid.filter.FilterManager;
import com.alibaba.druid.pool.vendor.NullExceptionSorter;
import com.alibaba.druid.proxy.jdbc.DataSourceProxy;
import com.alibaba.druid.proxy.jdbc.TransactionInfo;
import com.alibaba.druid.stat.JdbcDataSourceStat;
import com.alibaba.druid.stat.JdbcSqlStat;
import com.alibaba.druid.stat.JdbcStatManager;
import com.alibaba.druid.support.logging.Log;
import com.alibaba.druid.support.logging.LogFactory;
import com.alibaba.druid.util.*;
import javax.management.JMException;
import javax.management.ObjectName;
import javax.management.openmbean.CompositeDataSupport;
import javax.security.auth.callback.NameCallback;
import javax.security.auth.callback.PasswordCallback;
import javax.sql.DataSource;
import java.io.PrintWriter;
import java.io.Serializable;
import java.sql.*;
import java.util.Date;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
import java.util.concurrent.atomic.AtomicLongFieldUpdater;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Logger;
public abstract class DruidAbstractDataSource extends WrapperAdapter
implements DruidAbstractDataSourceMBean, DataSource, DataSourceProxy, Serializable {
public static final int DEFAULT_INITIAL_SIZE = 0;
public static final int DEFAULT_MAX_ACTIVE_SIZE = 8;
public static final int DEFAULT_MAX_IDLE = 8;
public static final int DEFAULT_MIN_IDLE = 0;
public static final int DEFAULT_MAX_WAIT = -1;
public static final String DEFAULT_VALIDATION_QUERY = null;
public static final boolean DEFAULT_TEST_ON_BORROW = false;
public static final boolean DEFAULT_TEST_ON_RETURN = false;
public static final boolean DEFAULT_WHILE_IDLE = true;
public static final long DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS = 60000L;
public static final long DEFAULT_TIME_BETWEEN_CONNECT_ERROR_MILLIS = 500L;
public static final int DEFAULT_NUM_TESTS_PER_EVICTION_RUN = 3;
public static final long DEFAULT_MIN_EVICTABLE_IDLE_TIME_MILLIS = 1800000L;
public static final long DEFAULT_MAX_EVICTABLE_IDLE_TIME_MILLIS = 25200000L;
public static final long DEFAULT_PHY_TIMEOUT_MILLIS = -1L;
protected static final Object PRESENT = new Object();
static final AtomicLongFieldUpdater<DruidAbstractDataSource> errorCountUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "errorCount");
static final AtomicLongFieldUpdater<DruidAbstractDataSource> dupCloseCountUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "dupCloseCount");
static final AtomicLongFieldUpdater<DruidAbstractDataSource> startTransactionCountUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "startTransactionCount");
static final AtomicLongFieldUpdater<DruidAbstractDataSource> commitCountUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "commitCount");
static final AtomicLongFieldUpdater<DruidAbstractDataSource> rollbackCountUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "rollbackCount");
static final AtomicLongFieldUpdater<DruidAbstractDataSource> cachedPreparedStatementHitCountUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "cachedPreparedStatementHitCount");
static final AtomicLongFieldUpdater<DruidAbstractDataSource> preparedStatementCountUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "preparedStatementCount");
static final AtomicLongFieldUpdater<DruidAbstractDataSource> closedPreparedStatementCountUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "closedPreparedStatementCount");
static final AtomicLongFieldUpdater<DruidAbstractDataSource> cachedPreparedStatementCountUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "cachedPreparedStatementCount");
static final AtomicLongFieldUpdater<DruidAbstractDataSource> cachedPreparedStatementDeleteCountUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "cachedPreparedStatementDeleteCount");
static final AtomicLongFieldUpdater<DruidAbstractDataSource> cachedPreparedStatementMissCountUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "cachedPreparedStatementMissCount");
static final AtomicLongFieldUpdater<DruidAbstractDataSource> executeQueryCountUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "executeQueryCount");
static final AtomicLongFieldUpdater<DruidAbstractDataSource> executeUpdateCountUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "executeUpdateCount");
static final AtomicLongFieldUpdater<DruidAbstractDataSource> executeBatchCountUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "executeBatchCount");
static final AtomicLongFieldUpdater<DruidAbstractDataSource> executeCountUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "executeCount");
static final AtomicIntegerFieldUpdater<DruidAbstractDataSource> createErrorCountUpdater = AtomicIntegerFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "createErrorCount");
static final AtomicIntegerFieldUpdater<DruidAbstractDataSource> creatingCountUpdater = AtomicIntegerFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "creatingCount");
static final AtomicIntegerFieldUpdater<DruidAbstractDataSource> directCreateCountUpdater = AtomicIntegerFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "directCreateCount");
static final AtomicLongFieldUpdater<DruidAbstractDataSource> createCountUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "createCount");
static final AtomicLongFieldUpdater<DruidAbstractDataSource> destroyCountUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "destroyCount");
static final AtomicLongFieldUpdater<DruidAbstractDataSource> createStartNanosUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "createStartNanos");
static final AtomicLongFieldUpdater<DruidAbstractDataSource> failContinuousTimeMillisUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "failContinuousTimeMillis");
static final AtomicIntegerFieldUpdater<DruidAbstractDataSource> failContinuousUpdater = AtomicIntegerFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "failContinuous");
static final AtomicLongFieldUpdater<DruidAbstractDataSource> connectionIdSeedUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "connectionIdSeed");
static final AtomicLongFieldUpdater<DruidAbstractDataSource> statementIdSeedUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "statementIdSeed");
static final AtomicLongFieldUpdater<DruidAbstractDataSource> resultSetIdSeedUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "resultSetIdSeed");
static final AtomicLongFieldUpdater<DruidAbstractDataSource> transactionIdSeedUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "transactionIdSeed");
static final AtomicLongFieldUpdater<DruidAbstractDataSource> metaDataIdSeedUpdater = AtomicLongFieldUpdater
.newUpdater(DruidAbstractDataSource.class, "metaDataIdSeed");
private static final long serialVersionUID = 1L;
private static final Log LOG = LogFactory.getLog(DruidAbstractDataSource.class);
protected final Map<DruidPooledConnection, Object> activeConnections;
protected final Date createdTime;
protected final Histogram transactionHistogram;
protected volatile boolean defaultAutoCommit = true;
protected volatile Boolean defaultReadOnly;
protected volatile Integer defaultTransactionIsolation;
protected volatile String defaultCatalog = null;
protected String name;
protected volatile String username;
protected volatile String password;
protected volatile String jdbcUrl;
protected volatile String driverClass;
protected volatile ClassLoader driverClassLoader;
protected volatile Properties connectProperties = new Properties();
protected volatile PasswordCallback passwordCallback;
protected volatile NameCallback userCallback;
protected volatile int initialSize = 0;
protected volatile int maxActive = 8;
protected volatile int minIdle = 0;
protected volatile int maxIdle = 8;
protected volatile long maxWait = -1L;
protected int notFullTimeoutRetryCount = 0;
protected volatile String validationQuery;
protected volatile int validationQueryTimeout;
protected volatile boolean testOnBorrow;
protected volatile boolean testOnReturn;
protected volatile boolean testWhileIdle;
protected volatile boolean poolPreparedStatements;
protected volatile boolean sharePreparedStatements;
protected volatile int maxPoolPreparedStatementPerConnectionSize;
protected volatile boolean inited;
protected volatile boolean initExceptionThrow;
protected PrintWriter logWriter;
protected List<Filter> filters;
protected volatile ExceptionSorter exceptionSorter;
protected Driver driver;
protected volatile int queryTimeout;
protected volatile int transactionQueryTimeout;
protected long createTimespan;
protected volatile int maxWaitThreadCount;
protected volatile boolean accessToUnderlyingConnectionAllowed;
protected volatile long timeBetweenEvictionRunsMillis;
protected volatile int numTestsPerEvictionRun;
protected volatile long minEvictableIdleTimeMillis;
protected volatile long maxEvictableIdleTimeMillis;
protected volatile long keepAliveBetweenTimeMillis;
protected volatile long phyTimeoutMillis;
protected volatile long phyMaxUseCount;
protected volatile boolean removeAbandoned;
protected volatile long removeAbandonedTimeoutMillis;
protected volatile boolean logAbandoned;
protected volatile int maxOpenPreparedStatements;
protected volatile List<String> connectionInitSqls;
protected volatile String dbType;
protected volatile long timeBetweenConnectErrorMillis;
protected volatile ValidConnectionChecker validConnectionChecker;
protected long id;
protected int connectionErrorRetryAttempts;
protected boolean breakAfterAcquireFailure;
protected long transactionThresholdMillis;
protected Date initedTime;
protected volatile long errorCount;
protected volatile long dupCloseCount;
protected volatile long startTransactionCount;
protected volatile long commitCount;
protected volatile long rollbackCount;
protected volatile long cachedPreparedStatementHitCount;
protected volatile long preparedStatementCount;
protected volatile long closedPreparedStatementCount;
protected volatile long cachedPreparedStatementCount;
protected volatile long cachedPreparedStatementDeleteCount;
protected volatile long cachedPreparedStatementMissCount;
protected volatile long executeCount;
protected volatile long executeQueryCount;
protected volatile long executeUpdateCount;
protected volatile long executeBatchCount;
protected volatile Throwable createError;
protected volatile Throwable lastError;
protected volatile long lastErrorTimeMillis;
protected volatile Throwable lastCreateError;
protected volatile long lastCreateErrorTimeMillis;
protected volatile long lastCreateStartTimeMillis;
protected boolean isOracle;
protected boolean isMySql;
protected boolean useOracleImplicitCache;
protected ReentrantLock lock;
protected Condition notEmpty;
protected Condition empty;
protected ReentrantLock activeConnectionLock;
protected volatile int createErrorCount;
protected volatile int creatingCount;
protected volatile int directCreateCount;
protected volatile long createCount;
protected volatile long destroyCount;
protected volatile long createStartNanos;
protected long timeBetweenLogStatsMillis;
protected DruidDataSourceStatLogger statLogger;
protected int maxCreateTaskCount;
protected boolean failFast;
protected volatile int failContinuous;
protected volatile long failContinuousTimeMillis;
protected ScheduledExecutorService destroyScheduler;
protected ScheduledExecutorService createScheduler;
protected boolean initVariants;
protected boolean initGlobalVariants;
protected volatile boolean onFatalError;
protected volatile int onFatalErrorMaxActive;
protected volatile int fatalErrorCount;
protected volatile int fatalErrorCountLastShrink;
protected volatile long lastFatalErrorTimeMillis;
protected volatile String lastFatalErrorSql;
protected volatile Throwable lastFatalError;
protected volatile long connectionIdSeed;
protected volatile long statementIdSeed;
protected volatile long resultSetIdSeed;
protected volatile long transactionIdSeed;
protected volatile long metaDataIdSeed;
private boolean clearFiltersEnable;
private boolean dupCloseLogEnable;
private ObjectName objectName;
private Boolean useUnfairLock;
private boolean useLocalSessionState;
private boolean asyncCloseConnectionEnable;
public DruidAbstractDataSource(boolean lockFair) {
this.validationQuery = DEFAULT_VALIDATION_QUERY;
this.validationQueryTimeout = -1;
this.testOnBorrow = false;
this.testOnReturn = false;
this.testWhileIdle = true;
this.poolPreparedStatements = false;
this.sharePreparedStatements = false;
this.maxPoolPreparedStatementPerConnectionSize = 10;
this.inited = false;
this.initExceptionThrow = true;
this.logWriter = new PrintWriter(System.out);
this.filters = new CopyOnWriteArrayList();
this.clearFiltersEnable = true;
this.exceptionSorter = null;
this.maxWaitThreadCount = -1;
this.accessToUnderlyingConnectionAllowed = true;
this.timeBetweenEvictionRunsMillis = 60000L;
this.numTestsPerEvictionRun = 3;
this.minEvictableIdleTimeMillis = 1800000L;
this.maxEvictableIdleTimeMillis = 25200000L;
this.keepAliveBetweenTimeMillis = 120000L;
this.phyTimeoutMillis = -1L;
this.phyMaxUseCount = -1L;
this.removeAbandonedTimeoutMillis = 300000L;
this.maxOpenPreparedStatements = -1;
this.timeBetweenConnectErrorMillis = 500L;
this.validConnectionChecker = null;
this.activeConnections = new IdentityHashMap();
this.connectionErrorRetryAttempts = 1;
this.breakAfterAcquireFailure = false;
this.transactionThresholdMillis = 0L;
this.createdTime = new Date();
this.errorCount = 0L;
this.dupCloseCount = 0L;
this.startTransactionCount = 0L;
this.commitCount = 0L;
this.rollbackCount = 0L;
this.cachedPreparedStatementHitCount = 0L;
this.preparedStatementCount = 0L;
this.closedPreparedStatementCount = 0L;
this.cachedPreparedStatementCount = 0L;
this.cachedPreparedStatementDeleteCount = 0L;
this.cachedPreparedStatementMissCount = 0L;
this.transactionHistogram = new Histogram(new long[]{1L, 10L, 100L, 1000L, 10000L, 100000L});
this.dupCloseLogEnable = false;
this.executeCount = 0L;
this.executeQueryCount = 0L;
this.executeUpdateCount = 0L;
this.executeBatchCount = 0L;
this.isOracle = false;
this.isMySql = false;
this.useOracleImplicitCache = true;
this.activeConnectionLock = new ReentrantLock();
this.createErrorCount = 0;
this.creatingCount = 0;
this.directCreateCount = 0;
this.createCount = 0L;
this.destroyCount = 0L;
this.createStartNanos = 0L;
this.useUnfairLock = null;
this.useLocalSessionState = true;
this.statLogger = new DruidDataSourceStatLoggerImpl();
this.asyncCloseConnectionEnable = false;
this.maxCreateTaskCount = 3;
this.failFast = false;
this.failContinuous = 0;
this.failContinuousTimeMillis = 0L;
this.initVariants = false;
this.initGlobalVariants = false;
this.onFatalError = false;
this.onFatalErrorMaxActive = 0;
this.fatalErrorCount = 0;
this.fatalErrorCountLastShrink = 0;
this.lastFatalErrorTimeMillis = 0L;
this.lastFatalErrorSql = null;
this.lastFatalError = null;
this.connectionIdSeed = 10000L;
this.statementIdSeed = 20000L;
this.resultSetIdSeed = 50000L;
this.transactionIdSeed = 60000L;
this.metaDataIdSeed = 80000L;
this.lock = new ReentrantLock(lockFair);
this.notEmpty = this.lock.newCondition();
this.empty = this.lock.newCondition();
}
public boolean isUseLocalSessionState() {
return this.useLocalSessionState;
}
public void setUseLocalSessionState(boolean useLocalSessionState) {
this.useLocalSessionState = useLocalSessionState;
}
public DruidDataSourceStatLogger getStatLogger() {
return this.statLogger;
}
public void setStatLogger(DruidDataSourceStatLogger statLogger) {
this.statLogger = statLogger;
}
public void setStatLoggerClassName(String className) {
try {
Class<?> clazz = Class.forName(className);
DruidDataSourceStatLogger statLogger = (DruidDataSourceStatLogger) clazz.newInstance();
this.setStatLogger(statLogger);
} catch (Exception var4) {
throw new IllegalArgumentException(className, var4);
}
}
public long getTimeBetweenLogStatsMillis() {
return this.timeBetweenLogStatsMillis;
}
public void setTimeBetweenLogStatsMillis(long timeBetweenLogStatsMillis) {
this.timeBetweenLogStatsMillis = timeBetweenLogStatsMillis;
}
public boolean isOracle() {
return this.isOracle;
}
public void setOracle(boolean isOracle) {
if (this.inited) {
throw new IllegalStateException();
} else {
this.isOracle = isOracle;
}
}
public boolean isUseUnfairLock() {
return this.lock.isFair();
}
public void setUseUnfairLock(boolean useUnfairLock) {
if (this.lock.isFair() != !useUnfairLock) {
if (!this.inited) {
ReentrantLock lock = this.lock;
lock.lock();
try {
if (!this.inited) {
this.lock = new ReentrantLock(!useUnfairLock);
this.notEmpty = this.lock.newCondition();
this.empty = this.lock.newCondition();
this.useUnfairLock = useUnfairLock;
}
} finally {
lock.unlock();
}
}
}
}
public boolean isUseOracleImplicitCache() {
return this.useOracleImplicitCache;
}
public void setUseOracleImplicitCache(boolean useOracleImplicitCache) {
if (this.useOracleImplicitCache != useOracleImplicitCache) {
this.useOracleImplicitCache = useOracleImplicitCache;
boolean isOracleDriver10 = this.isOracle() && this.driver != null && this.driver.getMajorVersion() == 10;
if (isOracleDriver10 && useOracleImplicitCache) {
this.getConnectProperties().setProperty("oracle.jdbc.FreeMemoryOnEnterImplicitCache", "true");
} else {
this.getConnectProperties().remove("oracle.jdbc.FreeMemoryOnEnterImplicitCache");
}
}
}
public Throwable getLastCreateError() {
return this.lastCreateError;
}
public Throwable getLastError() {
return this.lastError;
}
public long getLastErrorTimeMillis() {
return this.lastErrorTimeMillis;
}
public Date getLastErrorTime() {
return this.lastErrorTimeMillis <= 0L ? null : new Date(this.lastErrorTimeMillis);
}
public long getLastCreateErrorTimeMillis() {
return this.lastCreateErrorTimeMillis;
}
public Date getLastCreateErrorTime() {
return this.lastCreateErrorTimeMillis <= 0L ? null : new Date(this.lastCreateErrorTimeMillis);
}
public int getTransactionQueryTimeout() {
return this.transactionQueryTimeout <= 0 ? this.queryTimeout : this.transactionQueryTimeout;
}
public void setTransactionQueryTimeout(int transactionQueryTimeout) {
this.transactionQueryTimeout = transactionQueryTimeout;
}
public long getExecuteCount() {
return this.executeCount + this.executeQueryCount + this.executeUpdateCount + this.executeBatchCount;
}
public long getExecuteUpdateCount() {
return this.executeUpdateCount;
}
public long getExecuteQueryCount() {
return this.executeQueryCount;
}
public long getExecuteBatchCount() {
return this.executeBatchCount;
}
public long getAndResetExecuteCount() {
return executeCountUpdater.getAndSet(this, 0L) + executeQueryCountUpdater.getAndSet(this, 0L)
+ executeUpdateCountUpdater.getAndSet(this, 0L) + executeBatchCountUpdater.getAndSet(this, 0L);
}
public long getExecuteCount2() {
return this.executeCount;
}
public void incrementExecuteCount() {
executeCountUpdater.incrementAndGet(this);
}
public void incrementExecuteUpdateCount() {
++this.executeUpdateCount;
}
public void incrementExecuteQueryCount() {
++this.executeQueryCount;
}
public void incrementExecuteBatchCount() {
++this.executeBatchCount;
}
public boolean isDupCloseLogEnable() {
return this.dupCloseLogEnable;
}
public void setDupCloseLogEnable(boolean dupCloseLogEnable) {
this.dupCloseLogEnable = dupCloseLogEnable;
}
public ObjectName getObjectName() {
return this.objectName;
}
public void setObjectName(ObjectName objectName) {
this.objectName = objectName;
}
public Histogram getTransactionHistogram() {
return this.transactionHistogram;
}
public void incrementCachedPreparedStatementCount() {
cachedPreparedStatementCountUpdater.incrementAndGet(this);
}
public void decrementCachedPreparedStatementCount() {
cachedPreparedStatementCountUpdater.decrementAndGet(this);
}
public void incrementCachedPreparedStatementDeleteCount() {
cachedPreparedStatementDeleteCountUpdater.incrementAndGet(this);
}
public void incrementCachedPreparedStatementMissCount() {
cachedPreparedStatementMissCountUpdater.incrementAndGet(this);
}
public long getCachedPreparedStatementMissCount() {
return this.cachedPreparedStatementMissCount;
}
public long getCachedPreparedStatementAccessCount() {
return this.cachedPreparedStatementMissCount + this.cachedPreparedStatementHitCount;
}
public long getCachedPreparedStatementDeleteCount() {
return this.cachedPreparedStatementDeleteCount;
}
public long getCachedPreparedStatementCount() {
return this.cachedPreparedStatementCount;
}
public void incrementClosedPreparedStatementCount() {
closedPreparedStatementCountUpdater.incrementAndGet(this);
}
public long getClosedPreparedStatementCount() {
return this.closedPreparedStatementCount;
}
public void incrementPreparedStatementCount() {
preparedStatementCountUpdater.incrementAndGet(this);
}
public long getPreparedStatementCount() {
return this.preparedStatementCount;
}
public void incrementCachedPreparedStatementHitCount() {
cachedPreparedStatementHitCountUpdater.incrementAndGet(this);
}
public long getCachedPreparedStatementHitCount() {
return this.cachedPreparedStatementHitCount;
}
public long getTransactionThresholdMillis() {
return this.transactionThresholdMillis;
}
public void setTransactionThresholdMillis(long transactionThresholdMillis) {
this.transactionThresholdMillis = transactionThresholdMillis;
}
public abstract void logTransaction(TransactionInfo var1);
public long[] getTransactionHistogramValues() {
return this.transactionHistogram.toArray();
}
public long[] getTransactionHistogramRanges() {
return this.transactionHistogram.getRanges();
}
public long getCommitCount() {
return this.commitCount;
}
public void incrementCommitCount() {
commitCountUpdater.incrementAndGet(this);
}
public long getRollbackCount() {
return this.rollbackCount;
}
public void incrementRollbackCount() {
rollbackCountUpdater.incrementAndGet(this);
}
public long getStartTransactionCount() {
return this.startTransactionCount;
}
public void incrementStartTransactionCount() {
startTransactionCountUpdater.incrementAndGet(this);
}
public boolean isBreakAfterAcquireFailure() {
return this.breakAfterAcquireFailure;
}
public void setBreakAfterAcquireFailure(boolean breakAfterAcquireFailure) {
this.breakAfterAcquireFailure = breakAfterAcquireFailure;
}
public int getConnectionErrorRetryAttempts() {
return this.connectionErrorRetryAttempts;
}
public void setConnectionErrorRetryAttempts(int connectionErrorRetryAttempts) {
this.connectionErrorRetryAttempts = connectionErrorRetryAttempts;
}
public long getDupCloseCount() {
return this.dupCloseCount;
}
public int getMaxPoolPreparedStatementPerConnectionSize() {
return this.maxPoolPreparedStatementPerConnectionSize;
}
public void setMaxPoolPreparedStatementPerConnectionSize(int maxPoolPreparedStatementPerConnectionSize) {
if (maxPoolPreparedStatementPerConnectionSize > 0) {
this.poolPreparedStatements = true;
} else {
this.poolPreparedStatements = false;
}
this.maxPoolPreparedStatementPerConnectionSize = maxPoolPreparedStatementPerConnectionSize;
}
public boolean isSharePreparedStatements() {
return this.sharePreparedStatements;
}
public void setSharePreparedStatements(boolean sharePreparedStatements) {
this.sharePreparedStatements = sharePreparedStatements;
}
public void incrementDupCloseCount() {
dupCloseCountUpdater.incrementAndGet(this);
}
public ValidConnectionChecker getValidConnectionChecker() {
return this.validConnectionChecker;
}
public void setValidConnectionChecker(ValidConnectionChecker validConnectionChecker) {
this.validConnectionChecker = validConnectionChecker;
}
public String getValidConnectionCheckerClassName() {
return this.validConnectionChecker == null ? null : this.validConnectionChecker.getClass().getName();
}
public void setValidConnectionCheckerClassName(String validConnectionCheckerClass) throws Exception {
Class<?> clazz = Utils.loadClass(validConnectionCheckerClass);
ValidConnectionChecker validConnectionChecker = null;
if (clazz != null) {
validConnectionChecker = (ValidConnectionChecker) clazz.newInstance();
this.validConnectionChecker = validConnectionChecker;
} else {
LOG.error("load validConnectionCheckerClass error : " + validConnectionCheckerClass);
}
}
public String getDbType() {
return this.dbType;
}
public void setDbType(String dbType) {
this.dbType = dbType;
}
public void addConnectionProperty(String name, String value) {
if (!StringUtils.equals(this.connectProperties.getProperty(name), value)) {
if (this.inited) {
throw new UnsupportedOperationException();
} else {
this.connectProperties.put(name, value);
}
}
}
public Collection<String> getConnectionInitSqls() {
Collection<String> result = this.connectionInitSqls;
return result == null ? Collections.emptyList() : result;
}
public void setConnectionInitSqls(Collection<? extends Object> connectionInitSqls) {
if (connectionInitSqls != null && connectionInitSqls.size() > 0) {
ArrayList<String> newVal = null;
Iterator var3 = connectionInitSqls.iterator();
while (var3.hasNext()) {
Object o = var3.next();
if (o != null) {
String s = o.toString();
s = s.trim();
if (s.length() != 0) {
if (newVal == null) {
newVal = new ArrayList();
}
newVal.add(s);
}
}
}
this.connectionInitSqls = newVal;
} else {
this.connectionInitSqls = null;
}
}
public long getTimeBetweenConnectErrorMillis() {
return this.timeBetweenConnectErrorMillis;
}
public void setTimeBetweenConnectErrorMillis(long timeBetweenConnectErrorMillis) {
this.timeBetweenConnectErrorMillis = timeBetweenConnectErrorMillis;
}
public int getMaxOpenPreparedStatements() {
return this.maxPoolPreparedStatementPerConnectionSize;
}
public void setMaxOpenPreparedStatements(int maxOpenPreparedStatements) {
this.setMaxPoolPreparedStatementPerConnectionSize(maxOpenPreparedStatements);
}
public boolean isLogAbandoned() {
return this.logAbandoned;
}
public void setLogAbandoned(boolean logAbandoned) {
this.logAbandoned = logAbandoned;
}
public int getRemoveAbandonedTimeout() {
return (int) (this.removeAbandonedTimeoutMillis / 1000L);
}
public void setRemoveAbandonedTimeout(int removeAbandonedTimeout) {
this.removeAbandonedTimeoutMillis = (long) removeAbandonedTimeout * 1000L;
}
public long getRemoveAbandonedTimeoutMillis() {
return this.removeAbandonedTimeoutMillis;
}
public void setRemoveAbandonedTimeoutMillis(long removeAbandonedTimeoutMillis) {
this.removeAbandonedTimeoutMillis = removeAbandonedTimeoutMillis;
}
public boolean isRemoveAbandoned() {
return this.removeAbandoned;
}
public void setRemoveAbandoned(boolean removeAbandoned) {
this.removeAbandoned = removeAbandoned;
}
public long getMinEvictableIdleTimeMillis() {
return this.minEvictableIdleTimeMillis;
}
public void setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis) {
if (minEvictableIdleTimeMillis < 30000L) {
LOG.error("minEvictableIdleTimeMillis should be greater than 30000");
}
this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
}
public long getKeepAliveBetweenTimeMillis() {
return this.keepAliveBetweenTimeMillis;
}
public void setKeepAliveBetweenTimeMillis(long keepAliveBetweenTimeMillis) {
if (keepAliveBetweenTimeMillis < 30000L) {
LOG.error("keepAliveBetweenTimeMillis should be greater than 30000");
}
this.keepAliveBetweenTimeMillis = keepAliveBetweenTimeMillis;
}
public long getMaxEvictableIdleTimeMillis() {
return this.maxEvictableIdleTimeMillis;
}
public void setMaxEvictableIdleTimeMillis(long maxEvictableIdleTimeMillis) {
if (maxEvictableIdleTimeMillis < 30000L) {
LOG.error("maxEvictableIdleTimeMillis should be greater than 30000");
}
if (maxEvictableIdleTimeMillis < this.minEvictableIdleTimeMillis) {
throw new IllegalArgumentException(
"maxEvictableIdleTimeMillis must be grater than minEvictableIdleTimeMillis");
} else {
this.maxEvictableIdleTimeMillis = maxEvictableIdleTimeMillis;
}
}
public long getPhyTimeoutMillis() {
return this.phyTimeoutMillis;
}
public void setPhyTimeoutMillis(long phyTimeoutMillis) {
this.phyTimeoutMillis = phyTimeoutMillis;
}
public long getPhyMaxUseCount() {
return this.phyMaxUseCount;
}
public void setPhyMaxUseCount(long phyMaxUseCount) {
this.phyMaxUseCount = phyMaxUseCount;
}
public int getNumTestsPerEvictionRun() {
return this.numTestsPerEvictionRun;
}
/**
* @deprecated
*/
@Deprecated
public void setNumTestsPerEvictionRun(int numTestsPerEvictionRun) {
this.numTestsPerEvictionRun = numTestsPerEvictionRun;
}
public long getTimeBetweenEvictionRunsMillis() {
return this.timeBetweenEvictionRunsMillis;
}
public void setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis) {
this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
}
public int getMaxWaitThreadCount() {
return this.maxWaitThreadCount;
}
public void setMaxWaitThreadCount(int maxWaithThreadCount) {
this.maxWaitThreadCount = maxWaithThreadCount;
}
public String getValidationQuery() {
return this.validationQuery;
}
public void setValidationQuery(String validationQuery) {
this.validationQuery = validationQuery;
}
public int getValidationQueryTimeout() {
return this.validationQueryTimeout;
}
public void setValidationQueryTimeout(int validationQueryTimeout) {
if (validationQueryTimeout < 0 && "sqlserver".equals(this.dbType)) {
LOG.error("validationQueryTimeout should be >= 0");
}
this.validationQueryTimeout = validationQueryTimeout;
}
public boolean isAccessToUnderlyingConnectionAllowed() {
return this.accessToUnderlyingConnectionAllowed;
}
public void setAccessToUnderlyingConnectionAllowed(boolean accessToUnderlyingConnectionAllowed) {
this.accessToUnderlyingConnectionAllowed = accessToUnderlyingConnectionAllowed;
}
public boolean isTestOnBorrow() {
return this.testOnBorrow;
}
public void setTestOnBorrow(boolean testOnBorrow) {
this.testOnBorrow = testOnBorrow;
}
public boolean isTestOnReturn() {
return this.testOnReturn;
}
public void setTestOnReturn(boolean testOnReturn) {
this.testOnReturn = testOnReturn;
}
public boolean isTestWhileIdle() {
return this.testWhileIdle;
}
public void setTestWhileIdle(boolean testWhileIdle) {
this.testWhileIdle = testWhileIdle;
}
public boolean isDefaultAutoCommit() {
return this.defaultAutoCommit;
}
public void setDefaultAutoCommit(boolean defaultAutoCommit) {
this.defaultAutoCommit = defaultAutoCommit;
}
public Boolean getDefaultReadOnly() {
return this.defaultReadOnly;
}
public void setDefaultReadOnly(Boolean defaultReadOnly) {
this.defaultReadOnly = defaultReadOnly;
}
public Integer getDefaultTransactionIsolation() {
return this.defaultTransactionIsolation;
}
public void setDefaultTransactionIsolation(Integer defaultTransactionIsolation) {
this.defaultTransactionIsolation = defaultTransactionIsolation;
}
public String getDefaultCatalog() {
return this.defaultCatalog;
}
public void setDefaultCatalog(String defaultCatalog) {
this.defaultCatalog = defaultCatalog;
}
public PasswordCallback getPasswordCallback() {
return this.passwordCallback;
}
public void setPasswordCallback(PasswordCallback passwordCallback) {
this.passwordCallback = passwordCallback;
}
public void setPasswordCallbackClassName(String passwordCallbackClassName) throws Exception {
Class<?> clazz = Utils.loadClass(passwordCallbackClassName);
if (clazz != null) {
this.passwordCallback = (PasswordCallback) clazz.newInstance();
} else {
LOG.error("load passwordCallback error : " + passwordCallbackClassName);
this.passwordCallback = null;
}
}
public NameCallback getUserCallback() {
return this.userCallback;
}
public void setUserCallback(NameCallback userCallback) {
this.userCallback = userCallback;
}
public boolean isInitVariants() {
return this.initVariants;
}
public void setInitVariants(boolean initVariants) {
this.initVariants = initVariants;
}
public boolean isInitGlobalVariants() {
return this.initGlobalVariants;
}
public void setInitGlobalVariants(boolean initGlobalVariants) {
this.initGlobalVariants = initGlobalVariants;
}
public int getQueryTimeout() {
return this.queryTimeout;
}
public void setQueryTimeout(int seconds) {
this.queryTimeout = seconds;
}
public String getName() {
return this.name != null ? this.name : "DataSource-" + System.identityHashCode(this);
}
public void setName(String name) {
this.name = name;
}
public boolean isPoolPreparedStatements() {
return this.poolPreparedStatements;
}
public abstract void setPoolPreparedStatements(boolean var1);
public long getMaxWait() {
return this.maxWait;
}
public void setMaxWait(long maxWaitMillis) {
if (maxWaitMillis != this.maxWait) {
if (maxWaitMillis > 0L && this.useUnfairLock == null && !this.inited) {
ReentrantLock lock = this.lock;
lock.lock();
try {
if (!this.inited && !lock.isFair()) {
this.lock = new ReentrantLock(true);
this.notEmpty = this.lock.newCondition();
this.empty = this.lock.newCondition();
}
} finally {
lock.unlock();
}
}
if (this.inited) {
LOG.error("maxWait changed : " + this.maxWait + " -> " + maxWaitMillis);
}
this.maxWait = maxWaitMillis;
}
}
public int getNotFullTimeoutRetryCount() {
return this.notFullTimeoutRetryCount;
}
public void setNotFullTimeoutRetryCount(int notFullTimeoutRetryCount) {
this.notFullTimeoutRetryCount = notFullTimeoutRetryCount;
}
public int getMinIdle() {
return this.minIdle;
}
public void setMinIdle(int value) {
if (value != this.minIdle) {
if (this.inited && value > this.maxActive) {
throw new IllegalArgumentException(
"minIdle greater than maxActive, " + this.maxActive + " < " + this.minIdle);
} else if (this.minIdle < 0) {
throw new IllegalArgumentException("minIdle must > 0");
} else {
this.minIdle = value;
}
}
}
public int getMaxIdle() {
return this.maxIdle;
}
/**
* @deprecated
*/
@Deprecated
public void setMaxIdle(int maxIdle) {
LOG.error("maxIdle is deprecated");
this.maxIdle = maxIdle;
}
public int getInitialSize() {
return this.initialSize;
}
public void setInitialSize(int initialSize) {
if (this.initialSize != initialSize) {
if (this.inited) {
throw new UnsupportedOperationException();
} else {
this.initialSize = initialSize;
}
}
}
public long getCreateErrorCount() {
return (long) this.createErrorCount;
}
public int getMaxActive() {
return this.maxActive;
}
public abstract void setMaxActive(int var1);
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
if (!StringUtils.equals(this.username, username)) {
// if (this.inited) {
// throw new UnsupportedOperationException();
// } else {
this.username = username;
// }
}
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
if (!StringUtils.equals(this.password, password)) {
if (this.inited) {
LOG.info("password changed");
}
this.password = password;
}
}
public Properties getConnectProperties() {
return this.connectProperties;
}
public abstract void setConnectProperties(Properties var1);
public void setConnectionProperties(String connectionProperties) {
if (connectionProperties != null && connectionProperties.trim().length() != 0) {
String[] entries = connectionProperties.split(";");
Properties properties = new Properties();
for (int i = 0; i < entries.length; ++i) {
String entry = entries[i];
if (entry.length() > 0) {
int index = entry.indexOf(61);
if (index > 0) {
String name = entry.substring(0, index);
String value = entry.substring(index + 1);
properties.setProperty(name, value);
} else {
properties.setProperty(entry, "");
}
}
}
this.setConnectProperties(properties);
} else {
this.setConnectProperties((Properties) null);
}
}
public String getUrl() {
return this.jdbcUrl;
}
public void setUrl(String jdbcUrl) {
if (!StringUtils.equals(this.jdbcUrl, jdbcUrl)) {
// if (this.inited) {
// throw new UnsupportedOperationException();
// } else {
if (jdbcUrl != null) {
jdbcUrl = jdbcUrl.trim();
}
this.jdbcUrl = jdbcUrl;
// }
}
}
public String getRawJdbcUrl() {
return this.jdbcUrl;
}
public String getDriverClassName() {
return this.driverClass;
}
public void setDriverClassName(String driverClass) {
if (driverClass != null && driverClass.length() > 256) {
throw new IllegalArgumentException("driverClassName length > 256.");
} else {
if ("oracle.jdbc.driver.OracleDriver".equalsIgnoreCase(driverClass)) {
driverClass = "oracle.jdbc.OracleDriver";
LOG.warn("oracle.jdbc.driver.OracleDriver is deprecated.Having use oracle.jdbc.OracleDriver.");
}
if (this.inited) {
if (!StringUtils.equals(this.driverClass, driverClass)) {
throw new UnsupportedOperationException();
}
} else {
this.driverClass = driverClass;
}
}
}
public ClassLoader getDriverClassLoader() {
return this.driverClassLoader;
}
public void setDriverClassLoader(ClassLoader driverClassLoader) {
this.driverClassLoader = driverClassLoader;
}
public PrintWriter getLogWriter() {
return this.logWriter;
}
public void setLogWriter(PrintWriter out) throws SQLException {
this.logWriter = out;
}
public int getLoginTimeout() {
return DriverManager.getLoginTimeout();
}
public void setLoginTimeout(int seconds) {
DriverManager.setLoginTimeout(seconds);
}
public Driver getDriver() {
return this.driver;
}
public void setDriver(Driver driver) {
this.driver = driver;
}
public int getDriverMajorVersion() {
return this.driver == null ? -1 : this.driver.getMajorVersion();
}
public int getDriverMinorVersion() {
return this.driver == null ? -1 : this.driver.getMinorVersion();
}
public ExceptionSorter getExceptionSorter() {
return this.exceptionSorter;
}
public void setExceptionSorter(ExceptionSorter exceptionSoter) {
this.exceptionSorter = exceptionSoter;
}
public void setExceptionSorter(String exceptionSorter) throws SQLException {
if (exceptionSorter == null) {
this.exceptionSorter = NullExceptionSorter.getInstance();
} else {
exceptionSorter = exceptionSorter.trim();
if (exceptionSorter.length() == 0) {
this.exceptionSorter = NullExceptionSorter.getInstance();
} else {
Class<?> clazz = Utils.loadClass(exceptionSorter);
if (clazz == null) {
LOG.error("load exceptionSorter error : " + exceptionSorter);
} else {
try {
this.exceptionSorter = (ExceptionSorter) clazz.newInstance();
} catch (Exception var4) {
throw new SQLException("create exceptionSorter error", var4);
}
}
}
}
}
public String getExceptionSorterClassName() {
return this.exceptionSorter == null ? null : this.exceptionSorter.getClass().getName();
}
public void setExceptionSorterClassName(String exceptionSorter) throws Exception {
this.setExceptionSorter(exceptionSorter);
}
public List<Filter> getProxyFilters() {
return this.filters;
}
public void setProxyFilters(List<Filter> filters) {
if (filters != null) {
this.filters.addAll(filters);
}
}
public String[] getFilterClasses() {
List<Filter> filterConfigList = this.getProxyFilters();
List<String> classes = new ArrayList();
Iterator var3 = filterConfigList.iterator();
while (var3.hasNext()) {
Filter filter = (Filter) var3.next();
classes.add(filter.getClass().getName());
}
return (String[]) classes.toArray(new String[classes.size()]);
}
public void setFilters(String filters) throws SQLException {
if (filters != null && filters.startsWith("!")) {
filters = filters.substring(1);
this.clearFilters();
}
this.addFilters(filters);
}
public void addFilters(String filters) throws SQLException {
if (filters != null && filters.length() != 0) {
String[] filterArray = filters.split("\\,");
String[] var3 = filterArray;
int var4 = filterArray.length;
for (int var5 = 0; var5 < var4; ++var5) {
String item = var3[var5];
FilterManager.loadFilter(this.filters, item.trim());
}
}
}
public void clearFilters() {
if (this.isClearFiltersEnable()) {
this.filters.clear();
}
}
public void validateConnection(Connection conn) throws SQLException {
String query = this.getValidationQuery();
if (conn.isClosed()) {
throw new SQLException("validateConnection: connection closed");
} else if (this.validConnectionChecker != null) {
boolean result = true;
Exception error = null;
try {
result = this.validConnectionChecker.isValidConnection(conn, this.validationQuery,
this.validationQueryTimeout);
if (result && this.onFatalError) {
this.lock.lock();
try {
if (this.onFatalError) {
this.onFatalError = false;
}
} finally {
this.lock.unlock();
}
}
} catch (SQLException var24) {
throw var24;
} catch (Exception var25) {
error = var25;
}
if (!result) {
SQLException sqlError = error != null ? new SQLException("validateConnection false", error)
: new SQLException("validateConnection false");
throw sqlError;
}
} else {
if (null != query) {
Statement stmt = null;
ResultSet rs = null;
try {
stmt = conn.createStatement();
if (this.getValidationQueryTimeout() > 0) {
stmt.setQueryTimeout(this.getValidationQueryTimeout());
}
rs = stmt.executeQuery(query);
if (!rs.next()) {
throw new SQLException("validationQuery didn't return a row");
}
if (this.onFatalError) {
this.lock.lock();
try {
if (this.onFatalError) {
this.onFatalError = false;
}
} finally {
this.lock.unlock();
}
}
} finally {
JdbcUtils.close(rs);
JdbcUtils.close(stmt);
}
}
}
}
/**
* @deprecated
*/
protected boolean testConnectionInternal(Connection conn) {
return this.testConnectionInternal((DruidConnectionHolder) null, conn);
}
protected boolean testConnectionInternal(DruidConnectionHolder holder, Connection conn) {
String sqlFile = JdbcSqlStat.getContextSqlFile();
String sqlName = JdbcSqlStat.getContextSqlName();
if (sqlFile != null) {
JdbcSqlStat.setContextSqlFile((String) null);
}
if (sqlName != null) {
JdbcSqlStat.setContextSqlName((String) null);
}
try {
boolean valid;
if (this.validConnectionChecker == null) {
if (conn.isClosed()) {
valid = false;
return valid;
} else if (null == this.validationQuery) {
valid = true;
return valid;
} else {
Statement stmt = null;
ResultSet rset = null;
boolean var7;
try {
stmt = conn.createStatement();
if (this.getValidationQueryTimeout() > 0) {
stmt.setQueryTimeout(this.validationQueryTimeout);
}
rset = stmt.executeQuery(this.validationQuery);
if (!rset.next()) {
var7 = false;
return var7;
}
} finally {
JdbcUtils.close(rset);
JdbcUtils.close(stmt);
}
if (this.onFatalError) {
this.lock.lock();
try {
if (this.onFatalError) {
this.onFatalError = false;
}
} finally {
this.lock.unlock();
}
}
var7 = true;
return var7;
}
} else {
valid = this.validConnectionChecker.isValidConnection(conn, this.validationQuery,
this.validationQueryTimeout);
long currentTimeMillis = System.currentTimeMillis();
if (holder != null) {
holder.lastValidTimeMillis = currentTimeMillis;
}
if (valid && this.isMySql) {
long lastPacketReceivedTimeMs = MySqlUtils.getLastPacketReceivedTimeMs(conn);
if (lastPacketReceivedTimeMs > 0L) {
long mysqlIdleMillis = currentTimeMillis - lastPacketReceivedTimeMs;
if (lastPacketReceivedTimeMs > 0L && mysqlIdleMillis >= this.timeBetweenEvictionRunsMillis) {
this.discardConnection(conn);
String errorMsg = "discard long time none received connection. , jdbcUrl : " + this.jdbcUrl
+ ", jdbcUrl : " + this.jdbcUrl + ", lastPacketReceivedIdleMillis : "
+ mysqlIdleMillis;
LOG.error(errorMsg);
boolean var13 = false;
return var13;
}
}
}
if (valid && this.onFatalError) {
this.lock.lock();
try {
if (this.onFatalError) {
gitextract_uh972pfn/
├── .gitignore
├── LICENSE
├── README.md
├── docs/
│ ├── package.json
│ └── src/
│ ├── .vuepress/
│ │ ├── config.ts
│ │ ├── navbar.ts
│ │ ├── sidebar.ts
│ │ ├── styles/
│ │ │ ├── index.scss
│ │ │ └── palette.scss
│ │ └── theme.ts
│ ├── README.md
│ ├── deploy/
│ │ ├── README.md
│ │ ├── docker.md
│ │ ├── how-to-backup.md
│ │ ├── multi-judgeserver.md
│ │ ├── open-https.md
│ │ └── update.md
│ ├── develop/
│ │ ├── db.md
│ │ ├── judge_dispatcher.md
│ │ ├── sandbox.md
│ │ └── update-fe.md
│ ├── introduction/
│ │ ├── README.md
│ │ └── architecture.md
│ ├── monomer/
│ │ ├── backend.md
│ │ ├── frontend.md
│ │ ├── judgeserver.md
│ │ ├── mysql-checker.md
│ │ ├── mysql.md
│ │ ├── nacos.md
│ │ ├── redis.md
│ │ └── rsync.md
│ └── use/
│ ├── admin-user.md
│ ├── close-free-cdn.md
│ ├── contest.md
│ ├── custom-difficulty.md
│ ├── discussion-admin.md
│ ├── import-problem.md
│ ├── import-user.md
│ ├── judge-mode.md
│ ├── notice-announcement.md
│ ├── testcase.md
│ └── training.md
├── pom.xml
├── voj-backend/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ ├── alibaba/
│ │ │ │ └── druid/
│ │ │ │ └── pool/
│ │ │ │ └── DruidAbstractDataSource.java
│ │ │ └── simplefanc/
│ │ │ └── voj/
│ │ │ └── backend/
│ │ │ ├── BackendApplication.java
│ │ │ ├── cache/
│ │ │ │ ├── CacheTypeManager.java
│ │ │ │ ├── DoubleCache.java
│ │ │ │ └── DoubleCacheManager.java
│ │ │ ├── common/
│ │ │ │ ├── annotation/
│ │ │ │ │ └── Access.java
│ │ │ │ ├── constants/
│ │ │ │ │ ├── AccessEnum.java
│ │ │ │ │ ├── CallJudgerType.java
│ │ │ │ │ ├── Constant.java
│ │ │ │ │ ├── EmailConstant.java
│ │ │ │ │ ├── FileConstant.java
│ │ │ │ │ ├── FileTypeEnum.java
│ │ │ │ │ ├── QueueConstant.java
│ │ │ │ │ ├── RoleEnum.java
│ │ │ │ │ ├── ScheduleConstant.java
│ │ │ │ │ ├── TrainingEnum.java
│ │ │ │ │ └── UserStatusEnum.java
│ │ │ │ ├── exception/
│ │ │ │ │ ├── StatusAccessDeniedException.java
│ │ │ │ │ ├── StatusFailException.java
│ │ │ │ │ ├── StatusForbiddenException.java
│ │ │ │ │ ├── StatusNotFoundException.java
│ │ │ │ │ ├── StatusSystemErrorException.java
│ │ │ │ │ └── advice/
│ │ │ │ │ └── GlobalExceptionAdvice.java
│ │ │ │ └── utils/
│ │ │ │ ├── ConfigUtil.java
│ │ │ │ ├── ExcelUtil.java
│ │ │ │ ├── JwtUtil.java
│ │ │ │ ├── MyFileUtil.java
│ │ │ │ ├── RedisUtil.java
│ │ │ │ └── RestTemplateUtil.java
│ │ │ ├── config/
│ │ │ │ ├── CacheConfig.java
│ │ │ │ ├── CommonAsyncTaskConfig.java
│ │ │ │ ├── ConfigVO.java
│ │ │ │ ├── CorsConfig.java
│ │ │ │ ├── DruidConfiguration.java
│ │ │ │ ├── JudgeAsyncTaskConfig.java
│ │ │ │ ├── MyMetaObjectConfig.java
│ │ │ │ ├── MybatisPlusConfig.java
│ │ │ │ ├── NacosConfig.java
│ │ │ │ ├── RedisConfig.java
│ │ │ │ ├── RestTemplateConfig.java
│ │ │ │ ├── ShiroConfig.java
│ │ │ │ ├── StartupRunner.java
│ │ │ │ ├── SwaggerConfig.java
│ │ │ │ └── property/
│ │ │ │ ├── DoubleCacheProperties.java
│ │ │ │ ├── EmailRuleBO.java
│ │ │ │ ├── FilePathProperties.java
│ │ │ │ └── RemoteAccountProperties.java
│ │ │ ├── controller/
│ │ │ │ ├── admin/
│ │ │ │ │ ├── AdminContestController.java
│ │ │ │ │ ├── AdminDiscussionController.java
│ │ │ │ │ ├── AdminJudgeController.java
│ │ │ │ │ ├── AdminProblemController.java
│ │ │ │ │ ├── AdminTagController.java
│ │ │ │ │ ├── AdminTrainingCategoryController.java
│ │ │ │ │ ├── AdminTrainingController.java
│ │ │ │ │ ├── AdminUserController.java
│ │ │ │ │ ├── AnnouncementController.java
│ │ │ │ │ ├── ConfigController.java
│ │ │ │ │ ├── DashboardController.java
│ │ │ │ │ └── SwitchController.java
│ │ │ │ ├── file/
│ │ │ │ │ ├── ContestFileController.java
│ │ │ │ │ ├── ImageController.java
│ │ │ │ │ ├── ImportFpsProblemController.java
│ │ │ │ │ ├── ImportLOJProblemController.java
│ │ │ │ │ ├── ImportQDUOJProblemController.java
│ │ │ │ │ ├── MarkDownFileController.java
│ │ │ │ │ ├── ProblemFileController.java
│ │ │ │ │ ├── TestCaseController.java
│ │ │ │ │ └── UserFileController.java
│ │ │ │ ├── msg/
│ │ │ │ │ ├── AdminNoticeController.java
│ │ │ │ │ ├── NoticeController.java
│ │ │ │ │ └── UserMessageController.java
│ │ │ │ └── oj/
│ │ │ │ ├── AccountController.java
│ │ │ │ ├── CommentController.java
│ │ │ │ ├── CommonController.java
│ │ │ │ ├── ContestAdminController.java
│ │ │ │ ├── ContestController.java
│ │ │ │ ├── ContestScoreboardController.java
│ │ │ │ ├── DiscussionController.java
│ │ │ │ ├── HomeController.java
│ │ │ │ ├── JudgeController.java
│ │ │ │ ├── PassportController.java
│ │ │ │ ├── ProblemController.java
│ │ │ │ ├── RankController.java
│ │ │ │ └── TrainingController.java
│ │ │ ├── dao/
│ │ │ │ ├── common/
│ │ │ │ │ ├── AnnouncementEntityService.java
│ │ │ │ │ ├── FileEntityService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── AnnouncementEntityServiceImpl.java
│ │ │ │ │ └── FileEntityEntityServiceImpl.java
│ │ │ │ ├── contest/
│ │ │ │ │ ├── ContestAnnouncementEntityService.java
│ │ │ │ │ ├── ContestEntityService.java
│ │ │ │ │ ├── ContestPrintEntityService.java
│ │ │ │ │ ├── ContestProblemEntityService.java
│ │ │ │ │ ├── ContestRecordEntityService.java
│ │ │ │ │ ├── ContestRegisterEntityService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── ContestAnnouncementEntityServiceImpl.java
│ │ │ │ │ ├── ContestEntityServiceImpl.java
│ │ │ │ │ ├── ContestPrintEntityServiceImpl.java
│ │ │ │ │ ├── ContestProblemEntityServiceImpl.java
│ │ │ │ │ ├── ContestRecordEntityServiceImpl.java
│ │ │ │ │ └── ContestRegisterEntityServiceImpl.java
│ │ │ │ ├── discussion/
│ │ │ │ │ ├── CommentEntityService.java
│ │ │ │ │ ├── CommentLikeEntityService.java
│ │ │ │ │ ├── DiscussionEntityService.java
│ │ │ │ │ ├── DiscussionLikeEntityService.java
│ │ │ │ │ ├── DiscussionReportEntityService.java
│ │ │ │ │ ├── ReplyEntityService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── CommentEntityServiceImpl.java
│ │ │ │ │ ├── CommentLikeEntityServiceImpl.java
│ │ │ │ │ ├── DiscussionEntityServiceImpl.java
│ │ │ │ │ ├── DiscussionLikeEntityServiceImpl.java
│ │ │ │ │ ├── DiscussionReportEntityServiceImpl.java
│ │ │ │ │ └── ReplyEntityServiceImpl.java
│ │ │ │ ├── judge/
│ │ │ │ │ ├── JudgeCaseEntityService.java
│ │ │ │ │ ├── JudgeEntityService.java
│ │ │ │ │ ├── JudgeServerEntityService.java
│ │ │ │ │ ├── RemoteJudgeAccountEntityService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── JudgeCaseEntityServiceImpl.java
│ │ │ │ │ ├── JudgeEntityServiceImpl.java
│ │ │ │ │ ├── JudgeServerEntityServiceImpl.java
│ │ │ │ │ └── RemoteJudgeAccountEntityServiceImpl.java
│ │ │ │ ├── msg/
│ │ │ │ │ ├── AdminSysNoticeEntityService.java
│ │ │ │ │ ├── MsgRemindEntityService.java
│ │ │ │ │ ├── UserSysNoticeEntityService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── AdminSysNoticeEntityServiceImpl.java
│ │ │ │ │ ├── MsgRemindEntityServiceImpl.java
│ │ │ │ │ └── UserSysNoticeEntityServiceImpl.java
│ │ │ │ ├── problem/
│ │ │ │ │ ├── CategoryEntityService.java
│ │ │ │ │ ├── CodeTemplateEntityService.java
│ │ │ │ │ ├── LanguageEntityService.java
│ │ │ │ │ ├── ProblemCaseEntityService.java
│ │ │ │ │ ├── ProblemEntityService.java
│ │ │ │ │ ├── ProblemLanguageEntityService.java
│ │ │ │ │ ├── ProblemTagEntityService.java
│ │ │ │ │ ├── TagClassificationEntityService.java
│ │ │ │ │ ├── TagEntityService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── CategoryEntityServiceImpl.java
│ │ │ │ │ ├── CodeTemplateEntityServiceImpl.java
│ │ │ │ │ ├── LanguageEntityServiceImpl.java
│ │ │ │ │ ├── ProblemCaseEntityServiceImpl.java
│ │ │ │ │ ├── ProblemEntityServiceImpl.java
│ │ │ │ │ ├── ProblemLanguageEntityServiceImpl.java
│ │ │ │ │ ├── ProblemTagEntityServiceImpl.java
│ │ │ │ │ ├── TagClassificationEntityServiceImpl.java
│ │ │ │ │ └── TagEntityServiceImpl.java
│ │ │ │ ├── training/
│ │ │ │ │ ├── MappingTrainingCategoryEntityService.java
│ │ │ │ │ ├── TrainingCategoryEntityService.java
│ │ │ │ │ ├── TrainingEntityService.java
│ │ │ │ │ ├── TrainingProblemEntityService.java
│ │ │ │ │ ├── TrainingRecordEntityService.java
│ │ │ │ │ ├── TrainingRegisterEntityService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── MappingTrainingCategoryEntityServiceImpl.java
│ │ │ │ │ ├── TrainingCategoryEntityServiceImpl.java
│ │ │ │ │ ├── TrainingEntityServiceImpl.java
│ │ │ │ │ ├── TrainingProblemEntityServiceImpl.java
│ │ │ │ │ ├── TrainingRecordEntityServiceImpl.java
│ │ │ │ │ └── TrainingRegisterEntityServiceImpl.java
│ │ │ │ └── user/
│ │ │ │ ├── AuthEntityService.java
│ │ │ │ ├── RoleAuthEntityService.java
│ │ │ │ ├── RoleEntityService.java
│ │ │ │ ├── SessionEntityService.java
│ │ │ │ ├── UserAcproblemEntityService.java
│ │ │ │ ├── UserInfoEntityService.java
│ │ │ │ ├── UserRoleEntityService.java
│ │ │ │ └── impl/
│ │ │ │ ├── AuthEntityServiceImpl.java
│ │ │ │ ├── RoleAuthEntityServiceImpl.java
│ │ │ │ ├── RoleEntityServiceImpl.java
│ │ │ │ ├── SessionEntityServiceImpl.java
│ │ │ │ ├── UserAcproblemEntityServiceImpl.java
│ │ │ │ ├── UserInfoEntityServiceImpl.java
│ │ │ │ └── UserRoleEntityServiceImpl.java
│ │ │ ├── judge/
│ │ │ │ ├── AbstractTaskReceiver.java
│ │ │ │ ├── ChooseUtils.java
│ │ │ │ ├── Dispatcher.java
│ │ │ │ ├── local/
│ │ │ │ │ ├── JudgeTaskDispatcher.java
│ │ │ │ │ └── JudgeTaskTaskReceiver.java
│ │ │ │ └── remote/
│ │ │ │ ├── RemoteJudgeTaskDispatcher.java
│ │ │ │ ├── RemoteJudgeTaskReceiver.java
│ │ │ │ └── crawler/
│ │ │ │ ├── AbstractCFStyleProblemCrawler.java
│ │ │ │ ├── AbstractProblemCrawler.java
│ │ │ │ ├── AtCoderProblemCrawler.java
│ │ │ │ ├── CFProblemCrawler.java
│ │ │ │ ├── CrawlersHolder.java
│ │ │ │ ├── GYMProblemCrawler.java
│ │ │ │ ├── HDUProblemCrawler.java
│ │ │ │ ├── JSKProblemCrawler.java
│ │ │ │ ├── MXTProblemCrawler.java
│ │ │ │ ├── POJProblemCrawler.java
│ │ │ │ ├── TKOJProblemCrawler.java
│ │ │ │ └── YACSProblemCrawler.java
│ │ │ ├── mapper/
│ │ │ │ ├── AdminSysNoticeMapper.java
│ │ │ │ ├── AnnouncementMapper.java
│ │ │ │ ├── AuthMapper.java
│ │ │ │ ├── CategoryMapper.java
│ │ │ │ ├── CodeTemplateMapper.java
│ │ │ │ ├── CommentLikeMapper.java
│ │ │ │ ├── CommentMapper.java
│ │ │ │ ├── ContestAnnouncementMapper.java
│ │ │ │ ├── ContestMapper.java
│ │ │ │ ├── ContestPrintMapper.java
│ │ │ │ ├── ContestProblemMapper.java
│ │ │ │ ├── ContestRecordMapper.java
│ │ │ │ ├── ContestRegisterMapper.java
│ │ │ │ ├── DiscussionLikeMapper.java
│ │ │ │ ├── DiscussionMapper.java
│ │ │ │ ├── DiscussionReportMapper.java
│ │ │ │ ├── FileMapper.java
│ │ │ │ ├── JudgeCaseMapper.java
│ │ │ │ ├── JudgeMapper.java
│ │ │ │ ├── JudgeServerMapper.java
│ │ │ │ ├── LanguageMapper.java
│ │ │ │ ├── MappingTrainingCategoryMapper.java
│ │ │ │ ├── MsgRemindMapper.java
│ │ │ │ ├── ProblemCaseMapper.java
│ │ │ │ ├── ProblemLanguageMapper.java
│ │ │ │ ├── ProblemMapper.java
│ │ │ │ ├── ProblemTagMapper.java
│ │ │ │ ├── RemoteJudgeAccountMapper.java
│ │ │ │ ├── ReplyMapper.java
│ │ │ │ ├── RoleAuthMapper.java
│ │ │ │ ├── RoleMapper.java
│ │ │ │ ├── SessionMapper.java
│ │ │ │ ├── TagClassificationMapper.java
│ │ │ │ ├── TagMapper.java
│ │ │ │ ├── TrainingCategoryMapper.java
│ │ │ │ ├── TrainingMapper.java
│ │ │ │ ├── TrainingProblemMapper.java
│ │ │ │ ├── TrainingRecordMapper.java
│ │ │ │ ├── TrainingRegisterMapper.java
│ │ │ │ ├── UserAcproblemMapper.java
│ │ │ │ ├── UserInfoMapper.java
│ │ │ │ ├── UserRecordMapper.java
│ │ │ │ ├── UserRoleMapper.java
│ │ │ │ ├── UserSysNoticeMapper.java
│ │ │ │ └── xml/
│ │ │ │ ├── AdminSysNoticeMapper.xml
│ │ │ │ ├── AnnouncementMapper.xml
│ │ │ │ ├── CommentMapper.xml
│ │ │ │ ├── ContestExplanationMapper.xml
│ │ │ │ ├── ContestMapper.xml
│ │ │ │ ├── ContestProblemMapper.xml
│ │ │ │ ├── ContestRecordMapper.xml
│ │ │ │ ├── ContestRegisterMapper.xml
│ │ │ │ ├── ContestScoreMapper.xml
│ │ │ │ ├── DiscussionMapper.xml
│ │ │ │ ├── JudgeMapper.xml
│ │ │ │ ├── MsgRemindMapper.xml
│ │ │ │ ├── ProblemMapper.xml
│ │ │ │ ├── RoleAuthMapper.xml
│ │ │ │ ├── RoleMapper.xml
│ │ │ │ ├── SessionMapper.xml
│ │ │ │ ├── TagMapper.xml
│ │ │ │ ├── TrainingCategoryMapper.xml
│ │ │ │ ├── TrainingMapper.xml
│ │ │ │ ├── TrainingProblemMapper.xml
│ │ │ │ ├── TrainingRecordMapper.xml
│ │ │ │ ├── UserAcproblemMapper.xml
│ │ │ │ ├── UserInfoMapper.xml
│ │ │ │ ├── UserRecordMapper.xml
│ │ │ │ ├── UserRoleMapper.xml
│ │ │ │ └── UserSysNoticeMapper.xml
│ │ │ ├── pojo/
│ │ │ │ ├── dto/
│ │ │ │ │ ├── AdminEditUserDTO.java
│ │ │ │ │ ├── AnnouncementDTO.java
│ │ │ │ │ ├── ApplyResetPasswordDTO.java
│ │ │ │ │ ├── ChangeEmailDTO.java
│ │ │ │ │ ├── ChangePasswordDTO.java
│ │ │ │ │ ├── CheckAcDTO.java
│ │ │ │ │ ├── CheckUsernameOrEmailDTO.java
│ │ │ │ │ ├── ContestPrintDTO.java
│ │ │ │ │ ├── ContestProblemDTO.java
│ │ │ │ │ ├── ContestRankDTO.java
│ │ │ │ │ ├── DbAndRedisConfigDTO.java
│ │ │ │ │ ├── EmailConfigDTO.java
│ │ │ │ │ ├── LoginDTO.java
│ │ │ │ │ ├── PidListDTO.java
│ │ │ │ │ ├── ProblemDTO.java
│ │ │ │ │ ├── QDOJProblemDTO.java
│ │ │ │ │ ├── RegisterContestDTO.java
│ │ │ │ │ ├── RegisterDTO.java
│ │ │ │ │ ├── RegisterTrainingDTO.java
│ │ │ │ │ ├── ReplyDTO.java
│ │ │ │ │ ├── ResetPasswordDTO.java
│ │ │ │ │ ├── SubmitIdListDTO.java
│ │ │ │ │ ├── SwitchConfigDTO.java
│ │ │ │ │ ├── TestEmailDTO.java
│ │ │ │ │ ├── ToJudgeDTO.java
│ │ │ │ │ ├── TrainingDTO.java
│ │ │ │ │ ├── TrainingProblemDTO.java
│ │ │ │ │ ├── UserReadContestAnnouncementDTO.java
│ │ │ │ │ └── WebConfigDTO.java
│ │ │ │ └── vo/
│ │ │ │ ├── ACMContestRankVO.java
│ │ │ │ ├── ACMRankVO.java
│ │ │ │ ├── AccessVO.java
│ │ │ │ ├── AdminContestVO.java
│ │ │ │ ├── AdminSysNoticeVO.java
│ │ │ │ ├── AnnouncementVO.java
│ │ │ │ ├── CaptchaVO.java
│ │ │ │ ├── ChangeAccountVO.java
│ │ │ │ ├── CheckUsernameOrEmailVO.java
│ │ │ │ ├── CommentListVO.java
│ │ │ │ ├── CommentVO.java
│ │ │ │ ├── ContestOutsideInfo.java
│ │ │ │ ├── ContestProblemVO.java
│ │ │ │ ├── ContestRecordVO.java
│ │ │ │ ├── ContestRegisterCountVO.java
│ │ │ │ ├── ContestVO.java
│ │ │ │ ├── DiscussionVO.java
│ │ │ │ ├── ExcelIpVO.java
│ │ │ │ ├── ExcelUserVO.java
│ │ │ │ ├── ImportProblemVO.java
│ │ │ │ ├── JudgeVO.java
│ │ │ │ ├── OIContestRankVO.java
│ │ │ │ ├── OIRankVO.java
│ │ │ │ ├── ProblemCountVO.java
│ │ │ │ ├── ProblemInfoVO.java
│ │ │ │ ├── ProblemTagVO.java
│ │ │ │ ├── ProblemVO.java
│ │ │ │ ├── RandomProblemVO.java
│ │ │ │ ├── RegisterCodeVO.java
│ │ │ │ ├── RoleAuthsVO.java
│ │ │ │ ├── SubmissionInfoVO.java
│ │ │ │ ├── SysMsgVO.java
│ │ │ │ ├── TrainingRankVO.java
│ │ │ │ ├── TrainingRecordVO.java
│ │ │ │ ├── TrainingVO.java
│ │ │ │ ├── UserHomeVO.java
│ │ │ │ ├── UserInfoVO.java
│ │ │ │ ├── UserMsgVO.java
│ │ │ │ ├── UserRolesVO.java
│ │ │ │ └── UserUnreadMsgCountVO.java
│ │ │ ├── service/
│ │ │ │ ├── account/
│ │ │ │ │ ├── PassportService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ └── PassportServiceImpl.java
│ │ │ │ ├── admin/
│ │ │ │ │ ├── announcement/
│ │ │ │ │ │ ├── AdminAnnouncementService.java
│ │ │ │ │ │ └── impl/
│ │ │ │ │ │ └── AdminAnnouncementServiceImpl.java
│ │ │ │ │ ├── contest/
│ │ │ │ │ │ ├── AdminContestAnnouncementService.java
│ │ │ │ │ │ ├── AdminContestProblemService.java
│ │ │ │ │ │ ├── AdminContestService.java
│ │ │ │ │ │ └── impl/
│ │ │ │ │ │ ├── AdminContestAnnouncementServiceImpl.java
│ │ │ │ │ │ ├── AdminContestProblemServiceImpl.java
│ │ │ │ │ │ └── AdminContestServiceImpl.java
│ │ │ │ │ ├── discussion/
│ │ │ │ │ │ ├── AdminDiscussionService.java
│ │ │ │ │ │ └── impl/
│ │ │ │ │ │ └── AdminDiscussionServiceImpl.java
│ │ │ │ │ ├── problem/
│ │ │ │ │ │ ├── AdminProblemService.java
│ │ │ │ │ │ ├── RemoteProblemService.java
│ │ │ │ │ │ └── impl/
│ │ │ │ │ │ └── AdminProblemServiceImpl.java
│ │ │ │ │ ├── rejudge/
│ │ │ │ │ │ ├── RejudgeService.java
│ │ │ │ │ │ └── impl/
│ │ │ │ │ │ └── RejudgeServiceImpl.java
│ │ │ │ │ ├── system/
│ │ │ │ │ │ ├── ConfigService.java
│ │ │ │ │ │ ├── DashboardService.java
│ │ │ │ │ │ └── impl/
│ │ │ │ │ │ ├── ConfigServiceImpl.java
│ │ │ │ │ │ └── DashboardServiceImpl.java
│ │ │ │ │ ├── tag/
│ │ │ │ │ │ ├── AdminTagService.java
│ │ │ │ │ │ └── impl/
│ │ │ │ │ │ └── AdminTagServiceImpl.java
│ │ │ │ │ ├── training/
│ │ │ │ │ │ ├── AdminTrainingCategoryService.java
│ │ │ │ │ │ ├── AdminTrainingProblemService.java
│ │ │ │ │ │ ├── AdminTrainingRecordService.java
│ │ │ │ │ │ ├── AdminTrainingService.java
│ │ │ │ │ │ └── impl/
│ │ │ │ │ │ ├── AdminTrainingCategoryServiceImpl.java
│ │ │ │ │ │ ├── AdminTrainingProblemServiceImpl.java
│ │ │ │ │ │ └── AdminTrainingServiceImpl.java
│ │ │ │ │ └── user/
│ │ │ │ │ ├── AdminUserService.java
│ │ │ │ │ ├── UserRecordService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── AdminUserServiceImpl.java
│ │ │ │ │ └── UserRecordServiceImpl.java
│ │ │ │ ├── email/
│ │ │ │ │ └── EmailService.java
│ │ │ │ ├── file/
│ │ │ │ │ ├── ContestFileService.java
│ │ │ │ │ ├── ImageService.java
│ │ │ │ │ ├── ImportDSOJProblemService.java
│ │ │ │ │ ├── ImportFpsProblemService.java
│ │ │ │ │ ├── ImportLOJProblemService.java
│ │ │ │ │ ├── ImportQDUOJProblemService.java
│ │ │ │ │ ├── MarkDownFileService.java
│ │ │ │ │ ├── ProblemFileService.java
│ │ │ │ │ ├── TestCaseService.java
│ │ │ │ │ ├── UserFileService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── ContestFileServiceImpl.java
│ │ │ │ │ ├── ImageServiceImpl.java
│ │ │ │ │ ├── ImportDSOJProblemServiceImpl.java
│ │ │ │ │ ├── ImportFpsProblemServiceImpl.java
│ │ │ │ │ ├── ImportLOJProblemServiceImpl.java
│ │ │ │ │ ├── ImportQDUOJProblemServiceImpl.java
│ │ │ │ │ ├── MarkDownFileServiceImpl.java
│ │ │ │ │ ├── ProblemFileServiceImpl.java
│ │ │ │ │ ├── TestCaseServiceImpl.java
│ │ │ │ │ └── UserFileServiceImpl.java
│ │ │ │ ├── msg/
│ │ │ │ │ ├── AdminNoticeService.java
│ │ │ │ │ ├── NoticeService.java
│ │ │ │ │ ├── UserMessageService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── AdminNoticeServiceImpl.java
│ │ │ │ │ ├── NoticeServiceImpl.java
│ │ │ │ │ └── UserMessageServiceImpl.java
│ │ │ │ ├── oj/
│ │ │ │ │ ├── AccountService.java
│ │ │ │ │ ├── BeforeDispatchInitService.java
│ │ │ │ │ ├── CommentService.java
│ │ │ │ │ ├── CommonService.java
│ │ │ │ │ ├── ContestACMRankService.java
│ │ │ │ │ ├── ContestAdminService.java
│ │ │ │ │ ├── ContestOIRankService.java
│ │ │ │ │ ├── ContestScoreboardService.java
│ │ │ │ │ ├── ContestService.java
│ │ │ │ │ ├── DiscussionService.java
│ │ │ │ │ ├── HomeService.java
│ │ │ │ │ ├── JudgeService.java
│ │ │ │ │ ├── ProblemService.java
│ │ │ │ │ ├── RankService.java
│ │ │ │ │ ├── TrainingService.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── AccountServiceImpl.java
│ │ │ │ │ ├── CommentServiceImpl.java
│ │ │ │ │ ├── CommonServiceImpl.java
│ │ │ │ │ ├── ContestAdminServiceImpl.java
│ │ │ │ │ ├── ContestScoreboardServiceImpl.java
│ │ │ │ │ ├── ContestServiceImpl.java
│ │ │ │ │ ├── DiscussionServiceImpl.java
│ │ │ │ │ ├── HomeServiceImpl.java
│ │ │ │ │ ├── JudgeServiceImpl.java
│ │ │ │ │ ├── ProblemServiceImpl.java
│ │ │ │ │ ├── RankServiceImpl.java
│ │ │ │ │ └── TrainingServiceImpl.java
│ │ │ │ └── schedule/
│ │ │ │ └── ScheduleService.java
│ │ │ ├── shiro/
│ │ │ │ ├── AccountProfile.java
│ │ │ │ ├── AccountRealm.java
│ │ │ │ ├── JwtFilter.java
│ │ │ │ ├── JwtToken.java
│ │ │ │ └── UserSessionUtil.java
│ │ │ └── validator/
│ │ │ ├── AccessInterceptor.java
│ │ │ ├── AccessValidator.java
│ │ │ ├── ContestValidator.java
│ │ │ ├── JudgeValidator.java
│ │ │ └── TrainingValidator.java
│ │ └── resources/
│ │ ├── application.yml
│ │ ├── banner.txt
│ │ ├── email-rule.yml
│ │ ├── logback-spring.xml
│ │ └── templates/
│ │ ├── emailTemplate_registerCode.html
│ │ ├── emailTemplate_resetPassword.html
│ │ └── emailTemplate_testEmail.html
│ └── test/
│ └── java/
│ └── com/
│ └── simplefanc/
│ └── AppTest.java
├── voj-common/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── simplefanc/
│ └── voj/
│ └── common/
│ ├── constants/
│ │ ├── Constant.java
│ │ ├── ContestConstant.java
│ │ ├── ContestEnum.java
│ │ ├── JudgeCaseMode.java
│ │ ├── JudgeMode.java
│ │ ├── JudgeStatus.java
│ │ ├── ProblemEnum.java
│ │ ├── ProblemLevelEnum.java
│ │ ├── RedisConstant.java
│ │ └── RemoteOj.java
│ ├── pojo/
│ │ ├── dto/
│ │ │ ├── CompileDTO.java
│ │ │ └── JudgeDTO.java
│ │ └── entity/
│ │ ├── common/
│ │ │ ├── Announcement.java
│ │ │ └── File.java
│ │ ├── contest/
│ │ │ ├── Contest.java
│ │ │ ├── ContestAnnouncement.java
│ │ │ ├── ContestPrint.java
│ │ │ ├── ContestProblem.java
│ │ │ ├── ContestRecord.java
│ │ │ └── ContestRegister.java
│ │ ├── discussion/
│ │ │ ├── Comment.java
│ │ │ ├── CommentLike.java
│ │ │ ├── Discussion.java
│ │ │ ├── DiscussionLike.java
│ │ │ ├── DiscussionReport.java
│ │ │ └── Reply.java
│ │ ├── judge/
│ │ │ ├── Judge.java
│ │ │ ├── JudgeCase.java
│ │ │ ├── JudgeServer.java
│ │ │ └── RemoteJudgeAccount.java
│ │ ├── msg/
│ │ │ ├── AdminSysNotice.java
│ │ │ ├── MsgRemind.java
│ │ │ └── UserSysNotice.java
│ │ ├── problem/
│ │ │ ├── Category.java
│ │ │ ├── CodeTemplate.java
│ │ │ ├── Language.java
│ │ │ ├── Problem.java
│ │ │ ├── ProblemCase.java
│ │ │ ├── ProblemLanguage.java
│ │ │ ├── ProblemTag.java
│ │ │ ├── Tag.java
│ │ │ └── TagClassification.java
│ │ ├── training/
│ │ │ ├── MappingTrainingCategory.java
│ │ │ ├── Training.java
│ │ │ ├── TrainingCategory.java
│ │ │ ├── TrainingProblem.java
│ │ │ ├── TrainingRecord.java
│ │ │ └── TrainingRegister.java
│ │ └── user/
│ │ ├── Auth.java
│ │ ├── Role.java
│ │ ├── RoleAuth.java
│ │ ├── Session.java
│ │ ├── UserAcproblem.java
│ │ ├── UserInfo.java
│ │ └── UserRole.java
│ ├── result/
│ │ ├── CommonResult.java
│ │ └── ResultStatus.java
│ └── utils/
│ ├── CodeForcesAES.js
│ ├── CodeForcesUtils.java
│ ├── IpUtil.java
│ └── Tools.java
└── voj-judger/
├── pom.xml
└── src/
└── main/
├── java/
│ └── com/
│ └── simplefanc/
│ └── voj/
│ └── judger/
│ ├── JudgeServerApplication.java
│ ├── common/
│ │ ├── constants/
│ │ │ ├── CompileConfig.java
│ │ │ ├── Constants.java
│ │ │ ├── JudgeDir.java
│ │ │ ├── JudgeLanguage.java
│ │ │ ├── JudgeServerConstant.java
│ │ │ └── RunConfig.java
│ │ ├── exception/
│ │ │ ├── CompileException.java
│ │ │ ├── RuntimeException.java
│ │ │ ├── SubmitException.java
│ │ │ └── SystemException.java
│ │ └── utils/
│ │ ├── JudgeUtil.java
│ │ └── ThreadPoolUtil.java
│ ├── config/
│ │ ├── AsyncTaskConfig.java
│ │ ├── DruidConfiguration.java
│ │ ├── MyMetaObjectConfig.java
│ │ ├── MybatisPlusConfig.java
│ │ ├── NacosConfig.java
│ │ └── StartupRunner.java
│ ├── controller/
│ │ ├── JudgeController.java
│ │ └── SystemConfigController.java
│ ├── dao/
│ │ ├── ContestEntityService.java
│ │ ├── ContestRecordEntityService.java
│ │ ├── JudgeCaseEntityService.java
│ │ ├── JudgeEntityService.java
│ │ ├── JudgeServerEntityService.java
│ │ ├── ProblemCaseEntityService.java
│ │ ├── ProblemEntityService.java
│ │ ├── RemoteJudgeAccountEntityService.java
│ │ ├── UserAcproblemEntityService.java
│ │ └── impl/
│ │ ├── ContestEntityServiceImpl.java
│ │ ├── ContestRecordEntityServiceImpl.java
│ │ ├── JudgeCaseEntityServiceImpl.java
│ │ ├── JudgeEntityServiceImpl.java
│ │ ├── JudgeServerEntityServiceImpl.java
│ │ ├── ProblemCaseEntityServiceImpl.java
│ │ ├── ProblemEntityServiceImpl.java
│ │ ├── RemoteJudgeAccountEntityServiceImpl.java
│ │ └── UserAcproblemEntityServiceImpl.java
│ ├── judge/
│ │ ├── local/
│ │ │ ├── Compiler.java
│ │ │ ├── JudgeContext.java
│ │ │ ├── JudgeProcess.java
│ │ │ ├── JudgeRun.java
│ │ │ ├── ProblemTestCaseUtils.java
│ │ │ ├── SandboxRun.java
│ │ │ ├── pojo/
│ │ │ │ ├── CaseResult.java
│ │ │ │ ├── JudgeCaseDTO.java
│ │ │ │ ├── JudgeGlobalDTO.java
│ │ │ │ ├── JudgeResult.java
│ │ │ │ └── SandBoxRes.java
│ │ │ └── strategy/
│ │ │ ├── AbstractJudge.java
│ │ │ ├── DefaultJudge.java
│ │ │ ├── InteractiveJudge.java
│ │ │ └── SpecialJudge.java
│ │ └── remote/
│ │ ├── RemoteJudgeContext.java
│ │ ├── RemoteOjAware.java
│ │ ├── account/
│ │ │ ├── RemoteAccount.java
│ │ │ └── RemoteAccountRepository.java
│ │ ├── httpclient/
│ │ │ ├── AnonymousHttpContextRepository.java
│ │ │ ├── CookieUtil.java
│ │ │ ├── DedicatedHttpClient.java
│ │ │ ├── DedicatedHttpClientFactory.java
│ │ │ ├── HttpBodyValidator.java
│ │ │ ├── HttpClientUtil.java
│ │ │ ├── HttpStatusValidator.java
│ │ │ ├── Mapper.java
│ │ │ ├── SimpleHttpResponse.java
│ │ │ ├── SimpleHttpResponseMapper.java
│ │ │ ├── SimpleHttpResponseValidator.java
│ │ │ └── SimpleNameValueEntityFactory.java
│ │ ├── loginer/
│ │ │ ├── AbstractRetentiveLoginer.java
│ │ │ ├── Loginer.java
│ │ │ └── LoginersHolder.java
│ │ ├── pojo/
│ │ │ ├── RemoteOjInfo.java
│ │ │ ├── SubmissionInfo.java
│ │ │ └── SubmissionRemoteStatus.java
│ │ ├── provider/
│ │ │ ├── atcoder/
│ │ │ │ ├── AtCoderInfo.java
│ │ │ │ ├── AtCoderLoginer.java
│ │ │ │ ├── AtCoderQuerier.java
│ │ │ │ └── AtCoderSubmitter.java
│ │ │ ├── codeforcesgym/
│ │ │ │ ├── GYMInfo.java
│ │ │ │ ├── GYMLoginer.java
│ │ │ │ ├── GYMQuerier.java
│ │ │ │ └── GYMSubmitter.java
│ │ │ ├── codefores/
│ │ │ │ ├── CFInfo.java
│ │ │ │ ├── CFLoginer.java
│ │ │ │ ├── CFQuerier.java
│ │ │ │ └── CFSubmitter.java
│ │ │ ├── eoj/
│ │ │ │ ├── EojInfo.java
│ │ │ │ └── EojLoginer.java
│ │ │ ├── hdu/
│ │ │ │ ├── HDUInfo.java
│ │ │ │ ├── HDULoginer.java
│ │ │ │ ├── HDUQuerier.java
│ │ │ │ └── HDUSubmitter.java
│ │ │ ├── jsk/
│ │ │ │ ├── JSKInfo.java
│ │ │ │ ├── JSKLoginer.java
│ │ │ │ ├── JSKQuerier.java
│ │ │ │ └── JSKSubmitter.java
│ │ │ ├── mxt/
│ │ │ │ ├── MXTCaptchaRecognizer.java
│ │ │ │ ├── MXTInfo.java
│ │ │ │ ├── MXTLoginer.java
│ │ │ │ ├── MXTQuerier.java
│ │ │ │ ├── MXTSubmitter.java
│ │ │ │ └── RsaUtil.java
│ │ │ ├── poj/
│ │ │ │ ├── POJInfo.java
│ │ │ │ ├── POJLoginer.java
│ │ │ │ ├── POJQuerier.java
│ │ │ │ └── POJSubmitter.java
│ │ │ ├── shared/
│ │ │ │ └── codeforces/
│ │ │ │ ├── AbstractCFStyleLoginer.java
│ │ │ │ ├── AbstractCFStyleQuerier.java
│ │ │ │ ├── AbstractCFStyleSubmitter.java
│ │ │ │ └── CFUtil.java
│ │ │ └── tkoj/
│ │ │ ├── TKOJCaptchaRecognizer.java
│ │ │ ├── TKOJInfo.java
│ │ │ ├── TKOJLoginer.java
│ │ │ ├── TKOJQuerier.java
│ │ │ ├── TKOJSubmitter.java
│ │ │ └── TKOJVerifyUtil.java
│ │ ├── querier/
│ │ │ ├── Querier.java
│ │ │ ├── QueriersHolder.java
│ │ │ └── RemoteJudgeQuerier.java
│ │ └── submitter/
│ │ ├── RemoteJudgeSubmitter.java
│ │ ├── Submitter.java
│ │ └── SubmittersHolder.java
│ ├── mapper/
│ │ ├── ContestMapper.java
│ │ ├── ContestRecordMapper.java
│ │ ├── JudgeCaseMapper.java
│ │ ├── JudgeMapper.java
│ │ ├── JudgeServerMapper.java
│ │ ├── ProblemCaseMapper.java
│ │ ├── ProblemMapper.java
│ │ ├── RemoteJudgeAccountMapper.java
│ │ ├── UserAcproblemMapper.java
│ │ └── UserRecordMapper.java
│ └── service/
│ ├── JudgeService.java
│ ├── SystemConfigService.java
│ └── impl/
│ ├── JudgeServiceImpl.java
│ └── SystemConfigServiceImpl.java
└── resources/
├── application.yml
├── banner.txt
└── logback-spring.xml
Showing preview only (229K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2252 symbols across 600 files)
FILE: voj-backend/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java
class DruidAbstractDataSource (line 41) | public abstract class DruidAbstractDataSource extends WrapperAdapter
method DruidAbstractDataSource (line 382) | public DruidAbstractDataSource(boolean lockFair) {
method isUseLocalSessionState (line 469) | public boolean isUseLocalSessionState() {
method setUseLocalSessionState (line 473) | public void setUseLocalSessionState(boolean useLocalSessionState) {
method getStatLogger (line 477) | public DruidDataSourceStatLogger getStatLogger() {
method setStatLogger (line 481) | public void setStatLogger(DruidDataSourceStatLogger statLogger) {
method setStatLoggerClassName (line 485) | public void setStatLoggerClassName(String className) {
method getTimeBetweenLogStatsMillis (line 495) | public long getTimeBetweenLogStatsMillis() {
method setTimeBetweenLogStatsMillis (line 499) | public void setTimeBetweenLogStatsMillis(long timeBetweenLogStatsMilli...
method isOracle (line 503) | public boolean isOracle() {
method setOracle (line 507) | public void setOracle(boolean isOracle) {
method isUseUnfairLock (line 515) | public boolean isUseUnfairLock() {
method setUseUnfairLock (line 519) | public void setUseUnfairLock(boolean useUnfairLock) {
method isUseOracleImplicitCache (line 540) | public boolean isUseOracleImplicitCache() {
method setUseOracleImplicitCache (line 544) | public void setUseOracleImplicitCache(boolean useOracleImplicitCache) {
method getLastCreateError (line 557) | public Throwable getLastCreateError() {
method getLastError (line 561) | public Throwable getLastError() {
method getLastErrorTimeMillis (line 565) | public long getLastErrorTimeMillis() {
method getLastErrorTime (line 569) | public Date getLastErrorTime() {
method getLastCreateErrorTimeMillis (line 573) | public long getLastCreateErrorTimeMillis() {
method getLastCreateErrorTime (line 577) | public Date getLastCreateErrorTime() {
method getTransactionQueryTimeout (line 581) | public int getTransactionQueryTimeout() {
method setTransactionQueryTimeout (line 585) | public void setTransactionQueryTimeout(int transactionQueryTimeout) {
method getExecuteCount (line 589) | public long getExecuteCount() {
method getExecuteUpdateCount (line 593) | public long getExecuteUpdateCount() {
method getExecuteQueryCount (line 597) | public long getExecuteQueryCount() {
method getExecuteBatchCount (line 601) | public long getExecuteBatchCount() {
method getAndResetExecuteCount (line 605) | public long getAndResetExecuteCount() {
method getExecuteCount2 (line 610) | public long getExecuteCount2() {
method incrementExecuteCount (line 614) | public void incrementExecuteCount() {
method incrementExecuteUpdateCount (line 618) | public void incrementExecuteUpdateCount() {
method incrementExecuteQueryCount (line 622) | public void incrementExecuteQueryCount() {
method incrementExecuteBatchCount (line 626) | public void incrementExecuteBatchCount() {
method isDupCloseLogEnable (line 630) | public boolean isDupCloseLogEnable() {
method setDupCloseLogEnable (line 634) | public void setDupCloseLogEnable(boolean dupCloseLogEnable) {
method getObjectName (line 638) | public ObjectName getObjectName() {
method setObjectName (line 642) | public void setObjectName(ObjectName objectName) {
method getTransactionHistogram (line 646) | public Histogram getTransactionHistogram() {
method incrementCachedPreparedStatementCount (line 650) | public void incrementCachedPreparedStatementCount() {
method decrementCachedPreparedStatementCount (line 654) | public void decrementCachedPreparedStatementCount() {
method incrementCachedPreparedStatementDeleteCount (line 658) | public void incrementCachedPreparedStatementDeleteCount() {
method incrementCachedPreparedStatementMissCount (line 662) | public void incrementCachedPreparedStatementMissCount() {
method getCachedPreparedStatementMissCount (line 666) | public long getCachedPreparedStatementMissCount() {
method getCachedPreparedStatementAccessCount (line 670) | public long getCachedPreparedStatementAccessCount() {
method getCachedPreparedStatementDeleteCount (line 674) | public long getCachedPreparedStatementDeleteCount() {
method getCachedPreparedStatementCount (line 678) | public long getCachedPreparedStatementCount() {
method incrementClosedPreparedStatementCount (line 682) | public void incrementClosedPreparedStatementCount() {
method getClosedPreparedStatementCount (line 686) | public long getClosedPreparedStatementCount() {
method incrementPreparedStatementCount (line 690) | public void incrementPreparedStatementCount() {
method getPreparedStatementCount (line 694) | public long getPreparedStatementCount() {
method incrementCachedPreparedStatementHitCount (line 698) | public void incrementCachedPreparedStatementHitCount() {
method getCachedPreparedStatementHitCount (line 702) | public long getCachedPreparedStatementHitCount() {
method getTransactionThresholdMillis (line 706) | public long getTransactionThresholdMillis() {
method setTransactionThresholdMillis (line 710) | public void setTransactionThresholdMillis(long transactionThresholdMil...
method logTransaction (line 714) | public abstract void logTransaction(TransactionInfo var1);
method getTransactionHistogramValues (line 716) | public long[] getTransactionHistogramValues() {
method getTransactionHistogramRanges (line 720) | public long[] getTransactionHistogramRanges() {
method getCommitCount (line 724) | public long getCommitCount() {
method incrementCommitCount (line 728) | public void incrementCommitCount() {
method getRollbackCount (line 732) | public long getRollbackCount() {
method incrementRollbackCount (line 736) | public void incrementRollbackCount() {
method getStartTransactionCount (line 740) | public long getStartTransactionCount() {
method incrementStartTransactionCount (line 744) | public void incrementStartTransactionCount() {
method isBreakAfterAcquireFailure (line 748) | public boolean isBreakAfterAcquireFailure() {
method setBreakAfterAcquireFailure (line 752) | public void setBreakAfterAcquireFailure(boolean breakAfterAcquireFailu...
method getConnectionErrorRetryAttempts (line 756) | public int getConnectionErrorRetryAttempts() {
method setConnectionErrorRetryAttempts (line 760) | public void setConnectionErrorRetryAttempts(int connectionErrorRetryAt...
method getDupCloseCount (line 764) | public long getDupCloseCount() {
method getMaxPoolPreparedStatementPerConnectionSize (line 768) | public int getMaxPoolPreparedStatementPerConnectionSize() {
method setMaxPoolPreparedStatementPerConnectionSize (line 772) | public void setMaxPoolPreparedStatementPerConnectionSize(int maxPoolPr...
method isSharePreparedStatements (line 782) | public boolean isSharePreparedStatements() {
method setSharePreparedStatements (line 786) | public void setSharePreparedStatements(boolean sharePreparedStatements) {
method incrementDupCloseCount (line 790) | public void incrementDupCloseCount() {
method getValidConnectionChecker (line 794) | public ValidConnectionChecker getValidConnectionChecker() {
method setValidConnectionChecker (line 798) | public void setValidConnectionChecker(ValidConnectionChecker validConn...
method getValidConnectionCheckerClassName (line 802) | public String getValidConnectionCheckerClassName() {
method setValidConnectionCheckerClassName (line 806) | public void setValidConnectionCheckerClassName(String validConnectionC...
method getDbType (line 818) | public String getDbType() {
method setDbType (line 822) | public void setDbType(String dbType) {
method addConnectionProperty (line 826) | public void addConnectionProperty(String name, String value) {
method getConnectionInitSqls (line 836) | public Collection<String> getConnectionInitSqls() {
method setConnectionInitSqls (line 841) | public void setConnectionInitSqls(Collection<? extends Object> connect...
method getTimeBetweenConnectErrorMillis (line 868) | public long getTimeBetweenConnectErrorMillis() {
method setTimeBetweenConnectErrorMillis (line 872) | public void setTimeBetweenConnectErrorMillis(long timeBetweenConnectEr...
method getMaxOpenPreparedStatements (line 876) | public int getMaxOpenPreparedStatements() {
method setMaxOpenPreparedStatements (line 880) | public void setMaxOpenPreparedStatements(int maxOpenPreparedStatements) {
method isLogAbandoned (line 884) | public boolean isLogAbandoned() {
method setLogAbandoned (line 888) | public void setLogAbandoned(boolean logAbandoned) {
method getRemoveAbandonedTimeout (line 892) | public int getRemoveAbandonedTimeout() {
method setRemoveAbandonedTimeout (line 896) | public void setRemoveAbandonedTimeout(int removeAbandonedTimeout) {
method getRemoveAbandonedTimeoutMillis (line 900) | public long getRemoveAbandonedTimeoutMillis() {
method setRemoveAbandonedTimeoutMillis (line 904) | public void setRemoveAbandonedTimeoutMillis(long removeAbandonedTimeou...
method isRemoveAbandoned (line 908) | public boolean isRemoveAbandoned() {
method setRemoveAbandoned (line 912) | public void setRemoveAbandoned(boolean removeAbandoned) {
method getMinEvictableIdleTimeMillis (line 916) | public long getMinEvictableIdleTimeMillis() {
method setMinEvictableIdleTimeMillis (line 920) | public void setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMil...
method getKeepAliveBetweenTimeMillis (line 928) | public long getKeepAliveBetweenTimeMillis() {
method setKeepAliveBetweenTimeMillis (line 932) | public void setKeepAliveBetweenTimeMillis(long keepAliveBetweenTimeMil...
method getMaxEvictableIdleTimeMillis (line 940) | public long getMaxEvictableIdleTimeMillis() {
method setMaxEvictableIdleTimeMillis (line 944) | public void setMaxEvictableIdleTimeMillis(long maxEvictableIdleTimeMil...
method getPhyTimeoutMillis (line 957) | public long getPhyTimeoutMillis() {
method setPhyTimeoutMillis (line 961) | public void setPhyTimeoutMillis(long phyTimeoutMillis) {
method getPhyMaxUseCount (line 965) | public long getPhyMaxUseCount() {
method setPhyMaxUseCount (line 969) | public void setPhyMaxUseCount(long phyMaxUseCount) {
method getNumTestsPerEvictionRun (line 973) | public int getNumTestsPerEvictionRun() {
method setNumTestsPerEvictionRun (line 980) | @Deprecated
method getTimeBetweenEvictionRunsMillis (line 985) | public long getTimeBetweenEvictionRunsMillis() {
method setTimeBetweenEvictionRunsMillis (line 989) | public void setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionR...
method getMaxWaitThreadCount (line 993) | public int getMaxWaitThreadCount() {
method setMaxWaitThreadCount (line 997) | public void setMaxWaitThreadCount(int maxWaithThreadCount) {
method getValidationQuery (line 1001) | public String getValidationQuery() {
method setValidationQuery (line 1005) | public void setValidationQuery(String validationQuery) {
method getValidationQueryTimeout (line 1009) | public int getValidationQueryTimeout() {
method setValidationQueryTimeout (line 1013) | public void setValidationQueryTimeout(int validationQueryTimeout) {
method isAccessToUnderlyingConnectionAllowed (line 1021) | public boolean isAccessToUnderlyingConnectionAllowed() {
method setAccessToUnderlyingConnectionAllowed (line 1025) | public void setAccessToUnderlyingConnectionAllowed(boolean accessToUnd...
method isTestOnBorrow (line 1029) | public boolean isTestOnBorrow() {
method setTestOnBorrow (line 1033) | public void setTestOnBorrow(boolean testOnBorrow) {
method isTestOnReturn (line 1037) | public boolean isTestOnReturn() {
method setTestOnReturn (line 1041) | public void setTestOnReturn(boolean testOnReturn) {
method isTestWhileIdle (line 1045) | public boolean isTestWhileIdle() {
method setTestWhileIdle (line 1049) | public void setTestWhileIdle(boolean testWhileIdle) {
method isDefaultAutoCommit (line 1053) | public boolean isDefaultAutoCommit() {
method setDefaultAutoCommit (line 1057) | public void setDefaultAutoCommit(boolean defaultAutoCommit) {
method getDefaultReadOnly (line 1061) | public Boolean getDefaultReadOnly() {
method setDefaultReadOnly (line 1065) | public void setDefaultReadOnly(Boolean defaultReadOnly) {
method getDefaultTransactionIsolation (line 1069) | public Integer getDefaultTransactionIsolation() {
method setDefaultTransactionIsolation (line 1073) | public void setDefaultTransactionIsolation(Integer defaultTransactionI...
method getDefaultCatalog (line 1077) | public String getDefaultCatalog() {
method setDefaultCatalog (line 1081) | public void setDefaultCatalog(String defaultCatalog) {
method getPasswordCallback (line 1085) | public PasswordCallback getPasswordCallback() {
method setPasswordCallback (line 1089) | public void setPasswordCallback(PasswordCallback passwordCallback) {
method setPasswordCallbackClassName (line 1093) | public void setPasswordCallbackClassName(String passwordCallbackClassN...
method getUserCallback (line 1104) | public NameCallback getUserCallback() {
method setUserCallback (line 1108) | public void setUserCallback(NameCallback userCallback) {
method isInitVariants (line 1112) | public boolean isInitVariants() {
method setInitVariants (line 1116) | public void setInitVariants(boolean initVariants) {
method isInitGlobalVariants (line 1120) | public boolean isInitGlobalVariants() {
method setInitGlobalVariants (line 1124) | public void setInitGlobalVariants(boolean initGlobalVariants) {
method getQueryTimeout (line 1128) | public int getQueryTimeout() {
method setQueryTimeout (line 1132) | public void setQueryTimeout(int seconds) {
method getName (line 1136) | public String getName() {
method setName (line 1140) | public void setName(String name) {
method isPoolPreparedStatements (line 1144) | public boolean isPoolPreparedStatements() {
method setPoolPreparedStatements (line 1148) | public abstract void setPoolPreparedStatements(boolean var1);
method getMaxWait (line 1150) | public long getMaxWait() {
method setMaxWait (line 1154) | public void setMaxWait(long maxWaitMillis) {
method getNotFullTimeoutRetryCount (line 1179) | public int getNotFullTimeoutRetryCount() {
method setNotFullTimeoutRetryCount (line 1183) | public void setNotFullTimeoutRetryCount(int notFullTimeoutRetryCount) {
method getMinIdle (line 1187) | public int getMinIdle() {
method setMinIdle (line 1191) | public void setMinIdle(int value) {
method getMaxIdle (line 1204) | public int getMaxIdle() {
method setMaxIdle (line 1211) | @Deprecated
method getInitialSize (line 1217) | public int getInitialSize() {
method setInitialSize (line 1221) | public void setInitialSize(int initialSize) {
method getCreateErrorCount (line 1231) | public long getCreateErrorCount() {
method getMaxActive (line 1235) | public int getMaxActive() {
method setMaxActive (line 1239) | public abstract void setMaxActive(int var1);
method getUsername (line 1241) | public String getUsername() {
method setUsername (line 1245) | public void setUsername(String username) {
method getPassword (line 1255) | public String getPassword() {
method setPassword (line 1259) | public void setPassword(String password) {
method getConnectProperties (line 1269) | public Properties getConnectProperties() {
method setConnectProperties (line 1273) | public abstract void setConnectProperties(Properties var1);
method setConnectionProperties (line 1275) | public void setConnectionProperties(String connectionProperties) {
method getUrl (line 1300) | public String getUrl() {
method setUrl (line 1304) | public void setUrl(String jdbcUrl) {
method getRawJdbcUrl (line 1318) | public String getRawJdbcUrl() {
method getDriverClassName (line 1322) | public String getDriverClassName() {
method setDriverClassName (line 1326) | public void setDriverClassName(String driverClass) {
method getDriverClassLoader (line 1345) | public ClassLoader getDriverClassLoader() {
method setDriverClassLoader (line 1349) | public void setDriverClassLoader(ClassLoader driverClassLoader) {
method getLogWriter (line 1353) | public PrintWriter getLogWriter() {
method setLogWriter (line 1357) | public void setLogWriter(PrintWriter out) throws SQLException {
method getLoginTimeout (line 1361) | public int getLoginTimeout() {
method setLoginTimeout (line 1365) | public void setLoginTimeout(int seconds) {
method getDriver (line 1369) | public Driver getDriver() {
method setDriver (line 1373) | public void setDriver(Driver driver) {
method getDriverMajorVersion (line 1377) | public int getDriverMajorVersion() {
method getDriverMinorVersion (line 1381) | public int getDriverMinorVersion() {
method getExceptionSorter (line 1385) | public ExceptionSorter getExceptionSorter() {
method setExceptionSorter (line 1389) | public void setExceptionSorter(ExceptionSorter exceptionSoter) {
method setExceptionSorter (line 1393) | public void setExceptionSorter(String exceptionSorter) throws SQLExcep...
method getExceptionSorterClassName (line 1416) | public String getExceptionSorterClassName() {
method setExceptionSorterClassName (line 1420) | public void setExceptionSorterClassName(String exceptionSorter) throws...
method getProxyFilters (line 1424) | public List<Filter> getProxyFilters() {
method setProxyFilters (line 1428) | public void setProxyFilters(List<Filter> filters) {
method getFilterClasses (line 1435) | public String[] getFilterClasses() {
method setFilters (line 1448) | public void setFilters(String filters) throws SQLException {
method addFilters (line 1457) | public void addFilters(String filters) throws SQLException {
method clearFilters (line 1471) | public void clearFilters() {
method validateConnection (line 1477) | public void validateConnection(Connection conn) throws SQLException {
method testConnectionInternal (line 1549) | protected boolean testConnectionInternal(Connection conn) {
method testConnectionInternal (line 1553) | protected boolean testConnectionInternal(DruidConnectionHolder holder,...
method getActiveConnections (line 1663) | public Set<DruidPooledConnection> getActiveConnections() {
method getActiveConnectionStackTrace (line 1676) | public List<String> getActiveConnectionStackTrace() {
method getCreateTimespanNano (line 1688) | public long getCreateTimespanNano() {
method getCreateTimespanMillis (line 1692) | public long getCreateTimespanMillis() {
method getRawDriver (line 1696) | public Driver getRawDriver() {
method isClearFiltersEnable (line 1700) | public boolean isClearFiltersEnable() {
method setClearFiltersEnable (line 1704) | public void setClearFiltersEnable(boolean clearFiltersEnable) {
method createConnectionId (line 1708) | public long createConnectionId() {
method createStatementId (line 1712) | public long createStatementId() {
method createMetaDataId (line 1716) | public long createMetaDataId() {
method createResultSetId (line 1720) | public long createResultSetId() {
method createTransactionId (line 1724) | public long createTransactionId() {
method initStatement (line 1728) | void initStatement(DruidPooledConnection conn, Statement stmt) throws ...
method handleConnectionException (line 1737) | public void handleConnectionException(DruidPooledConnection conn, Thro...
method handleConnectionException (line 1741) | public abstract void handleConnectionException(DruidPooledConnection v...
method recycle (line 1744) | protected abstract void recycle(DruidPooledConnection var1) throws SQL...
method createPhysicalConnection (line 1746) | public Connection createPhysicalConnection(String url, Properties info...
method createPhysicalConnection (line 1758) | public DruidAbstractDataSource.PhysicalConnectionInfo createPhysicalCo...
method setCreateError (line 1850) | protected void setCreateError(Throwable ex) {
method isFailContinuous (line 1878) | public boolean isFailContinuous() {
method setFailContinuous (line 1882) | protected void setFailContinuous(boolean fail) {
method initPhysicalConnection (line 1906) | public void initPhysicalConnection(Connection conn) throws SQLException {
method initPhysicalConnection (line 1910) | public void initPhysicalConnection(Connection conn, Map<String, Object...
method getActivePeak (line 1987) | public abstract int getActivePeak();
method getCompositeData (line 1989) | public CompositeDataSupport getCompositeData() throws JMException {
method getID (line 2064) | public long getID() {
method getCreatedTime (line 2068) | public Date getCreatedTime() {
method getRawDriverMajorVersion (line 2072) | public abstract int getRawDriverMajorVersion();
method getRawDriverMinorVersion (line 2074) | public abstract int getRawDriverMinorVersion();
method getProperties (line 2076) | public abstract String getProperties();
method getParentLogger (line 2078) | public Logger getParentLogger() throws SQLFeatureNotSupportedException {
method closePreapredStatement (line 2082) | public void closePreapredStatement(PreparedStatementHolder stmtHolder) {
method cloneTo (line 2091) | protected void cloneTo(DruidAbstractDataSource to) {
method discardConnection (line 2152) | public abstract void discardConnection(Connection var1);
method isAsyncCloseConnectionEnable (line 2154) | public boolean isAsyncCloseConnectionEnable() {
method setAsyncCloseConnectionEnable (line 2158) | public void setAsyncCloseConnectionEnable(boolean asyncCloseConnection...
method getCreateScheduler (line 2162) | public ScheduledExecutorService getCreateScheduler() {
method setCreateScheduler (line 2166) | public void setCreateScheduler(ScheduledExecutorService createSchedule...
method getDestroyScheduler (line 2174) | public ScheduledExecutorService getDestroyScheduler() {
method setDestroyScheduler (line 2178) | public void setDestroyScheduler(ScheduledExecutorService destroySchedu...
method isInited (line 2186) | public boolean isInited() {
method getMaxCreateTaskCount (line 2190) | public int getMaxCreateTaskCount() {
method setMaxCreateTaskCount (line 2194) | public void setMaxCreateTaskCount(int maxCreateTaskCount) {
method isFailFast (line 2202) | public boolean isFailFast() {
method setFailFast (line 2206) | public void setFailFast(boolean failFast) {
method getOnFatalErrorMaxActive (line 2210) | public int getOnFatalErrorMaxActive() {
method setOnFatalErrorMaxActive (line 2214) | public void setOnFatalErrorMaxActive(int onFatalErrorMaxActive) {
method isOnFatalError (line 2218) | public boolean isOnFatalError() {
method isInitExceptionThrow (line 2222) | public boolean isInitExceptionThrow() {
method setInitExceptionThrow (line 2226) | public void setInitExceptionThrow(boolean initExceptionThrow) {
class PhysicalConnectionInfo (line 2230) | public static class PhysicalConnectionInfo {
method PhysicalConnectionInfo (line 2248) | public PhysicalConnectionInfo(Connection connection, long connectSta...
method PhysicalConnectionInfo (line 2253) | public PhysicalConnectionInfo(Connection connection, long connectSta...
method getPhysicalConnection (line 2265) | public Connection getPhysicalConnection() {
method getConnectStartNanos (line 2269) | public long getConnectStartNanos() {
method getConnectedNanos (line 2273) | public long getConnectedNanos() {
method getInitedNanos (line 2277) | public long getInitedNanos() {
method getValidatedNanos (line 2281) | public long getValidatedNanos() {
method getConnectNanoSpan (line 2285) | public long getConnectNanoSpan() {
method getVairiables (line 2289) | public Map<String, Object> getVairiables() {
method getGlobalVairiables (line 2293) | public Map<String, Object> getGlobalVairiables() {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/BackendApplication.java
class BackendApplication (line 17) | @EnableRetry
method main (line 26) | public static void main(String[] args) {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/cache/CacheTypeManager.java
class CacheTypeManager (line 13) | public class CacheTypeManager {
class CacheType (line 24) | @AllArgsConstructor
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/cache/DoubleCache.java
class DoubleCache (line 21) | @Slf4j
method DoubleCache (line 28) | protected DoubleCache(boolean allowNullValues) {
method DoubleCache (line 32) | public DoubleCache(String cacheName, RedisTemplate<Object, Object> red...
method lookup (line 47) | @Override
method get (line 74) | @Override
method put (line 101) | @Override
method evict (line 136) | @Override
method clear (line 145) | @Override
method getName (line 159) | @Override
method getNativeCache (line 168) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/cache/DoubleCacheManager.java
class DoubleCacheManager (line 21) | public class DoubleCacheManager implements CacheManager {
method DoubleCacheManager (line 26) | public DoubleCacheManager(RedisTemplate<Object, Object> redisTemplate,
method getCache (line 37) | @Override
method getCacheNames (line 53) | @Override
method createCaffeineCache (line 62) | private com.github.benmanes.caffeine.cache.Cache<Object, Object> creat...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/AccessEnum.java
type AccessEnum (line 7) | public enum AccessEnum {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/CallJudgerType.java
type CallJudgerType (line 6) | public enum CallJudgerType {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/Constant.java
type Constant (line 7) | public interface Constant {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/EmailConstant.java
type EmailConstant (line 7) | public interface EmailConstant {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/FileConstant.java
type FileConstant (line 7) | public interface FileConstant {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/FileTypeEnum.java
type FileTypeEnum (line 10) | @Getter
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/QueueConstant.java
type QueueConstant (line 8) | public interface QueueConstant {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/RoleEnum.java
type RoleEnum (line 6) | @Getter
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/ScheduleConstant.java
type ScheduleConstant (line 7) | public interface ScheduleConstant {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/TrainingEnum.java
type TrainingEnum (line 10) | @Getter
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/UserStatusEnum.java
type UserStatusEnum (line 10) | @Getter
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/common/exception/StatusAccessDeniedException.java
class StatusAccessDeniedException (line 8) | public class StatusAccessDeniedException extends RuntimeException {
method StatusAccessDeniedException (line 10) | public StatusAccessDeniedException() {
method StatusAccessDeniedException (line 13) | public StatusAccessDeniedException(String message) {
method StatusAccessDeniedException (line 17) | public StatusAccessDeniedException(String message, Throwable cause) {
method StatusAccessDeniedException (line 21) | public StatusAccessDeniedException(Throwable cause) {
method StatusAccessDeniedException (line 25) | public StatusAccessDeniedException(String message, Throwable cause, bo...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/common/exception/StatusFailException.java
class StatusFailException (line 8) | public class StatusFailException extends RuntimeException {
method StatusFailException (line 10) | public StatusFailException() {
method StatusFailException (line 13) | public StatusFailException(String message) {
method StatusFailException (line 17) | public StatusFailException(String message, Throwable cause) {
method StatusFailException (line 21) | public StatusFailException(Throwable cause) {
method StatusFailException (line 25) | public StatusFailException(String message, Throwable cause, boolean en...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/common/exception/StatusForbiddenException.java
class StatusForbiddenException (line 8) | public class StatusForbiddenException extends RuntimeException {
method StatusForbiddenException (line 10) | public StatusForbiddenException() {
method StatusForbiddenException (line 13) | public StatusForbiddenException(String message) {
method StatusForbiddenException (line 17) | public StatusForbiddenException(String message, Throwable cause) {
method StatusForbiddenException (line 21) | public StatusForbiddenException(Throwable cause) {
method StatusForbiddenException (line 25) | public StatusForbiddenException(String message, Throwable cause, boole...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/common/exception/StatusNotFoundException.java
class StatusNotFoundException (line 8) | public class StatusNotFoundException extends RuntimeException {
method StatusNotFoundException (line 10) | public StatusNotFoundException() {
method StatusNotFoundException (line 13) | public StatusNotFoundException(String message) {
method StatusNotFoundException (line 17) | public StatusNotFoundException(String message, Throwable cause) {
method StatusNotFoundException (line 21) | public StatusNotFoundException(Throwable cause) {
method StatusNotFoundException (line 25) | public StatusNotFoundException(String message, Throwable cause, boolea...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/common/exception/StatusSystemErrorException.java
class StatusSystemErrorException (line 8) | public class StatusSystemErrorException extends RuntimeException {
method StatusSystemErrorException (line 10) | public StatusSystemErrorException() {
method StatusSystemErrorException (line 13) | public StatusSystemErrorException(String message) {
method StatusSystemErrorException (line 17) | public StatusSystemErrorException(String message, Throwable cause) {
method StatusSystemErrorException (line 21) | public StatusSystemErrorException(Throwable cause) {
method StatusSystemErrorException (line 25) | public StatusSystemErrorException(String message, Throwable cause, boo...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/common/exception/advice/GlobalExceptionAdvice.java
class GlobalExceptionAdvice (line 43) | @Slf4j(topic = "voj")
method getMessage (line 50) | public static String getMessage(Exception e) {
method handleCustomException (line 67) | @ResponseStatus(HttpStatus.BAD_REQUEST)
method handleAuthenticationException (line 77) | @ResponseStatus(HttpStatus.UNAUTHORIZED)
method handleUnauthenticatedException (line 90) | @ResponseStatus(HttpStatus.UNAUTHORIZED)
method handleAuthenticationException (line 102) | @ResponseStatus(HttpStatus.FORBIDDEN)
method handleShiroException (line 114) | @ResponseStatus(HttpStatus.FORBIDDEN)
method handler (line 126) | @ResponseStatus(HttpStatus.BAD_REQUEST)
method handlerMethodArgumentNotValidException (line 135) | @ResponseStatus(HttpStatus.BAD_REQUEST)
method handleMissingServletRequestParameterException (line 146) | @ResponseStatus(HttpStatus.BAD_REQUEST)
method handleHttpMessageNotReadableException (line 156) | @ResponseStatus(HttpStatus.BAD_REQUEST)
method handleBindException (line 165) | @ResponseStatus(HttpStatus.BAD_REQUEST)
method handleServiceException (line 179) | @ResponseStatus(HttpStatus.BAD_REQUEST)
method handleValidationException (line 191) | @ResponseStatus(HttpStatus.BAD_REQUEST)
method handleHttpRequestMethodNotSupportedException (line 201) | @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)
method handleHttpMediaTypeNotSupportedException (line 210) | @ResponseStatus(HttpStatus.UNSUPPORTED_MEDIA_TYPE)
method handler (line 219) | @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
method handleServiceException (line 229) | @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
method handleDataIntegrityViolationException (line 239) | @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
method handleSQLException (line 249) | @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
method handleBatchUpdateException (line 260) | @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
method handleException (line 270) | @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/common/utils/ConfigUtil.java
class ConfigUtil (line 12) | @Component
method getConfigContent (line 18) | public String getConfigContent() {
method buildYamlStr (line 22) | public String buildYamlStr(ConfigVO configVO) {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/common/utils/ExcelUtil.java
class ExcelUtil (line 14) | @UtilityClass
method wrapExcelResponse (line 16) | public void wrapExcelResponse(HttpServletResponse response, String fil...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/common/utils/JwtUtil.java
class JwtUtil (line 13) | @Slf4j(topic = "voj")
method generateToken (line 34) | public String generateToken(String userId) {
method getClaimByToken (line 46) | public String getClaimByToken(String token) {
method verifyToken (line 55) | public boolean verifyToken(String token) {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/common/utils/MyFileUtil.java
class MyFileUtil (line 23) | @Slf4j
method getFileSuffix (line 26) | public String getFileSuffix(MultipartFile file){
method download (line 30) | public void download(HttpServletResponse response, String filePath, St...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/common/utils/RedisUtil.java
class RedisUtil (line 23) | @Component
method getLock (line 32) | public boolean getLock(String lockName, int expireTime) {
method releaseLock (line 51) | public boolean releaseLock(String lockName) {
method expire (line 62) | public boolean expire(String key, long time) {
method getExpire (line 80) | public long getExpire(String key) {
method hasKey (line 90) | public boolean hasKey(String key) {
method del (line 104) | @SuppressWarnings("unchecked")
method get (line 123) | public Object get(String key) {
method get (line 127) | public <T> T get(String key, Class<? extends T> clazz) {
method set (line 139) | public boolean set(String key, Object value) {
method set (line 158) | public boolean set(String key, Object value, long time) {
method incr (line 178) | public long incr(String key, long delta) {
method decr (line 191) | public long decr(String key, long delta) {
method hget (line 206) | public Object hget(String key, String item) {
method hmget (line 216) | public Map<Object, Object> hmget(String key) {
method hmset (line 226) | public boolean hmset(String key, Map<String, Object> map) {
method hmset (line 244) | public boolean hmset(String key, Map<String, Object> map, long time) {
method hset (line 265) | public boolean hset(String key, String item, Object value) {
method hset (line 284) | public boolean hset(String key, String item, Object value, long time) {
method hdel (line 303) | public void hdel(String key, Object... item) {
method hHasKey (line 314) | public boolean hHasKey(String key, String item) {
method hincr (line 325) | public double hincr(String key, String item, double by) {
method hdecr (line 336) | public double hdecr(String key, String item, double by) {
method sGet (line 347) | public Set<Object> sGet(String key) {
method sHasKey (line 363) | public boolean sHasKey(String key, Object value) {
method sSet (line 379) | public long sSet(String key, Object... values) {
method sSetAndTime (line 396) | public long sSetAndTime(String key, long time, Object... values) {
method sGetSetSize (line 414) | public long sGetSetSize(String key) {
method setRemove (line 431) | public long setRemove(String key, Object... values) {
method lGet (line 450) | public List<Object> lGet(String key, long start, long end) {
method lGetListSize (line 464) | public long lGetListSize(String key) {
method lGetIndex (line 479) | public Object lGetIndex(String key, long index) {
method lrPush (line 494) | public boolean lrPush(String key, Object value) {
method llPush (line 510) | public boolean llPush(String key, Object value) {
method lrPush (line 527) | public boolean lrPush(String key, Object value, long time) {
method lrPush (line 548) | public boolean lrPush(String key, List<Object> value) {
method llPushList (line 559) | public boolean llPushList(String key, List<Object> value) {
method lrPop (line 570) | public Object lrPop(String key) {
method llPush (line 587) | public boolean llPush(String key, List<Object> value, long time) {
method lUpdateIndex (line 609) | public boolean lUpdateIndex(String key, long index, Object value) {
method lRemove (line 628) | public long lRemove(String key, long count, Object value) {
method sendMessage (line 646) | public void sendMessage(String channel, Object message) {
method batchGet (line 657) | public List<Object> batchGet(List<String> keys) {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/common/utils/RestTemplateUtil.java
class RestTemplateUtil (line 13) | @Component
method get (line 18) | public <T> T get(URI uri, String path, Class<T> clazz) {
method get (line 22) | public <T> T get(String uri, String path, Class<T> clazz) {
method post (line 34) | public <T> T post(String uri, String path, Object request, Class<T> cl...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/config/CacheConfig.java
class CacheConfig (line 15) | public class CacheConfig {
method cacheManager (line 20) | public DoubleCacheManager cacheManager(RedisTemplate<Object, Object> r...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/config/CommonAsyncTaskConfig.java
class CommonAsyncTaskConfig (line 18) | @Configuration
method getAsyncExecutor (line 22) | @Override
method getAsyncUncaughtExceptionHandler (line 55) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/config/ConfigVO.java
class ConfigVO (line 13) | @RefreshScope
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/config/CorsConfig.java
class CorsConfig (line 15) | @Configuration
method addCorsMappings (line 21) | @Override
method addResourceHandlers (line 36) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/config/DruidConfiguration.java
class DruidConfiguration (line 15) | @Configuration
method dataSource (line 50) | @Bean(name = "datasource")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/config/JudgeAsyncTaskConfig.java
class JudgeAsyncTaskConfig (line 16) | @Configuration
method judgeTaskAsyncPool (line 19) | @Bean
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/config/MyMetaObjectConfig.java
class MyMetaObjectConfig (line 14) | @Component
method insertFill (line 17) | @Override
method updateFill (line 23) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/config/MybatisPlusConfig.java
class MybatisPlusConfig (line 15) | @Configuration
method optimisticLockerInterceptor (line 25) | @Bean
method paginationInterceptor (line 35) | @Bean
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/config/NacosConfig.java
class NacosConfig (line 15) | @Configuration
method nacosProperties (line 27) | @Bean
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/config/RedisConfig.java
class RedisConfig (line 19) | @Configuration
method redisTemplate (line 22) | @Bean
method redisKeySerializer (line 34) | @Bean
method redisValueSerializer (line 39) | @Bean
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/config/RestTemplateConfig.java
class RestTemplateConfig (line 14) | @Configuration
method restTemplate (line 17) | @Bean
method simpleClientHttpRequestFactory (line 22) | @Bean
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/config/ShiroConfig.java
class ShiroConfig (line 30) | @Configuration
method getDefaultAdvisorAutoProxyCreator (line 36) | @Bean
method sessionManager (line 43) | @Bean
method securityManager (line 50) | @Bean
method shiroFilterFactoryBean (line 65) | @Bean("shiroFilterFactoryBean")
method shiroFilterChainDefinition (line 79) | @Bean
method authorizationAttributeSourceAdvisor (line 90) | @Bean
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/config/StartupRunner.java
class StartupRunner (line 23) | @Component
method run (line 108) | @Override
method addRemoteJudgeAccountToDb (line 152) | private void addRemoteJudgeAccountToDb() {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/config/SwaggerConfig.java
class SwaggerConfig (line 21) | public class SwaggerConfig {
method docket (line 23) | @Bean
method apiInfo (line 47) | private ApiInfo apiInfo() {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/config/property/DoubleCacheProperties.java
class DoubleCacheProperties (line 12) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/config/property/EmailRuleBO.java
class EmailRuleBO (line 24) | @Component
class CompositePropertySourceFactory (line 34) | class CompositePropertySourceFactory extends DefaultPropertySourceFactory {
method createPropertySource (line 36) | @Override
method loadYaml (line 58) | private Properties loadYaml(EncodedResource resource) {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/config/property/FilePathProperties.java
class FilePathProperties (line 10) | @Component
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/config/property/RemoteAccountProperties.java
class RemoteAccountProperties (line 12) | @Component
class RemoteOj (line 19) | @Data
class Account (line 28) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/AdminContestController.java
class AdminContestController (line 29) | @RestController
method getContestList (line 40) | @GetMapping("/get-contest-list")
method getContest (line 51) | @GetMapping("")
method deleteContest (line 59) | @DeleteMapping("")
method addContest (line 67) | @PostMapping("")
method updateContest (line 75) | @PutMapping("")
method cloneContest (line 83) | @GetMapping("/clone")
method changeContestVisible (line 91) | @PutMapping("/change-contest-visible")
method getProblemList (line 112) | @GetMapping("/get-problem-list")
method getProblem (line 127) | @GetMapping("/problem")
method deleteProblem (line 135) | @DeleteMapping("/problem")
method addProblem (line 144) | @PostMapping("/problem")
method updateProblem (line 152) | @PutMapping("/problem")
method getContestProblem (line 160) | @GetMapping("/contest-problem")
method setContestProblem (line 169) | @PutMapping("/contest-problem")
method addProblemFromPublic (line 176) | @PostMapping("/add-problem-from-public")
method importContestRemoteOjProblem (line 184) | @GetMapping("/import-remote-oj-problem")
method getAnnouncementList (line 196) | @GetMapping("/announcement")
method deleteAnnouncement (line 208) | @DeleteMapping("/announcement")
method addAnnouncement (line 216) | @PostMapping("/announcement")
method updateAnnouncement (line 224) | @PutMapping("/announcement")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/AdminDiscussionController.java
class AdminDiscussionController (line 21) | @RestController
method updateDiscussion (line 28) | @PutMapping("/discussion")
method removeDiscussion (line 36) | @DeleteMapping("/discussion")
method getDiscussionReport (line 44) | @GetMapping("/discussion-report")
method updateDiscussionReport (line 54) | @PutMapping("/discussion-report")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/AdminJudgeController.java
class AdminJudgeController (line 21) | @RestController
method rejudge (line 28) | @GetMapping("/rejudge")
method rejudgeContestProblem (line 37) | @GetMapping("/rejudge-contest-problem")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/AdminProblemController.java
class AdminProblemController (line 24) | @RestController
method getProblemList (line 31) | @GetMapping("/get-problem-list")
method getProblem (line 42) | @GetMapping("")
method deleteProblem (line 49) | @DeleteMapping("")
method addProblem (line 57) | @PostMapping("")
method updateProblem (line 65) | @PutMapping("")
method getProblemCases (line 73) | @GetMapping("/get-problem-cases")
method compileSpj (line 82) | @PostMapping("/compile-spj")
method compileInteractive (line 92) | @PostMapping("/compile-interactive")
method importRemoteOjProblem (line 102) | @GetMapping("/import-remote-oj-problem")
method changeProblemAuth (line 111) | @PutMapping("/change-problem-auth")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/AdminTagController.java
class AdminTagController (line 21) | @RestController
method addTag (line 28) | @PostMapping("")
method updateTag (line 35) | @PutMapping("")
method deleteTag (line 43) | @DeleteMapping("")
method getTagClassification (line 51) | @GetMapping("/classification")
method addTagClassification (line 58) | @PostMapping("/classification")
method updateTagClassification (line 65) | @PutMapping("/classification")
method deleteTagClassification (line 73) | @DeleteMapping("/classification")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/AdminTrainingCategoryController.java
class AdminTrainingCategoryController (line 18) | @RestController
method addTrainingCategory (line 25) | @PostMapping("")
method updateTrainingCategory (line 32) | @PutMapping("")
method deleteTrainingCategory (line 40) | @DeleteMapping("")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/AdminTrainingController.java
class AdminTrainingController (line 24) | @RestController
method getTrainingList (line 33) | @GetMapping("/list")
method getTraining (line 42) | @GetMapping("")
method deleteTraining (line 50) | @DeleteMapping("")
method addTraining (line 58) | @PostMapping("")
method updateTraining (line 66) | @PutMapping("")
method changeTrainingStatus (line 74) | @PutMapping("/change-training-status")
method getProblemList (line 84) | @GetMapping("/get-problem-list")
method updateProblem (line 98) | @PutMapping("/problem")
method deleteProblem (line 106) | @DeleteMapping("/problem")
method addProblemFromPublic (line 115) | @PostMapping("/add-problem-from-public")
method importTrainingRemoteOjProblem (line 123) | @GetMapping("/import-remote-oj-problem")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/AdminUserController.java
class AdminUserController (line 21) | @RestController
method getUserList (line 28) | @GetMapping("/get-user-list")
method editUser (line 39) | @PutMapping("/edit-user")
method deleteUser (line 47) | @DeleteMapping("/delete-user")
method forbidUser (line 56) | @PostMapping("/forbid-user")
method insertBatchUser (line 65) | @PostMapping("/insert-batch-user")
method generateUser (line 74) | @PostMapping("/generate-user")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/AnnouncementController.java
class AnnouncementController (line 19) | @RestController
method getAnnouncementList (line 26) | @GetMapping("/api/admin/announcement")
method deleteAnnouncement (line 34) | @DeleteMapping("/api/admin/announcement")
method addAnnouncement (line 41) | @PostMapping("/api/admin/announcement")
method updateAnnouncement (line 49) | @PutMapping("/api/admin/announcement")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/ConfigController.java
class ConfigController (line 23) | @RestController
method getServiceInfo (line 37) | @RequiresRoles(value = {"root", "admin", "problem_admin"}, logical = L...
method getJudgeServiceInfo (line 43) | @RequiresRoles(value = {"root", "admin", "problem_admin"}, logical = L...
method getWebConfig (line 49) | @RequiresPermissions("system_info_admin")
method deleteHomeCarousel (line 55) | @RequiresPermissions("system_info_admin")
method setWebConfig (line 62) | @RequiresPermissions("system_info_admin")
method getEmailConfig (line 69) | @RequiresPermissions("system_info_admin")
method setEmailConfig (line 75) | @RequiresPermissions("system_info_admin")
method testEmail (line 82) | @RequiresPermissions("system_info_admin")
method getDbAndRedisConfig (line 89) | @RequiresPermissions("system_info_admin")
method setDbAndRedisConfig (line 95) | @RequiresPermissions("system_info_admin")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/DashboardController.java
class DashboardController (line 22) | @RestController
method getRecentSession (line 29) | @PostMapping("/get-sessions")
method getDashboardInfo (line 36) | @GetMapping("/get-dashboard-info")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/SwitchController.java
class SwitchController (line 18) | @RestController
method getSwitchConfig (line 25) | @RequiresPermissions("system_info_admin")
method setSwitchConfig (line 31) | @RequiresPermissions("system_info_admin")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/file/ContestFileController.java
class ContestFileController (line 21) | @Controller
method downloadContestRank (line 28) | @GetMapping("/download-contest-rank")
method downloadContestAcSubmission (line 36) | @GetMapping("/download-contest-ac-submission")
method downloadContestPrintText (line 47) | @GetMapping("/download-contest-print-text")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/file/ImageController.java
class ImageController (line 22) | @Controller
method uploadAvatar (line 29) | @RequestMapping(value = "/upload-avatar", method = RequestMethod.POST)
method uploadCarouselImg (line 36) | @RequestMapping(value = "/upload-carouse-img", method = RequestMethod....
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/file/ImportFpsProblemController.java
class ImportFpsProblemController (line 22) | @Controller
method importFPSProblem (line 36) | @RequiresRoles("root")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/file/ImportLOJProblemController.java
class ImportLOJProblemController (line 17) | @RestController
method importLOJProblem (line 24) | @RequiresRoles("root")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/file/ImportQDUOJProblemController.java
class ImportQDUOJProblemController (line 21) | @Controller
method importQDOJProblem (line 35) | @RequiresRoles("root")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/file/MarkDownFileController.java
class MarkDownFileController (line 23) | @Controller
method uploadMDImg (line 30) | @RequestMapping(value = "/upload-md-img", method = RequestMethod.POST)
method deleteMDImg (line 38) | @RequestMapping(value = "/delete-md-img", method = RequestMethod.GET)
method uploadMd (line 47) | @RequestMapping(value = "/upload-md-file", method = RequestMethod.POST)
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/file/ProblemFileController.java
class ProblemFileController (line 20) | @Controller
method importProblem (line 34) | @RequiresRoles("root")
method exportProblem (line 51) | @GetMapping("/export-problem")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/file/TestCaseController.java
class TestCaseController (line 21) | @Controller
method uploadTestcaseZip (line 28) | @PostMapping("/upload-testcase-zip")
method downloadTestcase (line 35) | @GetMapping("/download-testcase")
method downloadSingleTestCase (line 42) | @GetMapping("/download-single-testcase")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/file/UserFileController.java
class UserFileController (line 19) | @Controller
method generateUserExcel (line 26) | @RequestMapping("/generate-user-excel")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/msg/AdminNoticeController.java
class AdminNoticeController (line 18) | @RestController
method getSysNotice (line 25) | @GetMapping("/notice")
method addSysNotice (line 35) | @PostMapping("/notice")
method deleteSysNotice (line 43) | @DeleteMapping("/notice")
method updateSysNotice (line 51) | @PutMapping("/notice")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/msg/NoticeController.java
class NoticeController (line 19) | @RestController
method getSysNotice (line 26) | @RequestMapping(value = "/sys", method = RequestMethod.GET)
method getMineNotice (line 33) | @RequestMapping(value = "/mine", method = RequestMethod.GET)
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/msg/UserMessageController.java
class UserMessageController (line 20) | @RestController
method getUnreadMsgCount (line 33) | @RequestMapping(value = "/unread", method = RequestMethod.GET)
method cleanMsg (line 46) | @RequestMapping(value = "/clean", method = RequestMethod.DELETE)
method getCommentMsg (line 62) | @RequestMapping(value = "/comment", method = RequestMethod.GET)
method getReplyMsg (line 77) | @RequestMapping(value = "/reply", method = RequestMethod.GET)
method getLikeMsg (line 92) | @RequestMapping(value = "/like", method = RequestMethod.GET)
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/AccountController.java
class AccountController (line 21) | @RestController
method checkUsernameOrEmail (line 34) | @RequestMapping(value = "/check-username-or-email", method = RequestMe...
method getUserHomeInfo (line 47) | @GetMapping("/get-user-home-info")
method changePassword (line 61) | @PostMapping("/change-password")
method changeEmail (line 74) | @PostMapping("/change-email")
method changeUserInfo (line 80) | @PostMapping("/change-userInfo")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/CommentController.java
class CommentController (line 22) | @RestController
method getComments (line 29) | @GetMapping("/comments")
method addComment (line 37) | @PostMapping("/comment")
method deleteComment (line 44) | @DeleteMapping("/comment")
method addDiscussionLike (line 51) | @GetMapping("/comment-like")
method getAllReply (line 60) | @GetMapping("/reply")
method addReply (line 66) | @PostMapping("/reply")
method deleteReply (line 74) | @DeleteMapping("/reply")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/CommonController.java
class CommonController (line 26) | @RestController
method getCaptcha (line 33) | @GetMapping("/captcha")
method getTrainingCategory (line 38) | @GetMapping("/get-training-category")
method getAllProblemTagsList (line 43) | @GetMapping("/get-all-problem-tags")
method getProblemTagsAndClassification (line 49) | @GetMapping("/get-problem-tags-and-classification")
method getProblemTags (line 54) | @GetMapping("/get-problem-tags")
method getLanguages (line 59) | @GetMapping("/languages")
method getProblemLanguages (line 65) | @GetMapping("/get-Problem-languages")
method getProblemCodeTemplate (line 70) | @GetMapping("/get-problem-code-template")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/ContestAdminController.java
class ContestAdminController (line 18) | @RestController
method getContestACInfo (line 32) | @GetMapping("/get-contest-ac-info")
method checkContestACInfo (line 47) | @PutMapping("/check-contest-ac-info")
method getContestPrint (line 54) | @GetMapping("/get-contest-print")
method checkContestPrintStatus (line 70) | @PutMapping("/check-contest-print-status")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/ContestController.java
class ContestController (line 23) | @RestController
method getContestList (line 36) | @GetMapping("/get-contest-list")
method getContestInfo (line 51) | @GetMapping("/get-contest-info")
method toRegisterContest (line 63) | @PostMapping("/register-contest")
method getContestAccess (line 76) | @RequiresAuthentication
method getContestProblem (line 88) | @GetMapping("/get-contest-problem")
method getContestProblemDetails (line 95) | @GetMapping("/get-contest-problem-details")
method getContestSubmissionList (line 102) | @GetMapping("/contest-submissions")
method getContestRank (line 125) | @PostMapping("/get-contest-rank")
method getContestAnnouncement (line 137) | @GetMapping("/get-contest-announcement")
method getContestUserNotReadAnnouncement (line 153) | @PostMapping("/get-contest-not-read-announcement")
method submitPrintText (line 168) | @PostMapping("/submit-print-text")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/ContestScoreboardController.java
class ContestScoreboardController (line 19) | @RestController
method getContestOutsideInfo (line 33) | @GetMapping("/get-contest-outsize-info")
method getContestOutsideScoreboard (line 45) | @PostMapping("/get-contest-outside-scoreboard")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/DiscussionController.java
class DiscussionController (line 22) | @RestController
method getDiscussionList (line 29) | @GetMapping("/discussions")
method getDiscussion (line 44) | @GetMapping("/discussion")
method addDiscussion (line 49) | @PostMapping("/discussion")
method updateDiscussion (line 57) | @PutMapping("/discussion")
method removeDiscussion (line 65) | @DeleteMapping("/discussion")
method addDiscussionLike (line 73) | @GetMapping("/discussion-like")
method getDiscussionCategory (line 81) | @GetMapping("/discussion-category")
method addDiscussionReport (line 86) | @PostMapping("/discussion-report")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/HomeController.java
class HomeController (line 25) | @RestController
method getRecentContest (line 41) | @GetMapping("/get-recent-contest")
method getHomeCarousel (line 53) | @GetMapping("/home-carousel")
method getRecentSevenACRank (line 65) | @GetMapping("/get-recent-seven-ac-rank")
method getRecentOtherContest (line 77) | @GetMapping("/get-recent-other-contest")
method getCommonAnnouncement (line 89) | @GetMapping("/get-common-announcement")
method getWebConfig (line 103) | @GetMapping("/get-website-config")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/JudgeController.java
class JudgeController (line 25) | @RestController
method submitProblemJudge (line 38) | @RequiresAuthentication
method resubmit (line 51) | @RequiresAuthentication
method getSubmission (line 63) | @GetMapping("/submission")
method updateSubmission (line 75) | @PutMapping("/submission")
method getJudgeList (line 95) | @RequestMapping(value = "/submissions", method = RequestMethod.GET)
method checkCommonJudgeResult (line 113) | @RequestMapping(value = "/check-submissions-status", method = RequestM...
method checkContestJudgeResult (line 125) | @RequestMapping(value = "/check-contest-submissions-status", method = ...
method getALLCaseResult (line 138) | @GetMapping("/get-all-case-result")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/PassportController.java
class PassportController (line 25) | @RestController
method login (line 39) | @PostMapping("/login")
method getRegisterCode (line 51) | @RequestMapping(value = "/get-register-code", method = RequestMethod.GET)
method register (line 63) | @PostMapping("/register")
method applyResetPassword (line 76) | @PostMapping("/apply-reset-password")
method resetPassword (line 89) | @PostMapping("/reset-password")
method logout (line 101) | @GetMapping("/logout")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/ProblemController.java
class ProblemController (line 23) | @RestController
method getProblemList (line 41) | @GetMapping(value = "/get-problem-list")
method getRandomProblem (line 58) | @GetMapping("/get-random-problem")
method getUserProblemStatus (line 70) | @RequiresAuthentication
method getProblemInfo (line 83) | @RequestMapping(value = "/get-problem", method = RequestMethod.GET)
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/RankController.java
class RankController (line 17) | @RestController
method getRankList (line 31) | @GetMapping("/get-rank-list")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/TrainingController.java
class TrainingController (line 23) | @RestController
method getTrainingList (line 41) | @GetMapping("/get-training-list")
method getTraining (line 59) | @GetMapping("/get-training-detail")
method getTrainingProblemList (line 72) | @GetMapping("/get-training-problem-list")
method toRegisterTraining (line 85) | @PostMapping("/register-training")
method getTrainingAccess (line 99) | @RequiresAuthentication
method getTrainingRank (line 114) | @GetMapping("/get-training-rank")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/common/AnnouncementEntityService.java
type AnnouncementEntityService (line 16) | public interface AnnouncementEntityService extends IService<Announcement> {
method getAnnouncementList (line 18) | IPage<AnnouncementVO> getAnnouncementList(int limit, int currentPage, ...
method getContestAnnouncement (line 20) | IPage<AnnouncementVO> getContestAnnouncement(Long cid, Boolean notAdmi...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/common/FileEntityService.java
type FileEntityService (line 8) | public interface FileEntityService extends IService<File> {
method updateFileToDeleteByUidAndType (line 10) | int updateFileToDeleteByUidAndType(String uid, String type);
method queryDeleteAvatarList (line 12) | List<File> queryDeleteAvatarList();
method queryCarouselFileList (line 14) | List<File> queryCarouselFileList();
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/common/impl/AnnouncementEntityServiceImpl.java
class AnnouncementEntityServiceImpl (line 21) | @Service
method getAnnouncementList (line 28) | @Override
method getContestAnnouncement (line 35) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/common/impl/FileEntityEntityServiceImpl.java
class FileEntityEntityServiceImpl (line 17) | @Service
method updateFileToDeleteByUidAndType (line 23) | @Override
method queryDeleteAvatarList (line 28) | @Override
method queryCarouselFileList (line 33) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/ContestAnnouncementEntityService.java
type ContestAnnouncementEntityService (line 6) | public interface ContestAnnouncementEntityService extends IService<Conte...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/ContestEntityService.java
type ContestEntityService (line 18) | public interface ContestEntityService extends IService<Contest> {
method getWithinNext14DaysContests (line 20) | List<ContestVO> getWithinNext14DaysContests();
method getContestList (line 22) | IPage<ContestVO> getContestList(Integer limit, Integer currentPage, In...
method getContestInfoById (line 24) | ContestVO getContestInfoById(long cid);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/ContestPrintEntityService.java
type ContestPrintEntityService (line 11) | public interface ContestPrintEntityService extends IService<ContestPrint> {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/ContestProblemEntityService.java
type ContestProblemEntityService (line 18) | public interface ContestProblemEntityService extends IService<ContestPro...
method getContestProblemList (line 20) | List<ContestProblemVO> getContestProblemList(Long cid, Date startTime,...
method syncContestRecord (line 23) | void syncContestRecord(Long pid, Long cid, String displayId);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/ContestRecordEntityService.java
type ContestRecordEntityService (line 20) | public interface ContestRecordEntityService extends IService<ContestReco...
method getACInfo (line 22) | IPage<ContestRecord> getACInfo(Integer currentPage, Integer limit, Int...
method getOIContestRecord (line 25) | List<ContestRecordVO> getOIContestRecord(Contest contest, Boolean isOp...
method getACMContestRecord (line 27) | List<ContestRecordVO> getACMContestRecord(Long cid, Date startTime);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/ContestRegisterEntityService.java
type ContestRegisterEntityService (line 16) | public interface ContestRegisterEntityService extends IService<ContestRe...
method getRegisteredUsers (line 17) | Set<String> getRegisteredUsers(Long cid);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/impl/ContestAnnouncementEntityServiceImpl.java
class ContestAnnouncementEntityServiceImpl (line 14) | @Service
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/impl/ContestEntityServiceImpl.java
class ContestEntityServiceImpl (line 29) | @Service
method getWithinNext14DaysContests (line 36) | @Override
method getContestList (line 50) | @Override
method getContestInfoById (line 68) | @Override
method setRegisterCount (line 88) | private void setRegisterCount(List<ContestVO> contestList) {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/impl/ContestPrintEntityServiceImpl.java
class ContestPrintEntityServiceImpl (line 14) | @Service
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/impl/ContestProblemEntityServiceImpl.java
class ContestProblemEntityServiceImpl (line 27) | @Service
method getContestProblemList (line 38) | @Override
method syncContestRecord (line 48) | @Async
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/impl/ContestRecordEntityServiceImpl.java
class ContestRecordEntityServiceImpl (line 29) | @Service
method getACInfo (line 40) | @Override
method getOIContestRecord (line 98) | @Override
method getACMContestRecord (line 142) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/impl/ContestRegisterEntityServiceImpl.java
class ContestRegisterEntityServiceImpl (line 20) | @Service
method getRegisteredUsers (line 24) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/CommentEntityService.java
type CommentEntityService (line 19) | public interface CommentEntityService extends IService<Comment> {
method getCommentList (line 21) | IPage<CommentVO> getCommentList(int limit, int currentPage, Long cid, ...
method getAllReplyByCommentId (line 23) | List<Reply> getAllReplyByCommentId(Long cid, String uid, Boolean isRoo...
method updateCommentMsg (line 25) | void updateCommentMsg(String recipientId, String senderId, String cont...
method updateCommentLikeMsg (line 27) | void updateCommentLikeMsg(String recipientId, String senderId, Integer...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/CommentLikeEntityService.java
type CommentLikeEntityService (line 6) | public interface CommentLikeEntityService extends IService<CommentLike> {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/DiscussionEntityService.java
type DiscussionEntityService (line 7) | public interface DiscussionEntityService extends IService<Discussion> {
method getDiscussion (line 9) | DiscussionVO getDiscussion(Integer did, String uid);
method updatePostLikeMsg (line 11) | void updatePostLikeMsg(String recipientId, String senderId, Integer di...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/DiscussionLikeEntityService.java
type DiscussionLikeEntityService (line 6) | public interface DiscussionLikeEntityService extends IService<Discussion...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/DiscussionReportEntityService.java
type DiscussionReportEntityService (line 6) | public interface DiscussionReportEntityService extends IService<Discussi...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/ReplyEntityService.java
type ReplyEntityService (line 11) | public interface ReplyEntityService extends IService<Reply> {
method updateReplyMsg (line 13) | public void updateReplyMsg(Integer sourceId, String sourceType, String...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/impl/CommentEntityServiceImpl.java
class CommentEntityServiceImpl (line 33) | @Service
method getCommentList (line 47) | @Override
method getAllReplyByCommentId (line 70) | @Override
method updateCommentMsg (line 92) | @Async
method updateCommentLikeMsg (line 106) | @Async
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/impl/CommentLikeEntityServiceImpl.java
class CommentLikeEntityServiceImpl (line 14) | @Service
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/impl/DiscussionEntityServiceImpl.java
class DiscussionEntityServiceImpl (line 19) | @Service
method getDiscussion (line 28) | @Override
method updatePostLikeMsg (line 33) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/impl/DiscussionLikeEntityServiceImpl.java
class DiscussionLikeEntityServiceImpl (line 14) | @Service
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/impl/DiscussionReportEntityServiceImpl.java
class DiscussionReportEntityServiceImpl (line 14) | @Service
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/impl/ReplyEntityServiceImpl.java
class ReplyEntityServiceImpl (line 18) | @Service
method updateReplyMsg (line 24) | @Async
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/judge/JudgeCaseEntityService.java
type JudgeCaseEntityService (line 14) | public interface JudgeCaseEntityService extends IService<JudgeCase> {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/judge/JudgeEntityService.java
type JudgeEntityService (line 21) | public interface JudgeEntityService extends IService<Judge> {
method getCommonJudgeList (line 23) | IPage<JudgeVO> getCommonJudgeList(Integer limit, Integer currentPage, ...
method getContestJudgeList (line 27) | IPage<JudgeVO> getContestJudgeList(Integer limit, Integer currentPage,...
method failToUseRedisPublishJudge (line 31) | void failToUseRedisPublishJudge(Long submitId, Long pid, Boolean isCon...
method getContestProblemCount (line 33) | ProblemCountVO getContestProblemCount(Long pid, Long cpid, Long cid, D...
method getProblemCount (line 36) | ProblemCountVO getProblemCount(Long pid);
method getTodayJudgeNum (line 38) | int getTodayJudgeNum();
method getProblemListCount (line 40) | List<ProblemCountVO> getProblemListCount(List<Long> pidList);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/judge/JudgeServerEntityService.java
type JudgeServerEntityService (line 6) | public interface JudgeServerEntityService extends IService<JudgeServer> {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/judge/RemoteJudgeAccountEntityService.java
type RemoteJudgeAccountEntityService (line 6) | public interface RemoteJudgeAccountEntityService extends IService<Remote...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/judge/impl/JudgeCaseEntityServiceImpl.java
class JudgeCaseEntityServiceImpl (line 17) | @Service
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/judge/impl/JudgeEntityServiceImpl.java
class JudgeEntityServiceImpl (line 31) | @Service
method getCommonJudgeList (line 40) | @Override
method getContestJudgeList (line 50) | @Override
method failToUseRedisPublishJudge (line 61) | @Override
method getContestProblemCount (line 78) | @Override
method getProblemCount (line 84) | @Override
method getTodayJudgeNum (line 89) | @Override
method getProblemListCount (line 94) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/judge/impl/JudgeServerEntityServiceImpl.java
class JudgeServerEntityServiceImpl (line 14) | @Service
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/judge/impl/RemoteJudgeAccountEntityServiceImpl.java
class RemoteJudgeAccountEntityServiceImpl (line 14) | @Service
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/msg/AdminSysNoticeEntityService.java
type AdminSysNoticeEntityService (line 13) | public interface AdminSysNoticeEntityService extends IService<AdminSysNo...
method getSysNotice (line 15) | IPage<AdminSysNoticeVO> getSysNotice(int limit, int currentPage, Strin...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/msg/MsgRemindEntityService.java
type MsgRemindEntityService (line 15) | public interface MsgRemindEntityService extends IService<MsgRemind> {
method getUserUnreadMsgCount (line 17) | UserUnreadMsgCountVO getUserUnreadMsgCount(String uid);
method getUserMsg (line 19) | IPage<UserMsgVO> getUserMsg(Page<UserMsgVO> page, String uid, String a...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/msg/UserSysNoticeEntityService.java
type UserSysNoticeEntityService (line 8) | public interface UserSysNoticeEntityService extends IService<UserSysNoti...
method getSysNotice (line 10) | IPage<SysMsgVO> getSysNotice(int limit, int currentPage, String uid);
method getMineNotice (line 12) | IPage<SysMsgVO> getMineNotice(int limit, int currentPage, String uid);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/msg/impl/AdminSysNoticeEntityServiceImpl.java
class AdminSysNoticeEntityServiceImpl (line 18) | @Service
method getSysNotice (line 25) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/msg/impl/MsgRemindEntityServiceImpl.java
class MsgRemindEntityServiceImpl (line 19) | @Service
method getUserUnreadMsgCount (line 26) | @Override
method getUserMsg (line 31) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/msg/impl/UserSysNoticeEntityServiceImpl.java
class UserSysNoticeEntityServiceImpl (line 18) | @Service
method getSysNotice (line 25) | @Override
method getMineNotice (line 31) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/CategoryEntityService.java
type CategoryEntityService (line 6) | public interface CategoryEntityService extends IService<Category> {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/CodeTemplateEntityService.java
type CodeTemplateEntityService (line 6) | public interface CodeTemplateEntityService extends IService<CodeTemplate> {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/LanguageEntityService.java
type LanguageEntityService (line 6) | public interface LanguageEntityService extends IService<Language> {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/ProblemCaseEntityService.java
type ProblemCaseEntityService (line 11) | public interface ProblemCaseEntityService extends IService<ProblemCase> {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/ProblemEntityService.java
type ProblemEntityService (line 22) | public interface ProblemEntityService extends IService<Problem> {
method getProblemList (line 24) | Page<ProblemVO> getProblemList(int limit, int currentPage, String titl...
method adminUpdateProblem (line 27) | boolean adminUpdateProblem(ProblemDTO problemDTO);
method adminAddProblem (line 29) | boolean adminAddProblem(ProblemDTO problemDTO);
method buildExportProblem (line 31) | ImportProblemVO buildExportProblem(Long pid, List<HashMap<String, Obje...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/ProblemLanguageEntityService.java
type ProblemLanguageEntityService (line 11) | public interface ProblemLanguageEntityService extends IService<ProblemLa...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/ProblemTagEntityService.java
type ProblemTagEntityService (line 6) | public interface ProblemTagEntityService extends IService<ProblemTag> {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/TagClassificationEntityService.java
type TagClassificationEntityService (line 10) | public interface TagClassificationEntityService extends IService<TagClas...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/TagEntityService.java
type TagEntityService (line 14) | public interface TagEntityService extends IService<Tag> {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/CategoryEntityServiceImpl.java
class CategoryEntityServiceImpl (line 14) | @Service
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/CodeTemplateEntityServiceImpl.java
class CodeTemplateEntityServiceImpl (line 14) | @Service
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/LanguageEntityServiceImpl.java
class LanguageEntityServiceImpl (line 14) | @Service
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/ProblemCaseEntityServiceImpl.java
class ProblemCaseEntityServiceImpl (line 14) | @Service
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/ProblemEntityServiceImpl.java
class ProblemEntityServiceImpl (line 48) | @Service
method rtrim (line 71) | public static String rtrim(String value) {
method getProblemList (line 78) | @Override
method processTag (line 111) | public boolean processTag(Long pid, ProblemDTO problemDTO, String ojNa...
method processLanguage (line 169) | public boolean processLanguage(Long pid, ProblemDTO problemDTO) {
method adminUpdateProblem (line 216) | @Override
method processProblemCase (line 246) | public boolean processProblemCase(long pid, ProblemDTO problemDTO, Pro...
method processCodeTemplate (line 337) | public boolean processCodeTemplate(Long pid, ProblemDTO problemDTO) {
method checkUniquePid (line 372) | public long checkUniquePid(ProblemDTO problemDTO, Problem problem) {
method adminAddProblem (line 389) | @Override
method addCasesToProblem (line 461) | private boolean addCasesToProblem(ProblemDTO problemDTO, Problem probl...
method initUploadTestCase (line 508) | @Async
method initHandTestCase (line 584) | @Async
method buildExportProblem (line 642) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/ProblemLanguageEntityServiceImpl.java
class ProblemLanguageEntityServiceImpl (line 14) | @Service
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/ProblemTagEntityServiceImpl.java
class ProblemTagEntityServiceImpl (line 14) | @Service
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/TagClassificationEntityServiceImpl.java
class TagClassificationEntityServiceImpl (line 13) | @Service
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/TagEntityServiceImpl.java
class TagEntityServiceImpl (line 17) | @Service
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/MappingTrainingCategoryEntityService.java
type MappingTrainingCategoryEntityService (line 6) | public interface MappingTrainingCategoryEntityService extends IService<M...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/TrainingCategoryEntityService.java
type TrainingCategoryEntityService (line 6) | public interface TrainingCategoryEntityService extends IService<Training...
method getTrainingCategoryByTrainingId (line 8) | TrainingCategory getTrainingCategoryByTrainingId(Long tid);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/TrainingEntityService.java
type TrainingEntityService (line 8) | public interface TrainingEntityService extends IService<Training> {
method getTrainingList (line 10) | IPage<TrainingVO> getTrainingList(int limit, int currentPage, Long cat...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/TrainingProblemEntityService.java
type TrainingProblemEntityService (line 14) | public interface TrainingProblemEntityService extends IService<TrainingP...
method getTrainingProblemIdList (line 16) | List<Long> getTrainingProblemIdList(Long tid);
method getTrainingProblemList (line 18) | List<ProblemVO> getTrainingProblemList(Long tid);
method getUserTrainingACProblemCount (line 20) | Integer getUserTrainingACProblemCount(String uid, List<Long> pidList);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/TrainingRecordEntityService.java
type TrainingRecordEntityService (line 14) | public interface TrainingRecordEntityService extends IService<TrainingRe...
method getTrainingRecord (line 16) | List<TrainingRecordVO> getTrainingRecord(Long tid);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/TrainingRegisterEntityService.java
type TrainingRegisterEntityService (line 8) | public interface TrainingRegisterEntityService extends IService<Training...
method getAlreadyRegisterUidList (line 10) | List<String> getAlreadyRegisterUidList(Long tid);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/impl/MappingTrainingCategoryEntityServiceImpl.java
class MappingTrainingCategoryEntityServiceImpl (line 14) | @Service
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/impl/TrainingCategoryEntityServiceImpl.java
class TrainingCategoryEntityServiceImpl (line 15) | @Service
method getTrainingCategoryByTrainingId (line 22) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/impl/TrainingEntityServiceImpl.java
class TrainingEntityServiceImpl (line 21) | @Service
method getTrainingList (line 27) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/impl/TrainingProblemEntityServiceImpl.java
class TrainingProblemEntityServiceImpl (line 27) | @Service
method distinctByKey (line 36) | static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtrac...
method getTrainingProblemIdList (line 41) | @Override
method getTrainingProblemList (line 46) | @Override
method getUserTrainingACProblemCount (line 52) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/impl/TrainingRecordEntityServiceImpl.java
class TrainingRecordEntityServiceImpl (line 18) | @Service
method getTrainingRecord (line 25) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/impl/TrainingRegisterEntityServiceImpl.java
class TrainingRegisterEntityServiceImpl (line 19) | @Service
method getAlreadyRegisterUidList (line 26) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/AuthEntityService.java
type AuthEntityService (line 14) | public interface AuthEntityService extends IService<Auth> {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/RoleAuthEntityService.java
type RoleAuthEntityService (line 14) | public interface RoleAuthEntityService extends IService<RoleAuth> {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/RoleEntityService.java
type RoleEntityService (line 14) | public interface RoleEntityService extends IService<Role> {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/SessionEntityService.java
type SessionEntityService (line 6) | public interface SessionEntityService extends IService<Session> {
method checkRemoteLogin (line 8) | void checkRemoteLogin(String uid);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/UserAcproblemEntityService.java
type UserAcproblemEntityService (line 14) | public interface UserAcproblemEntityService extends IService<UserAcprobl...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/UserInfoEntityService.java
type UserInfoEntityService (line 17) | public interface UserInfoEntityService extends IService<UserInfo> {
method addUser (line 19) | Boolean addUser(RegisterDTO registerDTO);
method getSuperAdminUidList (line 21) | List<String> getSuperAdminUidList();
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/UserRoleEntityService.java
type UserRoleEntityService (line 16) | public interface UserRoleEntityService extends IService<UserRole> {
method getUserRoles (line 18) | UserRolesVO getUserRoles(String uid, String username);
method getUserList (line 20) | IPage<UserRolesVO> getUserList(int limit, int currentPage, String keyw...
method deleteCache (line 22) | void deleteCache(String uid, boolean isRemoveSession);
method getAuthChangeContent (line 24) | String getAuthChangeContent(int oldType, int newType);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/impl/AuthEntityServiceImpl.java
class AuthEntityServiceImpl (line 17) | @Service
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/impl/RoleAuthEntityServiceImpl.java
class RoleAuthEntityServiceImpl (line 17) | @Service
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/impl/RoleEntityServiceImpl.java
class RoleEntityServiceImpl (line 17) | @Service
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/impl/SessionEntityServiceImpl.java
class SessionEntityServiceImpl (line 29) | @Service
method checkRemoteLogin (line 39) | @Override
method getRemoteLoginContent (line 74) | private String getRemoteLoginContent(String oldIp, String newIp, Date ...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/impl/UserAcproblemEntityServiceImpl.java
class UserAcproblemEntityServiceImpl (line 17) | @Service
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/impl/UserInfoEntityServiceImpl.java
class UserInfoEntityServiceImpl (line 25) | @Service
method addUser (line 33) | @Override
method getSuperAdminUidList (line 38) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/impl/UserRoleEntityServiceImpl.java
class UserRoleEntityServiceImpl (line 35) | @Service
method getUserRoles (line 51) | @Override
method getUserList (line 56) | @Override
method deleteCache (line 76) | @Override
method deleteSession (line 99) | private void deleteSession(boolean isRemoveSession, Session session, O...
method getAuthChangeContent (line 111) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/judge/AbstractTaskReceiver.java
class AbstractTaskReceiver (line 8) | public abstract class AbstractTaskReceiver {
method handleWaitingTask (line 10) | public void handleWaitingTask(String... queues) {
method getTaskFromRedis (line 19) | public abstract String getTaskFromRedis(String queue);
method handleTask (line 21) | public abstract void handleTask(String taskJsonStr);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/judge/ChooseUtils.java
class ChooseUtils (line 29) | @Component
method chooseJudgeServer (line 52) | @Transactional(rollbackFor = Exception.class)
method getInstances (line 98) | private List<Instance> getInstances(String serviceId) {
method chooseRemoteAccount (line 110) | @Transactional(rollbackFor = Exception.class)
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/judge/Dispatcher.java
class Dispatcher (line 32) | @Component
method dispatcher (line 51) | public CommonResult dispatcher(CallJudgerType type, String path, Objec...
method toCompile (line 69) | public CommonResult toCompile(String path, CompileDTO data) {
method toJudge (line 85) | public void toJudge(String path, JudgeDTO data) {
class SubmitTask (line 92) | class SubmitTask implements Runnable {
method SubmitTask (line 111) | public SubmitTask(String path, JudgeDTO data, String key) {
method run (line 124) | @Override
method handleJudgeProcess (line 139) | private void handleJudgeProcess(JudgeServer judgeServer) {
method handleSubmitFailure (line 159) | private void handleSubmitFailure() {
method checkResult (line 170) | private void checkResult(CommonResult<Void> result, Long submitId) {
method cancelFutureTask (line 188) | private void cancelFutureTask(String key) {
method reduceCurrentTaskNum (line 198) | public void reduceCurrentTaskNum(Integer id) {
method tryAgainUpdateJudgeServer (line 208) | public void tryAgainUpdateJudgeServer(UpdateWrapper<JudgeServer> updat...
method changeRemoteJudgeStatus (line 231) | public void changeRemoteJudgeStatus(String remoteOjName, String userna...
method tryAgainUpdateAccount (line 250) | private void tryAgainUpdateAccount(UpdateWrapper<RemoteJudgeAccount> u...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/judge/local/JudgeTaskDispatcher.java
class JudgeTaskDispatcher (line 21) | @Component
method sendTask (line 36) | public void sendTask(Judge judge, Boolean isContest) {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/judge/local/JudgeTaskTaskReceiver.java
class JudgeTaskTaskReceiver (line 22) | @Component
method processWaitingTask (line 31) | @Async("judgeTaskAsyncPool")
method getTaskFromRedis (line 38) | @Override
method handleTask (line 48) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/judge/remote/RemoteJudgeTaskDispatcher.java
class RemoteJudgeTaskDispatcher (line 16) | @Component
method sendTask (line 31) | public void sendTask(Judge judge, String remoteJudgeProblem, Boolean i...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/judge/remote/RemoteJudgeTaskReceiver.java
class RemoteJudgeTaskReceiver (line 25) | @Component
method processWaitingTask (line 41) | @Async("judgeTaskAsyncPool")
method getTaskFromRedis (line 49) | @Override
method handleTask (line 58) | @Override
method dispatchRemoteJudge (line 70) | private void dispatchRemoteJudge(JudgeDTO toJudge) {
method commonJudge (line 76) | private void commonJudge(JudgeDTO toJudge) {
class RemoteJudgeAccountTask (line 83) | class RemoteJudgeAccountTask implements Runnable {
method RemoteJudgeAccountTask (line 96) | public RemoteJudgeAccountTask(JudgeDTO toJudge, String key) {
method run (line 103) | @Override
method cancelFutureTask (line 124) | private void cancelFutureTask() {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/judge/remote/crawler/AbstractCFStyleProblemCrawler.java
class AbstractCFStyleProblemCrawler (line 19) | @Component
method getProblemUrl (line 28) | protected abstract String getProblemUrl(String contestId, String probl...
method getProblemSource (line 30) | protected abstract String getProblemSource(String html, String problem...
method getProblemInfo (line 32) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/judge/remote/crawler/AbstractProblemCrawler.java
class AbstractProblemCrawler (line 14) | public abstract class AbstractProblemCrawler {
method getProblemInfo (line 16) | public abstract RemoteProblemInfo getProblemInfo(String problemId) thr...
method getOjInfo (line 18) | public abstract String getOjInfo();
class RemoteProblemInfo (line 20) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/judge/remote/crawler/AtCoderProblemCrawler.java
class AtCoderProblemCrawler (line 21) | @Component
method getProblemUrl (line 28) | public String getProblemUrl(String problemId, String contestId) {
method getProblemSource (line 32) | public String getProblemSource(String problemId, String contestId) {
method getProblemInfo (line 36) | @Override
method getOjInfo (line 114) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/judge/remote/crawler/CFProblemCrawler.java
class CFProblemCrawler (line 12) | @Component
method getOjInfo (line 16) | @Override
method getProblemUrl (line 21) | public String getProblemUrl(String contestId, String problemNum) {
method getProblemSource (line 25) | public String getProblemSource(String html, String problemId, String c...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/judge/remote/crawler/CrawlersHolder.java
class CrawlersHolder (line 10) | @Slf4j
method getCrawler (line 15) | public static AbstractProblemCrawler getCrawler(String remoteOj) {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/judge/remote/crawler/GYMProblemCrawler.java
class GYMProblemCrawler (line 26) | @Component
method getOjInfo (line 35) | @Override
method getProblemUrl (line 40) | @Override
method getProblemSource (line 45) | @Override
method getProblemInfo (line 54) | @Override
method getPDFHtml (line 73) | private RemoteProblemInfo getPDFHtml(String problemId, String contestN...
method login (line 137) | public void login(String username, String password) {
method getCsrfToken (line 157) | public HashMap<String, Object> getCsrfToken(String url, boolean needTT...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/judge/remote/crawler/HDUProblemCrawler.java
class HDUProblemCrawler (line 14) | @Component
method getProblemInfo (line 28) | @Override
method getOjInfo (line 59) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/judge/remote/crawler/JSKProblemCrawler.java
class JSKProblemCrawler (line 18) | @Component
method getProblemInfo (line 36) | @Override
method getOjInfo (line 88) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/judge/remote/crawler/MXTProblemCrawler.java
class MXTProblemCrawler (line 13) | @Component
method getProblemInfo (line 22) | @Override
method getOjInfo (line 61) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/judge/remote/crawler/POJProblemCrawler.java
class POJProblemCrawler (line 14) | @Component
method getProblemInfo (line 23) | @Override
method getOjInfo (line 62) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/judge/remote/crawler/TKOJProblemCrawler.java
class TKOJProblemCrawler (line 13) | @Component
method getProblemInfo (line 22) | @Override
method getOjInfo (line 55) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/judge/remote/crawler/YACSProblemCrawler.java
class YACSProblemCrawler (line 16) | @Component
method getProblemInfo (line 30) | @Override
method getOjInfo (line 65) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/AdminSysNoticeMapper.java
type AdminSysNoticeMapper (line 11) | @Mapper
method getAdminSysNotice (line 14) | IPage<AdminSysNoticeVO> getAdminSysNotice(Page<AdminSysNoticeVO> page,...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/AnnouncementMapper.java
type AnnouncementMapper (line 19) | @Mapper
method getAnnouncementList (line 22) | IPage<AnnouncementVO> getAnnouncementList(Page<AnnouncementVO> page, @...
method getContestAnnouncement (line 24) | IPage<AnnouncementVO> getContestAnnouncement(Page<AnnouncementVO> page...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/AuthMapper.java
type AuthMapper (line 14) | public interface AuthMapper extends BaseMapper<Auth> {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/CategoryMapper.java
type CategoryMapper (line 7) | @Mapper
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/CodeTemplateMapper.java
type CodeTemplateMapper (line 7) | @Mapper
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/CommentLikeMapper.java
type CommentLikeMapper (line 7) | @Mapper
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/CommentMapper.java
type CommentMapper (line 21) | @Mapper
method getCommentList (line 24) | IPage<CommentVO> getCommentList(Page<CommentVO> page, @Param("cid") Lo...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/ContestAnnouncementMapper.java
type ContestAnnouncementMapper (line 7) | @Mapper
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/ContestMapper.java
type ContestMapper (line 20) | @Mapper
method getContestList (line 23) | List<Contest> getContestList(IPage page, @Param("type") Integer type, ...
method getContestRegisterCount (line 26) | List<ContestRegisterCountVO> getContestRegisterCount(@Param("cidList")...
method getWithinNext14DaysContests (line 28) | List<Contest> getWithinNext14DaysContests();
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/ContestPrintMapper.java
type ContestPrintMapper (line 12) | @Mapper
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/ContestProblemMapper.java
type ContestProblemMapper (line 20) | @Mapper
method getContestProblemList (line 23) | List<ContestProblemVO> getContestProblemList(@Param("cid") Long cid, @...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/ContestRecordMapper.java
type ContestRecordMapper (line 20) | @Mapper
method getACInfo (line 23) | List<ContestRecord> getACInfo(@Param("status") Integer status, @Param(...
method getOIContestRecordByRecentSubmission (line 25) | List<ContestRecordVO> getOIContestRecordByRecentSubmission(@Param("cid...
method getOIContestRecordByHighestSubmission (line 29) | List<ContestRecordVO> getOIContestRecordByHighestSubmission(@Param("ci...
method getACMContestRecord (line 33) | List<ContestRecordVO> getACMContestRecord(@Param("cid") Long cid, @Par...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/ContestRegisterMapper.java
type ContestRegisterMapper (line 15) | @Mapper
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/DiscussionLikeMapper.java
type DiscussionLikeMapper (line 7) | @Mapper
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/DiscussionMapper.java
type DiscussionMapper (line 9) | @Mapper
method getDiscussion (line 12) | DiscussionVO getDiscussion(@Param("did") Integer did, @Param("uid") St...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/DiscussionReportMapper.java
type DiscussionReportMapper (line 7) | @Mapper
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/FileMapper.java
type FileMapper (line 12) | @Mapper
method updateFileToDeleteByUidAndType (line 15) | @Update("UPDATE `file` SET `delete` = 1 WHERE `uid` = #{uid} AND `type...
method queryDeleteAvatarList (line 18) | @Select("select * from file where (type = 'avatar' AND `delete` = true)")
method queryCarouselFileList (line 21) | @Select("select * from file where (type = 'carousel')")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/JudgeCaseMapper.java
type JudgeCaseMapper (line 15) | @Mapper
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/JudgeMapper.java
type JudgeMapper (line 23) | @Mapper
method getCommonJudgeList (line 26) | IPage<JudgeVO> getCommonJudgeList(Page<JudgeVO> page, @Param("searchPi...
method getContestJudgeList (line 31) | IPage<JudgeVO> getContestJudgeList(Page<JudgeVO> page, @Param("display...
method getTodayJudgeNum (line 37) | int getTodayJudgeNum();
method getContestProblemCount (line 39) | ProblemCountVO getContestProblemCount(@Param("pid") Long pid, @Param("...
method getProblemCount (line 43) | ProblemCountVO getProblemCount(@Param("pid") Long pid);
method getProblemListCount (line 45) | List<ProblemCountVO> getProblemListCount(@Param("pidList") List<Long> ...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/JudgeServerMapper.java
type JudgeServerMapper (line 7) | @Mapper
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/LanguageMapper.java
type LanguageMapper (line 7) | @Mapper
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/MappingTrainingCategoryMapper.java
type MappingTrainingCategoryMapper (line 7) | @Mapper
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/MsgRemindMapper.java
type MsgRemindMapper (line 12) | @Mapper
method getUserUnreadMsgCount (line 15) | UserUnreadMsgCountVO getUserUnreadMsgCount(@Param("uid") String uid);
method getUserMsg (line 17) | IPage<UserMsgVO> getUserMsg(Page<UserMsgVO> page, @Param("uid") String...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/ProblemCaseMapper.java
type ProblemCaseMapper (line 12) | @Mapper
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/ProblemLanguageMapper.java
type ProblemLanguageMapper (line 7) | @Mapper
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/ProblemMapper.java
type ProblemMapper (line 20) | @Mapper
method getProblemList (line 23) | List<ProblemVO> getProblemList(IPage page, @Param("keyword") String ke...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/ProblemTagMapper.java
type ProblemTagMapper (line 7) | @Mapper
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/RemoteJudgeAccountMapper.java
type RemoteJudgeAccountMapper (line 12) | @Mapper
method getAvailableAccount (line 15) | @Select("select * from `remote_judge_account` where `oj` = #{oj} and `...
method updateAccountStatusById (line 18) | @Update("update `remote_judge_account` set `status` = 0 where `id` = #...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/ReplyMapper.java
type ReplyMapper (line 13) | @Mapper
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/RoleAuthMapper.java
type RoleAuthMapper (line 17) | @Mapper
method getRoleAuths (line 20) | RoleAuthsVO getRoleAuths(@Param("rid") long rid);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/RoleMapper.java
type RoleMapper (line 15) | @Mapper
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/SessionMapper.java
type SessionMapper (line 7) | @Mapper
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/TagClassificationMapper.java
type TagClassificationMapper (line 12) | @Mapper
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/TagMapper.java
type TagMapper (line 15) | @Mapper
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/TrainingCategoryMapper.java
type TrainingCategoryMapper (line 8) | @Mapper
method getTrainingCategoryByTrainingId (line 11) | public TrainingCategory getTrainingCategoryByTrainingId(@Param("tid") ...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/TrainingMapper.java
type TrainingMapper (line 16) | @Mapper
method getTrainingList (line 19) | List<TrainingVO> getTrainingList(@Param("categoryId") Long categoryId,...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/TrainingProblemMapper.java
type TrainingProblemMapper (line 11) | @Mapper
method getTrainingProblemCount (line 14) | public List<Long> getTrainingProblemCount(@Param("tid") Long tid);
method getTrainingProblemList (line 16) | public List<ProblemVO> getTrainingProblemList(@Param("tid") Long tid);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/TrainingRecordMapper.java
type TrainingRecordMapper (line 17) | @Mapper
method getTrainingRecord (line 20) | public List<TrainingRecordVO> getTrainingRecord(@Param("tid") Long tid);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/TrainingRegisterMapper.java
type TrainingRegisterMapper (line 7) | @Mapper
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/UserAcproblemMapper.java
type UserAcproblemMapper (line 15) | @Mapper
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/UserInfoMapper.java
type UserInfoMapper (line 20) | @Mapper
method addUser (line 23) | int addUser(RegisterDTO registerDTO);
method getSuperAdminUidList (line 25) | List<String> getSuperAdminUidList(@Param("roleId") Long roleId);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/UserRecordMapper.java
type UserRecordMapper (line 21) | @Mapper
method getACMRankList (line 24) | IPage<ACMRankVO> getACMRankList(Page<ACMRankVO> page, @Param("uidList"...
method getRecent7ACRank (line 26) | List<ACMRankVO> getRecent7ACRank();
method getOIRankList (line 28) | IPage<OIRankVO> getOIRankList(Page<OIRankVO> page, @Param("uidList") L...
method getUserHomeInfo (line 30) | UserHomeVO getUserHomeInfo(@Param("uid") String uid, @Param("username"...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/UserRoleMapper.java
type UserRoleMapper (line 22) | @Mapper
method getUserRoles (line 25) | UserRolesVO getUserRoles(@Param("uid") String uid, @Param("username") ...
method getRolesByUid (line 27) | List<Role> getRolesByUid(@Param("uid") String uid);
method getUserList (line 29) | IPage<UserRolesVO> getUserList(Page<UserRolesVO> page, @Param("limit")...
method getAdminUserList (line 33) | IPage<UserRolesVO> getAdminUserList(Page<UserRolesVO> page,
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/UserSysNoticeMapper.java
type UserSysNoticeMapper (line 11) | @Mapper
method getSysOrMineNotice (line 14) | IPage<SysMsgVO> getSysOrMineNotice(Page<SysMsgVO> page, @Param("uid") ...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/AdminEditUserDTO.java
class AdminEditUserDTO (line 12) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/AnnouncementDTO.java
class AnnouncementDTO (line 13) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/ApplyResetPasswordDTO.java
class ApplyResetPasswordDTO (line 12) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/ChangeEmailDTO.java
class ChangeEmailDTO (line 10) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/ChangePasswordDTO.java
class ChangePasswordDTO (line 10) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/CheckAcDTO.java
class CheckAcDTO (line 12) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/CheckUsernameOrEmailDTO.java
class CheckUsernameOrEmailDTO (line 10) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/ContestPrintDTO.java
class ContestPrintDTO (line 12) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/ContestProblemDTO.java
class ContestProblemDTO (line 14) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/ContestRankDTO.java
class ContestRankDTO (line 12) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/DbAndRedisConfigDTO.java
class DbAndRedisConfigDTO (line 14) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/EmailConfigDTO.java
class EmailConfigDTO (line 14) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/LoginDTO.java
class LoginDTO (line 14) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/PidListDTO.java
class PidListDTO (line 15) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/ProblemDTO.java
class ProblemDTO (line 14) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/QDOJProblemDTO.java
class QDOJProblemDTO (line 17) | @ToString
method getProblem (line 33) | public Problem getProblem() {
method setProblem (line 37) | public void setProblem(Problem problem) {
method getLanguages (line 41) | public List<String> getLanguages() {
method setLanguages (line 45) | public void setLanguages(List<String> languages) {
method getSamples (line 49) | public List<ProblemCase> getSamples() {
method setSamples (line 53) | public void setSamples(List<ProblemCase> samples) {
method getTags (line 57) | public List<String> getTags() {
method setTags (line 61) | public void setTags(List<String> tags) {
method getCodeTemplates (line 65) | public List<CodeTemplate> getCodeTemplates() {
method setCodeTemplates (line 69) | public void setCodeTemplates(List<CodeTemplate> codeTemplates) {
method getIsSpj (line 73) | public Boolean getIsSpj() {
method setIsSpj (line 77) | public void setIsSpj(Boolean spj) {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/RegisterContestDTO.java
class RegisterContestDTO (line 12) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/RegisterDTO.java
class RegisterDTO (line 18) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/RegisterTrainingDTO.java
class RegisterTrainingDTO (line 12) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/ReplyDTO.java
class ReplyDTO (line 12) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/ResetPasswordDTO.java
class ResetPasswordDTO (line 14) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/SubmitIdListDTO.java
class SubmitIdListDTO (line 13) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/SwitchConfigDTO.java
class SwitchConfigDTO (line 14) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/TestEmailDTO.java
class TestEmailDTO (line 10) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/ToJudgeDTO.java
class ToJudgeDTO (line 13) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/TrainingDTO.java
class TrainingDTO (line 13) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/TrainingProblemDTO.java
class TrainingProblemDTO (line 12) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/UserReadContestAnnouncementDTO.java
class UserReadContestAnnouncementDTO (line 13) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/WebConfigDTO.java
class WebConfigDTO (line 14) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/ACMContestRankVO.java
class ACMContestRankVO (line 14) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/ACMRankVO.java
class ACMRankVO (line 14) | @ApiModel(value = "ACM排行榜数据类ACMRankVO", description = "")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/AccessVO.java
class AccessVO (line 11) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/AdminContestVO.java
class AdminContestVO (line 15) | @ApiModel(value = "管理比赛的回传实体", description = "")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/AdminSysNoticeVO.java
class AdminSysNoticeVO (line 14) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/AnnouncementVO.java
class AnnouncementVO (line 18) | @ApiModel(value = "公告数据", description = "")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/CaptchaVO.java
class CaptchaVO (line 11) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/ChangeAccountVO.java
class ChangeAccountVO (line 10) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/CheckUsernameOrEmailVO.java
class CheckUsernameOrEmailVO (line 10) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/CommentListVO.java
class CommentListVO (line 13) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/CommentVO.java
class CommentVO (line 16) | @ApiModel(value = "评论数据列表VO", description = "")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/ContestOutsideInfo.java
class ContestOutsideInfo (line 15) | @ApiModel(value = "赛外排行榜所需的比赛信息,同时包括题目题号、气球颜色", description = "")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/ContestProblemVO.java
class ContestProblemVO (line 16) | @ApiModel(value = "比赛题目列表格式数据ContestProblemVO", description = "")
method compareTo (line 44) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/ContestRecordVO.java
class ContestRecordVO (line 15) | @ApiModel(value = "用户在比赛的记录", description = "")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/ContestRegisterCountVO.java
class ContestRegisterCountVO (line 14) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/ContestVO.java
class ContestVO (line 17) | @ApiModel(value = "比赛信息", description = "")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/DiscussionVO.java
class DiscussionVO (line 17) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/ExcelIpVO.java
class ExcelIpVO (line 14) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/ExcelUserVO.java
class ExcelUserVO (line 13) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/ImportProblemVO.java
class ImportProblemVO (line 16) | @ToString
method getProblem (line 38) | public Map<String, Object> getProblem() {
method setProblem (line 42) | public void setProblem(HashMap<String, Object> problem) {
method getLanguages (line 46) | public List<String> getLanguages() {
method setLanguages (line 50) | public void setLanguages(List<String> languages) {
method getSamples (line 54) | public List<HashMap<String, Object>> getSamples() {
method setSamples (line 58) | public void setSamples(List<HashMap<String, Object>> samples) {
method getTags (line 62) | public List<String> getTags() {
method setTags (line 66) | public void setTags(List<String> tags) {
method getCodeTemplates (line 70) | public List<HashMap<String, String>> getCodeTemplates() {
method setCodeTemplates (line 74) | public void setCodeTemplates(List<HashMap<String, String>> codeTemplat...
method getJudgeMode (line 78) | public String getJudgeMode() {
method setJudgeMode (line 82) | public void setJudgeMode(String judgeMode) {
method getUserExtraFile (line 86) | public HashMap<String, String> getUserExtraFile() {
method setUserExtraFile (line 90) | public void setUserExtraFile(HashMap<String, String> userExtraFile) {
method getJudgeExtraFile (line 94) | public HashMap<String, String> getJudgeExtraFile() {
method setJudgeExtraFile (line 98) | public void setJudgeExtraFile(HashMap<String, String> judgeExtraFile) {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/JudgeVO.java
class JudgeVO (line 16) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/OIContestRankVO.java
class OIContestRankVO (line 15) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/OIRankVO.java
class OIRankVO (line 14) | @ApiModel(value = "OI排行榜数据类OIRankVO", description = "")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/ProblemCountVO.java
class ProblemCountVO (line 17) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/ProblemInfoVO.java
class ProblemInfoVO (line 16) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/ProblemTagVO.java
class ProblemTagVO (line 14) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/ProblemVO.java
class ProblemVO (line 16) | @ApiModel(value = "题目列表查询对象ProblemVO", description = "")
method setProblemCountVO (line 73) | public void setProblemCountVO(ProblemCountVO problemCountVO) {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/RandomProblemVO.java
class RandomProblemVO (line 11) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/RegisterCodeVO.java
class RegisterCodeVO (line 11) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/RoleAuthsVO.java
class RoleAuthsVO (line 16) | @ApiModel(value = "角色以及其对应的权限列表", description = "")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/SubmissionInfoVO.java
class SubmissionInfoVO (line 13) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/SysMsgVO.java
class SysMsgVO (line 14) | @ApiModel(value = "用户的系统消息", description = "")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/TrainingRankVO.java
class TrainingRankVO (line 14) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/TrainingRecordVO.java
class TrainingRecordVO (line 12) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/TrainingVO.java
class TrainingVO (line 15) | @ApiModel(value = "训练题单查询对象TrainingVO", description = "")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/UserHomeVO.java
class UserHomeVO (line 15) | @ApiModel(value = "用户主页的数据格式类UserHomeVO", description = "")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/UserInfoVO.java
class UserInfoVO (line 13) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/UserMsgVO.java
class UserMsgVO (line 16) | @ApiModel(value = "用户的讨论贴被评论的、被点赞、评论被回复的消息VO", description = "")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/UserRolesVO.java
class UserRolesVO (line 17) | @ApiModel(value = "用户信息以及其对应的角色", description = "")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/UserUnreadMsgCountVO.java
class UserUnreadMsgCountVO (line 14) | @ApiModel(value = "用户未读消息统计", description = "")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/account/PassportService.java
type PassportService (line 19) | public interface PassportService {
method login (line 21) | UserInfoVO login(LoginDTO loginDTO, HttpServletResponse response, Http...
method getRegisterCode (line 23) | RegisterCodeVO getRegisterCode(String email);
method register (line 25) | void register(RegisterDTO registerDTO);
method applyResetPassword (line 27) | void applyResetPassword(ApplyResetPasswordDTO applyResetPasswordDTO);
method resetPassword (line 29) | void resetPassword(ResetPasswordDTO resetPasswordDTO);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/account/impl/PassportServiceImpl.java
class PassportServiceImpl (line 48) | @Service
method login (line 70) | @Override
method getRegisterCode (line 127) | @Override
method register (line 175) | @Override
method applyResetPassword (line 214) | @Override
method resetPassword (line 250) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/announcement/AdminAnnouncementService.java
type AdminAnnouncementService (line 12) | public interface AdminAnnouncementService {
method getAnnouncementList (line 14) | IPage<AnnouncementVO> getAnnouncementList(Integer limit, Integer curre...
method deleteAnnouncement (line 16) | void deleteAnnouncement(long aid);
method addAnnouncement (line 18) | void addAnnouncement(Announcement announcement);
method updateAnnouncement (line 20) | void updateAnnouncement(Announcement announcement);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/announcement/impl/AdminAnnouncementServiceImpl.java
class AdminAnnouncementServiceImpl (line 17) | @Service
method getAnnouncementList (line 23) | @Override
method deleteAnnouncement (line 35) | @Override
method addAnnouncement (line 43) | @Override
method updateAnnouncement (line 51) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/contest/AdminContestAnnouncementService.java
type AdminContestAnnouncementService (line 13) | public interface AdminContestAnnouncementService {
method getAnnouncementList (line 15) | IPage<AnnouncementVO> getAnnouncementList(Integer limit, Integer curre...
method deleteAnnouncement (line 17) | void deleteAnnouncement(Long aid);
method addAnnouncement (line 19) | void addAnnouncement(AnnouncementDTO announcementDTO);
method updateAnnouncement (line 21) | void updateAnnouncement(AnnouncementDTO announcementDTO);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/contest/AdminContestProblemService.java
type AdminContestProblemService (line 16) | public interface AdminContestProblemService {
method getProblemList (line 18) | Map<String, Object> getProblemList(Integer limit, Integer currentPage,...
method getProblem (line 21) | Problem getProblem(Long pid);
method deleteProblem (line 23) | void deleteProblem(Long pid, Long cid);
method addProblem (line 25) | Map<Object, Object> addProblem(ProblemDTO problemDTO);
method updateProblem (line 27) | void updateProblem(ProblemDTO problemDTO);
method getContestProblem (line 29) | ContestProblem getContestProblem(Long cid, Long pid);
method setContestProblem (line 31) | ContestProblem setContestProblem(ContestProblem contestProblem);
method addProblemFromPublic (line 33) | void addProblemFromPublic(ContestProblemDTO contestProblemDTO);
method importContestRemoteOjProblem (line 35) | void importContestRemoteOjProblem(String name, String problemId, Long ...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/contest/AdminContestService.java
type AdminContestService (line 13) | public interface AdminContestService {
method getContestList (line 15) | IPage<Contest> getContestList(Integer limit, Integer currentPage, Stri...
method getContest (line 17) | AdminContestVO getContest(Long cid);
method deleteContest (line 19) | void deleteContest(Long cid);
method addContest (line 21) | void addContest(AdminContestVO adminContestVO);
method updateContest (line 23) | void updateContest(AdminContestVO adminContestVO);
method changeContestVisible (line 25) | void changeContestVisible(Long cid, String uid, Boolean visible);
method cloneContest (line 27) | void cloneContest(Long cid);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/contest/impl/AdminContestAnnouncementServiceImpl.java
class AdminContestAnnouncementServiceImpl (line 20) | @Service
method getAnnouncementList (line 28) | @Override
method deleteAnnouncement (line 40) | @Override
method addAnnouncement (line 48) | @Override
method updateAnnouncement (line 59) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/contest/impl/AdminContestProblemServiceImpl.java
class AdminContestProblemServiceImpl (line 42) | @Service
method getProblemList (line 57) | @Override
method getProblem (line 136) | @Override
method deleteProblem (line 157) | @Override
method addProblem (line 179) | @Override
method updateProblem (line 202) | @Override
method getContestProblem (line 233) | @Override
method setContestProblem (line 244) | @Override
method addProblemFromPublic (line 256) | @Override
method importContestRemoteOjProblem (line 286) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/contest/impl/AdminContestServiceImpl.java
class AdminContestServiceImpl (line 43) | @Service
method getContestList (line 55) | @Override
method getContest (line 76) | @Override
method deleteContest (line 100) | @Override
method addContest (line 110) | @Override
method updateContest (line 122) | @Override
method changeContestVisible (line 150) | @Override
method cloneContest (line 166) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/discussion/AdminDiscussionService.java
type AdminDiscussionService (line 15) | public interface AdminDiscussionService {
method updateDiscussion (line 17) | void updateDiscussion(Discussion discussion);
method removeDiscussion (line 19) | void removeDiscussion(List<Integer> didList);
method getDiscussionReport (line 21) | IPage<DiscussionReport> getDiscussionReport(Integer limit, Integer cur...
method updateDiscussionReport (line 23) | void updateDiscussionReport(DiscussionReport discussionReport);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/discussion/impl/AdminDiscussionServiceImpl.java
class AdminDiscussionServiceImpl (line 22) | @Service
method updateDiscussion (line 30) | @Override
method removeDiscussion (line 38) | @Override
method getDiscussionReport (line 46) | @Override
method updateDiscussionReport (line 54) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/problem/AdminProblemService.java
type AdminProblemService (line 18) | public interface AdminProblemService {
method getProblemList (line 20) | IPage<Problem> getProblemList(Integer limit, Integer currentPage, Stri...
method getProblem (line 22) | Problem getProblem(Long pid);
method deleteProblem (line 24) | void deleteProblem(Long pid);
method addProblem (line 26) | void addProblem(ProblemDTO problemDTO);
method updateProblem (line 28) | void updateProblem(ProblemDTO problemDTO);
method getProblemCases (line 30) | List<ProblemCase> getProblemCases(Long pid, Boolean isUpload);
method compileSpj (line 32) | CommonResult compileSpj(CompileDTO compileDTO);
method compileInteractive (line 34) | CommonResult compileInteractive(CompileDTO compileDTO);
method importRemoteOjProblem (line 36) | void importRemoteOjProblem(String name, String problemId);
method changeProblemAuth (line 38) | void changeProblemAuth(Problem problem);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/problem/RemoteProblemService.java
class RemoteProblemService (line 21) | @Component
method getOtherOJProblemInfo (line 35) | public AbstractProblemCrawler.RemoteProblemInfo getOtherOJProblemInfo(...
method adminAddOtherOJProblem (line 40) | @Transactional(rollbackFor = Exception.class)
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/problem/impl/AdminProblemServiceImpl.java
class AdminProblemServiceImpl (line 46) | @Service
method getProblemList (line 67) | @Override
method getProblem (line 103) | @Override
method deleteProblem (line 125) | @Override
method addProblem (line 137) | @Override
method updateProblem (line 152) | @Override
method getProblemCases (line 193) | @Override
method compileSpj (line 203) | @Override
method compileInteractive (line 209) | @Override
method importRemoteOjProblem (line 215) | @Override
method changeProblemAuth (line 242) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/rejudge/RejudgeService.java
type RejudgeService (line 11) | public interface RejudgeService {
method rejudge (line 13) | Judge rejudge(Long submitId);
method rejudgeContestProblem (line 15) | void rejudgeContestProblem(Long cid, Long pid);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/rejudge/impl/RejudgeServiceImpl.java
class RejudgeServiceImpl (line 33) | @Service
method rejudge (line 51) | @Override
method rejudgeContestProblem (line 103) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/system/ConfigService.java
type ConfigService (line 14) | public interface ConfigService {
method getServiceInfo (line 23) | JSONObject getServiceInfo();
method getJudgeServiceInfo (line 25) | List<JSONObject> getJudgeServiceInfo();
method getWebConfig (line 27) | WebConfigDTO getWebConfig();
method setWebConfig (line 29) | void setWebConfig(WebConfigDTO webConfigDTO);
method deleteHomeCarousel (line 31) | void deleteHomeCarousel(Long id);
method getEmailConfig (line 33) | EmailConfigDTO getEmailConfig();
method setEmailConfig (line 35) | void setEmailConfig(EmailConfigDTO config);
method testEmail (line 37) | void testEmail(TestEmailDTO testEmailDTO);
method getDbAndRedisConfig (line 39) | DbAndRedisConfigDTO getDbAndRedisConfig();
method setDbAndRedisConfig (line 41) | void setDbAndRedisConfig(DbAndRedisConfigDTO config);
method sendNewConfigToNacos (line 43) | boolean sendNewConfigToNacos();
method getSwitchConfig (line 45) | SwitchConfigDTO getSwitchConfig();
method setSwitchConfig (line 47) | void setSwitchConfig(SwitchConfigDTO config);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/system/DashboardService.java
type DashboardService (line 12) | public interface DashboardService {
method getRecentSession (line 14) | Session getRecentSession();
method getDashboardInfo (line 16) | Map<Object, Object> getDashboardInfo();
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/system/impl/ConfigServiceImpl.java
class ConfigServiceImpl (line 39) | @Service
method getServiceInfo (line 84) | @Override
method getJudgeServiceInfo (line 113) | @Override
method getWebConfig (line 126) | @Override
method setWebConfig (line 147) | @Override
method deleteHomeCarousel (line 186) | @Override
method getEmailConfig (line 200) | @Override
method setEmailConfig (line 208) | @Override
method testEmail (line 235) | @Override
method getDbAndRedisConfig (line 249) | @Override
method setDbAndRedisConfig (line 258) | @Override
method sendNewConfigToNacos (line 295) | @Override
method getSwitchConfig (line 316) | @Override
method setSwitchConfig (line 328) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/system/impl/DashboardServiceImpl.java
class DashboardServiceImpl (line 24) | @Service
method getRecentSession (line 36) | @Override
method getDashboardInfo (line 50) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/tag/AdminTagService.java
type AdminTagService (line 14) | public interface AdminTagService {
method addTag (line 16) | Tag addTag(Tag tag);
method updateTag (line 18) | void updateTag(Tag tag);
method deleteTag (line 20) | void deleteTag(Long tid);
method getTagClassification (line 22) | List<TagClassification> getTagClassification(String oj);
method addTagClassification (line 24) | TagClassification addTagClassification(TagClassification tagClassifica...
method updateTagClassification (line 26) | void updateTagClassification(TagClassification tagClassification);
method deleteTagClassification (line 28) | void deleteTagClassification(Long tcid);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/tag/impl/AdminTagServiceImpl.java
class AdminTagServiceImpl (line 20) | @Service
method addTag (line 27) | @Override
method updateTag (line 44) | @Override
method deleteTag (line 52) | @Override
method getTagClassification (line 60) | @Override
method addTagClassification (line 72) | @Override
method updateTagClassification (line 89) | @Override
method deleteTagClassification (line 97) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/training/AdminTrainingCategoryService.java
type AdminTrainingCategoryService (line 10) | public interface AdminTrainingCategoryService {
method addTrainingCategory (line 12) | TrainingCategory addTrainingCategory(TrainingCategory trainingCategory);
method updateTrainingCategory (line 14) | void updateTrainingCategory(TrainingCategory trainingCategory);
method deleteTrainingCategory (line 16) | void deleteTrainingCategory(Long cid);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/training/AdminTrainingProblemService.java
type AdminTrainingProblemService (line 14) | public interface AdminTrainingProblemService {
method getProblemList (line 16) | HashMap<String, Object> getProblemList(Integer limit, Integer currentP...
method updateProblem (line 19) | void updateProblem(TrainingProblem trainingProblem);
method deleteProblem (line 21) | void deleteProblem(Long pid, Long tid);
method addProblemFromPublic (line 23) | void addProblemFromPublic(TrainingProblemDTO trainingProblemDTO);
method importTrainingRemoteOjProblem (line 25) | void importTrainingRemoteOjProblem(String name, String problemId, Long...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/training/AdminTrainingRecordService.java
class AdminTrainingRecordService (line 29) | @Component
method syncUserSubmissionToRecordByTid (line 43) | @Async
method syncAlreadyRegisterUserRecord (line 64) | @Async
method checkSyncRecord (line 74) | @Async
method syncNewProblemUserSubmissionToRecord (line 88) | private void syncNewProblemUserSubmissionToRecord(Long pid, Long tpId,...
method syncAllUserProblemRecord (line 99) | private void syncAllUserProblemRecord(Long tid) {
method saveBatchNewRecordByJudgeList (line 125) | private void saveBatchNewRecordByJudgeList(List<Judge> judgeList, Long...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/training/AdminTrainingService.java
type AdminTrainingService (line 12) | public interface AdminTrainingService {
method getTrainingList (line 14) | IPage<Training> getTrainingList(Integer limit, Integer currentPage, St...
method getTraining (line 16) | TrainingDTO getTraining(Long tid);
method deleteTraining (line 18) | void deleteTraining(Long tid);
method addTraining (line 20) | void addTraining(TrainingDTO trainingDTO);
method updateTraining (line 22) | void updateTraining(TrainingDTO trainingDTO);
method changeTrainingStatus (line 24) | void changeTrainingStatus(Long tid, String author, Boolean status);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/training/impl/AdminTrainingCategoryServiceImpl.java
class AdminTrainingCategoryServiceImpl (line 17) | @Service
method addTrainingCategory (line 23) | @Override
method updateTrainingCategory (line 41) | @Override
method deleteTrainingCategory (line 49) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/training/impl/AdminTrainingProblemServiceImpl.java
class AdminTrainingProblemServiceImpl (line 36) | @Service
method getProblemList (line 53) | @Override
method updateProblem (line 115) | @Override
method deleteProblem (line 124) | @Override
method addProblemFromPublic (line 152) | @Override
method importTrainingRemoteOjProblem (line 183) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/training/impl/AdminTrainingServiceImpl.java
class AdminTrainingServiceImpl (line 36) | @Service
method getTrainingList (line 50) | @Override
method getTraining (line 72) | @Override
method deleteTraining (line 105) | @Override
method addTraining (line 114) | @Override
method updateTraining (line 138) | @Override
method changeTrainingStatus (line 195) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/user/AdminUserService.java
type AdminUserService (line 15) | public interface AdminUserService {
method getUserList (line 17) | IPage<UserRolesVO> getUserList(Integer limit, Integer currentPage, Str...
method editUser (line 19) | void editUser(AdminEditUserDTO adminEditUserDTO);
method deleteUser (line 21) | void deleteUser(List<String> deleteUserIdList);
method forbidUser (line 23) | void forbidUser(List<String> deleteUserIdList);
method insertBatchUser (line 25) | void insertBatchUser(List<List<String>> users);
method generateUser (line 27) | Map<Object, Object> generateUser(Map<String, Object> params);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/user/UserRecordService.java
type UserRecordService (line 19) | public interface UserRecordService {
method getRecent7ACRank (line 21) | List<ACMRankVO> getRecent7ACRank();
method getUserHomeInfo (line 23) | UserHomeVO getUserHomeInfo(String uid, String username);
method getOIRankList (line 25) | IPage<OIRankVO> getOIRankList(Page<OIRankVO> page, List<String> uidList);
method getACMRankList (line 27) | IPage<ACMRankVO> getACMRankList(Page<ACMRankVO> page, List<String> uid...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/user/impl/AdminUserServiceImpl.java
class AdminUserServiceImpl (line 41) | @Service
method getUserList (line 53) | @Override
method editUser (line 67) | @Override
method deleteUser (line 116) | @Override
method forbidUser (line 124) | @Override
method insertBatchUser (line 135) | @Override
method generateUser (line 196) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/user/impl/UserRecordServiceImpl.java
class UserRecordServiceImpl (line 23) | @Service
method getRecent7ACRank (line 29) | @Override
method getUserHomeInfo (line 34) | @Override
method getOIRankList (line 39) | @Override
method getACMRankList (line 44) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/email/EmailService.java
class EmailService (line 30) | @Component
method getMailSender (line 69) | private JavaMailSenderImpl getMailSender() {
method isOk (line 93) | public boolean isOk() {
method sendCode (line 107) | @Async
method sendResetPassword (line 148) | @Async
method testEmail (line 195) | @Async
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/ContestFileService.java
type ContestFileService (line 11) | public interface ContestFileService {
method downloadContestRank (line 13) | void downloadContestRank(Long cid, Boolean forceRefresh, Boolean remov...
method downloadContestAcSubmission (line 16) | void downloadContestAcSubmission(Long cid, Boolean excludeAdmin, Boole...
method downloadContestPrintText (line 18) | void downloadContestPrintText(Long id, HttpServletResponse response);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/ImageService.java
type ImageService (line 12) | public interface ImageService {
method uploadAvatar (line 14) | Map<Object, Object> uploadAvatar(MultipartFile image);
method uploadCarouselImg (line 16) | Map<Object, Object> uploadCarouselImg(MultipartFile image);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/ImportDSOJProblemService.java
type ImportDSOJProblemService (line 8) | public interface ImportDSOJProblemService {
method importDSOJProblem (line 10) | void importDSOJProblem();
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/ImportFpsProblemService.java
type ImportFpsProblemService (line 12) | public interface ImportFpsProblemService {
method importFPSProblem (line 21) | void importFPSProblem(MultipartFile file) throws IOException;
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/ImportLOJProblemService.java
type ImportLOJProblemService (line 8) | public interface ImportLOJProblemService {
method importLOJProblem (line 10) | boolean importLOJProblem(Integer problemId);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/ImportQDUOJProblemService.java
type ImportQDUOJProblemService (line 10) | public interface ImportQDUOJProblemService {
method importQDOJProblem (line 19) | void importQDOJProblem(MultipartFile file);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/MarkDownFileService.java
type MarkDownFileService (line 13) | public interface MarkDownFileService {
method uploadMDImg (line 15) | Map<Object, Object> uploadMDImg(MultipartFile image);
method deleteMDImg (line 17) | void deleteMDImg(Long fileId);
method uploadMd (line 19) | Map<Object, Object> uploadMd(MultipartFile file);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/ProblemFileService.java
type ProblemFileService (line 13) | public interface ProblemFileService {
method importProblem (line 22) | void importProblem(MultipartFile file);
method exportProblem (line 32) | void exportProblem(List<Long> pidList, HttpServletResponse response);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/TestCaseService.java
type TestCaseService (line 13) | public interface TestCaseService {
method uploadTestcaseZip (line 15) | Map<Object, Object> uploadTestcaseZip(MultipartFile file);
method downloadTestcase (line 17) | void downloadTestcase(Long pid, HttpServletResponse response);
method downloadSingleTestCase (line 19) | void downloadSingleTestCase(Long caseId, String inputData, String outp...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/UserFileService.java
type UserFileService (line 11) | public interface UserFileService {
method generateUserExcel (line 13) | void generateUserExcel(String key, HttpServletResponse response) throw...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/impl/ContestFileServiceImpl.java
class ContestFileServiceImpl (line 54) | @Service
method distinctByKey (line 81) | private static <T> Predicate<T> distinctByKey(Function<? super T, ?> k...
method languageToFileSuffix (line 86) | private static String languageToFileSuffix(String language) {
method downloadContestRank (line 137) | @Override
method getExcelIpVO (line 189) | private List<ExcelIpVO> getExcelIpVO(Contest contest) {
method downloadContestAcSubmission (line 206) | @Override
method splitByProblem (line 259) | private void splitByProblem(boolean isACM, List<ContestProblem> contes...
method splitCodeByUser (line 298) | private void splitCodeByUser(boolean isACM, List<ContestProblem> conte...
method downloadContestPrintText (line 346) | @Override
method getContestRankExcelHead (line 359) | public List<List<String>> getContestRankExcelHead(List<String> contest...
method changeACMContestRankToExcelRowList (line 407) | public List<List<Object>> changeACMContestRankToExcelRowList(List<ACMC...
method changeOIContestRankToExcelRowList (line 463) | public List<List<Object>> changeOIContestRankToExcelRowList(List<OICon...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/impl/ImageServiceImpl.java
class ImageServiceImpl (line 32) | @Service
method uploadAvatar (line 45) | @Override
method uploadCarouselImg (line 102) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/impl/ImportDSOJProblemServiceImpl.java
class ImportDSOJProblemServiceImpl (line 36) | @Service
method main (line 50) | public static void main(String[] args) {
method importDSOJProblem (line 77) | @Transactional(rollbackFor = Exception.class)
method processTestCase (line 102) | private void processTestCase(String fileDir, String prefix, ProblemDTO...
method getProblemDTO (line 169) | private ProblemDTO getProblemDTO(String id, String content) {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/impl/ImportFpsProblemServiceImpl.java
class ImportFpsProblemServiceImpl (line 41) | @Service
method importFPSProblem (line 73) | @Override
method parseFps (line 91) | private List<ProblemDTO> parseFps(InputStream inputStream, String user...
method getTimeLimit (line 257) | private Integer getTimeLimit(String version, Element item) {
method getMemoryLimit (line 273) | private Integer getMemoryLimit(Element item) {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/impl/ImportLOJProblemServiceImpl.java
class ImportLOJProblemServiceImpl (line 36) | @Service
method importLOJProblem (line 49) | public boolean importLOJProblem(Integer problemId) {
method getProblemDTO (line 59) | private ProblemDTO getProblemDTO(Integer problemId) {
method downloadProblemFiles (line 121) | private void downloadProblemFiles(ProblemDTO problemDTO, Integer probl...
class LOJProblem (line 192) | @Data
class Contents (line 203) | @Data
class Section (line 208) | @Data
class JudgeInfo (line 216) | @Data
class Task (line 222) | @Data
class Testcase (line 226) | @Data
class Sample (line 234) | @Data
class LOJTag (line 240) | @Data
class DownloadInfo (line 246) | @Data
class Info (line 250) | @Data
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/impl/ImportQDUOJProblemServiceImpl.java
class ImportQDUOJProblemServiceImpl (line 47) | @Service
method importQDOJProblem (line 68) | @Override
method QDOJProblemToProblemVO (line 186) | private QDOJProblemDTO QDOJProblemToProblemVO(JSONObject problemJson) {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/impl/MarkDownFileServiceImpl.java
class MarkDownFileServiceImpl (line 29) | @Service
method uploadMDImg (line 38) | @Override
method deleteMDImg (line 77) | @Override
method uploadMd (line 110) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/impl/ProblemFileServiceImpl.java
class ProblemFileServiceImpl (line 44) | @Service
method importProblem (line 67) | @Override
method exportProblem (line 230) | @Override
class ExportProblemTask (line 296) | class ExportProblemTask implements Callable<Void> {
method ExportProblemTask (line 302) | public ExportProblemTask(String workDir, Long pid, HashMap<Long, Str...
method call (line 309) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/impl/TestCaseServiceImpl.java
class TestCaseServiceImpl (line 36) | @Service
method uploadTestcaseZip (line 46) | @Override
method downloadTestcase (line 126) | @Override
method downloadSingleTestCase (line 173) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/impl/UserFileServiceImpl.java
class UserFileServiceImpl (line 22) | @Service
method generateUserExcel (line 29) | @Override
method getGenerateUsers (line 37) | private List<ExcelUserVO> getGenerateUsers(String key) {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/msg/AdminNoticeService.java
type AdminNoticeService (line 14) | public interface AdminNoticeService {
method getSysNotice (line 16) | IPage<AdminSysNoticeVO> getSysNotice(Integer limit, Integer currentPag...
method addSysNotice (line 18) | void addSysNotice(AdminSysNotice adminSysNotice);
method deleteSysNotice (line 20) | void deleteSysNotice(Long id);
method updateSysNotice (line 22) | void updateSysNotice(AdminSysNotice adminSysNotice);
method syncNoticeToNewRegisterBatchUser (line 24) | void syncNoticeToNewRegisterBatchUser(List<String> uidList);
method addSingleNoticeToUser (line 26) | void addSingleNoticeToUser(String adminId, String recipientId, String ...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/msg/NoticeService.java
type NoticeService (line 12) | public interface NoticeService {
method getSysNotice (line 14) | IPage<SysMsgVO> getSysNotice(Integer limit, Integer currentPage);
method getMineNotice (line 16) | IPage<SysMsgVO> getMineNotice(Integer limit, Integer currentPage);
method updateSysOrMineMsgRead (line 18) | void updateSysOrMineMsgRead(IPage<SysMsgVO> userMsgList);
method syncNoticeToNewRegisterUser (line 20) | void syncNoticeToNewRegisterUser(String uid);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/msg/UserMessageService.java
type UserMessageService (line 13) | public interface UserMessageService {
method getUnreadMsgCount (line 15) | UserUnreadMsgCountVO getUnreadMsgCount();
method cleanMsg (line 17) | void cleanMsg(String type, Long id);
method getCommentMsg (line 19) | IPage<UserMsgVO> getCommentMsg(Integer limit, Integer currentPage);
method getReplyMsg (line 21) | IPage<UserMsgVO> getReplyMsg(Integer limit, Integer currentPage);
method getLikeMsg (line 23) | IPage<UserMsgVO> getLikeMsg(Integer limit, Integer currentPage);
method updateUserMsgRead (line 25) | void updateUserMsgRead(IPage<UserMsgVO> userMsgList);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/msg/impl/AdminNoticeServiceImpl.java
class AdminNoticeServiceImpl (line 26) | @Service
method getSysNotice (line 34) | @Override
method addSysNotice (line 48) | @Override
method deleteSysNotice (line 57) | @Override
method updateSysNotice (line 66) | @Override
method syncNoticeToNewRegisterBatchUser (line 74) | @Override
method addSingleNoticeToUser (line 94) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/msg/impl/NoticeServiceImpl.java
class NoticeServiceImpl (line 29) | @Service
method getSysNotice (line 39) | @Override
method getMineNotice (line 57) | @Override
method updateSysOrMineMsgRead (line 75) | @Override
method syncNoticeToNewRegisterUser (line 88) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/msg/impl/UserMessageServiceImpl.java
class UserMessageServiceImpl (line 39) | @Service
method getUnreadMsgCount (line 57) | @Override
method cleanMsg (line 68) | @Override
method getCommentMsg (line 78) | @Override
method getReplyMsg (line 93) | @Override
method getLikeMsg (line 110) | @Override
method cleanMsgByType (line 127) | private boolean cleanMsgByType(String type, Long id, String uid) {
method getUserMsgList (line 145) | private IPage<UserMsgVO> getUserMsgList(String uid, String action, int...
method getUserDiscussMsgList (line 166) | private IPage<UserMsgVO> getUserDiscussMsgList(IPage<UserMsgVO> userMs...
method getUserReplyMsgList (line 183) | private IPage<UserMsgVO> getUserReplyMsgList(IPage<UserMsgVO> userMsgL...
method getUserLikeMsgList (line 240) | private IPage<UserMsgVO> getUserLikeMsgList(IPage<UserMsgVO> userMsgLi...
method updateUserMsgRead (line 262) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/AccountService.java
type AccountService (line 16) | public interface AccountService {
method checkUsernameOrEmail (line 25) | CheckUsernameOrEmailVO checkUsernameOrEmail(CheckUsernameOrEmailDTO ch...
method getUserHomeInfo (line 34) | UserHomeVO getUserHomeInfo(String uid, String username);
method changePassword (line 42) | ChangeAccountVO changePassword(ChangePasswordDTO changePasswordDTO);
method changeEmail (line 50) | ChangeAccountVO changeEmail(ChangeEmailDTO changeEmailDTO);
method changeUserInfo (line 52) | UserInfoVO changeUserInfo(UserInfoVO userInfoVO);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/BeforeDispatchInitService.java
class BeforeDispatchInitService (line 41) | @Component
method initCommonSubmission (line 65) | public void initCommonSubmission(String problemId, Judge judge) {
method initContestSubmission (line 81) | @Transactional(rollbackFor = Exception.class)
method initTrainingSubmission (line 140) | @Transactional(rollbackFor = Exception.class)
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/CommentService.java
type CommentService (line 17) | public interface CommentService {
method getComments (line 19) | CommentListVO getComments(Long cid, Integer did, Integer limit, Intege...
method addComment (line 21) | CommentVO addComment(Comment comment);
method deleteComment (line 23) | void deleteComment(Comment comment);
method addDiscussionLike (line 25) | void addDiscussionLike(Integer cid, Boolean toLike, Integer sourceId, ...
method getAllReply (line 27) | List<Reply> getAllReply(Integer commentId, Long cid);
method addReply (line 29) | void addReply(ReplyDTO replyDTO);
method deleteReply (line 31) | void deleteReply(ReplyDTO replyDTO);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/CommonService.java
type CommonService (line 19) | public interface CommonService {
method getCaptcha (line 21) | CaptchaVO getCaptcha();
method getTrainingCategory (line 23) | List<TrainingCategory> getTrainingCategory();
method getAllProblemTagsList (line 25) | List<Tag> getAllProblemTagsList(String oj);
method getProblemTagsAndClassification (line 27) | List<ProblemTagVO> getProblemTagsAndClassification(String oj);
method getProblemTags (line 29) | Collection<Tag> getProblemTags(Long pid);
method getLanguages (line 31) | List<Language> getLanguages(Long pid, Boolean all);
method getProblemLanguages (line 33) | Collection<Language> getProblemLanguages(Long pid);
method getProblemCodeTemplate (line 35) | List<CodeTemplate> getProblemCodeTemplate(Long pid);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/ContestACMRankService.java
class ContestACMRankService (line 36) | @Component
method getContestACMRankPage (line 57) | public IPage<ACMContestRankVO> getContestACMRankPage(Contest contest, ...
method getACMContestRankVOPage (line 67) | private Page<ACMContestRankVO> getACMContestRankVOPage(List<ACMContest...
method calculateACMRank (line 97) | public List<ACMContestRankVO> calculateACMRank(boolean isOpenSealRank,...
method filterKeyword (line 122) | boolean filterKeyword(ACMContestRankVO rankVO, String keyword){
method getACMOrderRank (line 150) | @Cacheable(value = RedisConstant.CONTEST_RANK_CAL_RESULT_CACHE, key = ...
method processContestRecordVO (line 207) | private void processContestRecordVO(ContestRecordVO contestRecord, Has...
method computeACMRankNo (line 245) | private void computeACMRankNo(boolean removeStar, Contest contest, Lis...
method getNoRecordUserInfos (line 303) | private List<UserInfo> getNoRecordUserInfos(Contest contest, Set<Strin...
method getNoRecordUserACMContestRankVOs (line 319) | private List<ACMContestRankVO> getNoRecordUserACMContestRankVOs(Contes...
method initACMContestRankVO (line 329) | private Map<String, ACMContestRankVO> initACMContestRankVO(Set<String>...
method initACMContestRankVO (line 342) | private ACMContestRankVO initACMContestRankVO(UserInfo userInfo) {
method isInSealTimeSubmission (line 357) | private boolean isInSealTimeSubmission(Contest contest, Date submissio...
method starAccountToMap (line 361) | private Map<String, Boolean> starAccountToMap(String starAccountStr) {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/ContestAdminService.java
type ContestAdminService (line 14) | public interface ContestAdminService {
method getContestACInfo (line 16) | IPage<ContestRecord> getContestACInfo(Long cid, Integer currentPage, I...
method checkContestAcInfo (line 18) | void checkContestAcInfo(CheckAcDTO checkAcDTO);
method getContestPrint (line 20) | IPage<ContestPrint> getContestPrint(Long cid, Integer currentPage, Int...
method checkContestPrintStatus (line 22) | void checkContestPrintStatus(Long id, Long cid);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/ContestOIRankService.java
class ContestOIRankService (line 37) | @Component
method getContestOIRankPage (line 58) | public IPage<OIContestRankVO> getContestOIRankPage(Contest contest, Bo...
method getOiContestRankVOPage (line 69) | private Page<OIContestRankVO> getOiContestRankVOPage(int currentPage, ...
method calculateOIRank (line 98) | public List<OIContestRankVO> calculateOIRank(boolean isOpenSealRank, b...
method filterKeyword (line 124) | boolean filterKeyword(OIContestRankVO rankVO, String keyword){
method getOiOrderRank (line 146) | @Cacheable(value = RedisConstant.CONTEST_RANK_CAL_RESULT_CACHE, key = ...
method computeOIRankNo (line 183) | private void computeOIRankNo(Contest contest, List<String> concernedLi...
method getNoRecordUserInfos (line 239) | private List<UserInfo> getNoRecordUserInfos(Contest contest, Set<Strin...
method getNoRecordUserOiContestRankVOs (line 261) | private List<OIContestRankVO> getNoRecordUserOiContestRankVOs(Contest ...
method initOiContestRankVO (line 271) | private Map<String, OIContestRankVO> initOiContestRankVO(Set<String> u...
method initOiContestRankVO (line 284) | private OIContestRankVO initOiContestRankVO(UserInfo userInfo) {
method setSubmissionInfo (line 307) | private void setSubmissionInfo(ContestRecordVO contestRecord, OIContes...
method getUidTimeInfoMap (line 334) | private HashMap<String, Map<String, Integer>> getUidTimeInfoMap(List<C...
method computeUidTimeInfoMap (line 352) | private void computeUidTimeInfoMap(HashMap<String, Map<String, Integer...
method setTimeInfoToResult (line 383) | private void setTimeInfoToResult(List<OIContestRankVO> result, HashMap...
method starAccountToMap (line 394) | private Map<String, Boolean> starAccountToMap(String starAccountStr) {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/ContestScoreboardService.java
type ContestScoreboardService (line 15) | public interface ContestScoreboardService {
method getContestOutsideInfo (line 17) | ContestOutsideInfo getContestOutsideInfo(Long cid);
method getContestOutsideScoreboard (line 19) | IPage getContestOutsideScoreboard(ContestRankDTO contestRankDTO);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/ContestService.java
type ContestService (line 20) | public interface ContestService {
method getContestList (line 22) | IPage<ContestVO> getContestList(Integer limit, Integer currentPage, In...
method getContestInfo (line 24) | ContestVO getContestInfo(Long cid);
method toRegisterContest (line 26) | void toRegisterContest(RegisterContestDTO registerContestDTO);
method getContestAccess (line 28) | AccessVO getContestAccess(Long cid);
method getContestProblem (line 30) | List<ContestProblemVO> getContestProblem(Long cid);
method getContestProblemDetails (line 32) | ProblemInfoVO getContestProblemDetails(Long cid, String displayId);
method getContestSubmissionList (line 35) | IPage<JudgeVO> getContestSubmissionList(Integer limit, Integer current...
method getContestRank (line 39) | IPage getContestRank(ContestRankDTO contestRankDTO);
method getContestAdminUidList (line 41) | Set<String> getContestAdminUidList(Contest contest);
method getContestAnnouncement (line 43) | IPage<AnnouncementVO> getContestAnnouncement(Long cid, Integer limit, ...
method getContestUserNotReadAnnouncement (line 45) | List<Announcement> getContestUserNotReadAnnouncement(UserReadContestAn...
method submitPrintText (line 47) | void submitPrintText(ContestPrintDTO contestPrintDTO);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/DiscussionService.java
type DiscussionService (line 17) | public interface DiscussionService {
method getDiscussionList (line 19) | IPage<Discussion> getDiscussionList(Integer limit, Integer currentPage...
method getDiscussion (line 22) | DiscussionVO getDiscussion(Integer did);
method addDiscussion (line 24) | void addDiscussion(Discussion discussion);
method updateDiscussion (line 26) | void updateDiscussion(Discussion discussion);
method removeDiscussion (line 28) | void removeDiscussion(Integer did);
method addDiscussionLike (line 30) | void addDiscussionLike(Integer did, Boolean toLike);
method getDiscussionCategory (line 32) | List<Category> getDiscussionCategory();
method addDiscussionReport (line 34) | void addDiscussionReport(DiscussionReport discussionReport);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/HomeService.java
type HomeService (line 17) | public interface HomeService {
method getRecentContest (line 26) | List<ContestVO> getRecentContest();
method getHomeCarousel (line 35) | List<HashMap<String, Object>> getHomeCarousel();
method getRecentSevenACRank (line 44) | List<ACMRankVO> getRecentSevenACRank();
method getRecentOtherContest (line 53) | List<HashMap<String, Object>> getRecentOtherContest();
method getCommonAnnouncement (line 62) | IPage<AnnouncementVO> getCommonAnnouncement(Integer limit, Integer cur...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/JudgeService.java
type JudgeService (line 20) | public interface JudgeService {
method submitProblemJudge (line 27) | Judge submitProblemJudge(ToJudgeDTO judgeDTO);
method resubmit (line 34) | Judge resubmit(Long submitId);
method getSubmission (line 41) | SubmissionInfoVO getSubmission(Long submitId);
method updateSubmission (line 48) | void updateSubmission(Judge judge);
method getJudgeList (line 55) | IPage<JudgeVO> getJudgeList(Integer limit, Integer currentPage, Boolea...
method checkCommonJudgeResult (line 63) | HashMap<Long, Object> checkCommonJudgeResult(SubmitIdListDTO submitIdL...
method checkContestJudgeResult (line 70) | HashMap<Long, Object> checkContestJudgeResult(SubmitIdListDTO submitId...
method getAllCaseResult (line 77) | List<JudgeCase> getAllCaseResult(Long submitId);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/ProblemService.java
type ProblemService (line 18) | public interface ProblemService {
method getProblemList (line 26) | Page<ProblemVO> getProblemList(Integer limit, Integer currentPage, Str...
method getRandomProblem (line 34) | RandomProblemVO getRandomProblem();
method getUserProblemStatus (line 41) | HashMap<Long, Object> getUserProblemStatus(PidListDTO pidListDTO);
method getProblemInfo (line 48) | ProblemInfoVO getProblemInfo(String problemId);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/RankService.java
type RankService (line 11) | public interface RankService {
method getRankList (line 20) | IPage getRankList(Integer limit, Integer currentPage, String searchUse...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/TrainingService.java
type TrainingService (line 19) | public interface TrainingService {
method getTrainingList (line 32) | IPage<TrainingVO> getTrainingList(Integer limit, Integer currentPage, ...
method getTraining (line 41) | TrainingVO getTraining(@RequestParam(value = "tid") Long tid);
method getTrainingProblemList (line 50) | List<ProblemVO> getTrainingProblemList(Long tid);
method toRegisterTraining (line 59) | void toRegisterTraining(RegisterTrainingDTO registerTrainingDTO);
method getTrainingAccess (line 68) | AccessVO getTrainingAccess(Long tid);
method getTrainingRank (line 79) | IPage<TrainingRankVO> getTrainingRank(Long tid, Integer limit, Integer...
method checkAndSyncTrainingRecord (line 84) | void checkAndSyncTrainingRecord(Long pid, Long submitId, String uid);
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/impl/AccountServiceImpl.java
class AccountServiceImpl (line 41) | @Service
method checkUsernameOrEmail (line 66) | @Override
method getUserHomeInfo (line 117) | @Override
method changePassword (line 170) | @Override
method changeEmail (line 252) | @Override
method changeUserInfo (line 334) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/impl/CommentServiceImpl.java
class CommentServiceImpl (line 39) | @Service
method getComments (line 53) | @Override
method addComment (line 94) | @Override
method deleteComment (line 164) | @Override
method addDiscussionLike (line 199) | @Override
method getAllReply (line 246) | @Override
method addReply (line 257) | @Override
method deleteReply (line 298) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/impl/CommonServiceImpl.java
class CommonServiceImpl (line 28) | @Service
method getCaptcha (line 50) | @Override
method getTrainingCategory (line 65) | @Override
method getAllProblemTagsList (line 70) | @Override
method getProblemTagsAndClassification (line 84) | @Override
method getProblemTags (line 139) | @Override
method getLanguages (line 148) | @Override
method getProblemLanguages (line 164) | @Override
method getProblemCodeTemplate (line 174) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/impl/ContestAdminServiceImpl.java
class ContestAdminServiceImpl (line 26) | @Service
method getContestACInfo (line 38) | @Override
method checkContestAcInfo (line 60) | @Override
method getContestPrint (line 79) | @Override
method checkContestPrintStatus (line 106) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/impl/ContestScoreboardServiceImpl.java
class ContestScoreboardServiceImpl (line 31) | @Service
method getContestOutsideInfo (line 45) | @Override
method getContestOutsideScoreboard (line 75) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/impl/ContestServiceImpl.java
class ContestServiceImpl (line 41) | @Service
method getContestList (line 81) | @Override
method getContestInfo (line 94) | @Override
method toRegisterContest (line 107) | @Override
method getContestAccess (line 149) | @Override
method getContestProblem (line 191) | @Override
method getContestProblemDetails (line 211) | @Override
method getContestSubmissionList (line 300) | @Override
method getContestRank (line 359) | @Override
method getContestAdminUidList (line 407) | @Override
method getContestAnnouncement (line 414) | @Override
method getContestUserNotReadAnnouncement (line 432) | @Override
method submitPrintText (line 461) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/impl/DiscussionServiceImpl.java
class DiscussionServiceImpl (line 38) | @Service
method getDiscussionList (line 54) | @Override
method getDiscussion (line 91) | @Override
method addDiscussion (line 122) | @Override
method updateDiscussion (line 168) | @Override
method removeDiscussion (line 176) | @Override
method addDiscussionLike (line 194) | @Override
method getDiscussionCategory (line 240) | @Override
method addDiscussionReport (line 245) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/impl/HomeServiceImpl.java
class HomeServiceImpl (line 29) | @Service
method getRecentContest (line 52) | @Override
method getHomeCarousel (line 64) | @Override
method getRecentSevenACRank (line 83) | @Override
method getRecentOtherContest (line 95) | @Override
method getCommonAnnouncement (line 109) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/impl/JudgeServiceImpl.java
class JudgeServiceImpl (line 57) | @Service
method submitProblemJudge (line 92) | @Override
method resubmit (line 152) | @Override
method getSubmission (line 204) | @Override
method updateSubmission (line 275) | @Override
method getJudgeList (line 301) | @Override
method checkCommonJudgeResult (line 338) | @Override
method checkContestJudgeResult (line 368) | @Override
method getAllCaseResult (line 414) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/impl/ProblemServiceImpl.java
class ProblemServiceImpl (line 35) | @Service
method getProblemList (line 63) | @Override
method getRandomProblem (line 90) | @Override
method getUserProblemStatus (line 112) | @Override
method processContestJudge (line 180) | private void processContestJudge(HashMap<Long, Object> result, boolean...
method getProblemInfo (line 215) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/impl/RankServiceImpl.java
class RankServiceImpl (line 29) | @Service
method getRankList (line 49) | @Override
method getACMRankList (line 84) | @Cacheable(value = RedisConstant.ACM_RANK_CACHE, key = "#limit+'-'+#cu...
method getOIRankList (line 107) | @Cacheable(value = RedisConstant.OI_RANK_CACHE, key = "#limit+'-'+#cur...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/impl/TrainingServiceImpl.java
class TrainingServiceImpl (line 31) | @Service
method getTrainingList (line 62) | @Override
method getTraining (line 83) | @Override
method getTrainingProblemList (line 120) | @Override
method toRegisterTraining (line 141) | @Override
method getTrainingAccess (line 187) | @Override
method getTrainingRank (line 219) | @Override
method getTrainingRank (line 241) | private IPage<TrainingRankVO> getTrainingRank(Long tid, String usernam...
method getTPIdMapDisplayId (line 331) | private Map<Long, String> getTPIdMapDisplayId(Long tid) {
method checkAndSyncTrainingRecord (line 342) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/service/schedule/ScheduleService.java
class ScheduleService (line 45) | @Service
method deleteAvatar (line 77) | @Scheduled(cron = "0 0 3 * * *")
method deleteTestCase (line 107) | @Scheduled(cron = "0 0 3 * * *")
method deleteContestPrintText (line 122) | @Scheduled(cron = "0 0 4 * * *")
method deleteUserSession (line 137) | @Scheduled(cron = "0 0 3 * * *")
method syncNoticeToRecentHalfYearUser (line 167) | @Scheduled(cron = "0 0 0/1 * * *")
method check20MinutesPendingSubmission (line 218) | @Scheduled(cron = "0 0/20 * * * ?")
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/shiro/AccountProfile.java
class AccountProfile (line 15) | @Data
method getId (line 57) | public String getId() {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/shiro/AccountRealm.java
class AccountRealm (line 27) | @Slf4j(topic = "voj")
method supports (line 38) | @Override
method doGetAuthorizationInfo (line 43) | @Override
method doGetAuthenticationInfo (line 70) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/shiro/JwtFilter.java
class JwtFilter (line 28) | @Component
method createToken (line 45) | @Override
method onAccessDenied (line 64) | @Override
method refreshToken (line 93) | private void refreshToken(HttpServletRequest request, HttpServletRespo...
method onLoginFailure (line 111) | @Override
method preHandle (line 137) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/shiro/JwtToken.java
class JwtToken (line 10) | public class JwtToken implements AuthenticationToken {
method JwtToken (line 14) | public JwtToken(String token) {
method getPrincipal (line 18) | @Override
method getCredentials (line 23) | @Override
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/shiro/UserSessionUtil.java
class UserSessionUtil (line 11) | public class UserSessionUtil {
method isProblemAdmin (line 13) | public static Boolean isProblemAdmin() {
method isRoot (line 17) | public static Boolean isRoot() {
method isAdmin (line 21) | public static Boolean isAdmin() {
method getUserInfo (line 25) | public static UserRolesVO getUserInfo() {
method logout (line 29) | public static void logout() {
method setUserInfo (line 33) | public static void setUserInfo(UserRolesVO userInfo) {
method getSession (line 37) | private static Session getSession() {
method setSessionAttribute (line 41) | private static void setSessionAttribute(Object key, Object value) {
method getSessionAttribute (line 45) | private static Object getSessionAttribute(Object key) {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/validator/AccessInterceptor.java
class AccessInterceptor (line 22) | @Component
method preHandle (line 28) | @Override
method postHandle (line 47) | @Override
method afterCompletion (line 52) | @Override
method getAnnotation (line 66) | public <T extends Annotation> T getAnnotation(Method method, Class<?> ...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/validator/AccessValidator.java
class AccessValidator (line 13) | @Component
method validateAccess (line 19) | public void validateAccess(AccessEnum accessEnum) throws StatusAccessD...
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/validator/ContestValidator.java
class ContestValidator (line 24) | @Component
method isContestAdmin (line 30) | public boolean isContestAdmin(Contest contest) {
method isContestOwner (line 35) | public boolean isContestOwner(String uid) {
method isOpenSealRank (line 43) | public boolean isOpenSealRank(Contest contest, Boolean forceRefresh) {
method checkVisible (line 60) | public boolean checkVisible(Contest contest) {
method validateContestAuth (line 76) | public void validateContestAuth(Contest contest) {
method validateJudgeAuth (line 107) | public void validateJudgeAuth(Contest contest) {
method validateAccountRule (line 121) | public boolean validateAccountRule(String accountRule, String username) {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/validator/JudgeValidator.java
class JudgeValidator (line 17) | @Component
method validateSubmissionInfo (line 26) | public void validateSubmissionInfo(ToJudgeDTO toJudgeDTO) {
FILE: voj-backend/src/main/java/com/simplefanc/voj/backend/validator/TrainingValidator.java
class TrainingValidator (line 20) | @Component
method validateTrainingAuth (line 26) | public void validateTrainingAuth(Training training) {
method checkTrainingRegister (line 49) | private void checkTrainingRegister(Long tid, String uid) {
method isInTrainingOrAdmin (line 64) | public boolean isInTrainingOrAdmin(Training training, UserRolesVO user...
FILE: voj-backend/src/test/java/com/simplefanc/AppTest.java
class AppTest (line 10) | public class AppTest {
method shouldAnswerWithTrue (line 15) | @Test
FILE: voj-common/src/main/java/com/simplefanc/voj/common/constants/Constant.java
type Constant (line 7) | public interface Constant {
FILE: voj-common/src/main/java/com/simplefanc/voj/common/constants/ContestConstant.java
type ContestConstant (line 7) | public interface ContestConstant {
FILE: voj-common/src/main/java/com/simplefanc/voj/common/constants/ContestEnum.java
type ContestEnum (line 10) | @Getter
FILE: voj-common/src/main/java/com/simplefanc/voj/common/constants/JudgeCaseMode.java
type JudgeCaseMode (line 10) | @Getter
FILE: voj-common/src/main/java/com/simplefanc/voj/common/constants/JudgeMode.java
type JudgeMode (line 10) | @Getter
method getJudgeMode (line 22) | public static JudgeMode getJudgeMode(String mode) {
FILE: voj-common/src/main/java/com/simplefanc/voj/common/constants/JudgeStatus.java
type JudgeStatus (line 10) | @Getter
FILE: voj-common/src/main/java/com/simplefanc/voj/common/constants/ProblemEnum.java
type ProblemEnum (line 6) | @Getter
FILE: voj-common/src/main/java/com/simplefanc/voj/common/constants/ProblemLevelEnum.java
type ProblemLevelEnum (line 6) | @Getter
FILE: voj-common/src/main/java/com/simplefanc/voj/common/constants/RedisConstant.java
type RedisConstant (line 3) | public interface RedisConstant {
FILE: voj-common/src/main/java/com/simplefanc/voj/common/constants/RemoteOj.java
type RemoteOj (line 6) | @Getter
method getTypeByName (line 33) | public static RemoteOj getTypeByName(String judgeName) {
method isRemoteOj (line 45) | public static Boolean isRemoteOj(String name) {
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/dto/CompileDTO.java
class CompileDTO (line 12) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/dto/JudgeDTO.java
class JudgeDTO (line 17) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/common/Announcement.java
class Announcement (line 20) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/common/File.java
class File (line 17) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/contest/Contest.java
class Contest (line 24) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/contest/ContestAnnouncement.java
class ContestAnnouncement (line 24) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/contest/ContestPrint.java
class ContestPrint (line 21) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/contest/ContestProblem.java
class ContestProblem (line 24) | @Data
method compareTo (line 56) | @Override
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/contest/ContestRecord.java
class ContestRecord (line 24) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/contest/ContestRegister.java
class ContestRegister (line 24) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/discussion/Comment.java
class Comment (line 21) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/discussion/CommentLike.java
class CommentLike (line 20) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/discussion/Discussion.java
class Discussion (line 20) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/discussion/DiscussionLike.java
class DiscussionLike (line 20) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/discussion/DiscussionReport.java
class DiscussionReport (line 20) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/discussion/Reply.java
class Reply (line 18) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/judge/Judge.java
class Judge (line 21) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/judge/JudgeCase.java
class JudgeCase (line 24) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/judge/JudgeServer.java
class JudgeServer (line 20) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/judge/RemoteJudgeAccount.java
class RemoteJudgeAccount (line 21) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/msg/AdminSysNotice.java
class AdminSysNotice (line 20) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/msg/MsgRemind.java
class MsgRemind (line 21) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/msg/UserSysNotice.java
class UserSysNotice (line 20) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/problem/Category.java
class Category (line 20) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/problem/CodeTemplate.java
class CodeTemplate (line 20) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/problem/Language.java
class Language (line 20) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/problem/Problem.java
class Problem (line 20) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/problem/ProblemCase.java
class ProblemCase (line 20) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/problem/ProblemLanguage.java
class ProblemLanguage (line 19) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/problem/ProblemTag.java
class ProblemTag (line 19) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/problem/Tag.java
class Tag (line 17) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/problem/TagClassification.java
class TagClassification (line 19) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/training/MappingTrainingCategory.java
class MappingTrainingCategory (line 21) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/training/Training.java
class Training (line 22) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/training/TrainingCategory.java
class TrainingCategory (line 22) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/training/TrainingProblem.java
class TrainingProblem (line 22) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/training/TrainingRecord.java
class TrainingRecord (line 22) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/training/TrainingRegister.java
class TrainingRegister (line 21) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/user/Auth.java
class Auth (line 24) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/user/Role.java
class Role (line 24) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/user/RoleAuth.java
class RoleAuth (line 23) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/user/Session.java
class Session (line 19) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/user/UserAcproblem.java
class UserAcproblem (line 24) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/user/UserInfo.java
class UserInfo (line 21) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/pojo/entity/user/UserRole.java
class UserRole (line 23) | @Data
FILE: voj-common/src/main/java/com/simplefanc/voj/common/result/CommonResult.java
class CommonResult (line 7) | @Data
method successResponse (line 33) | public static <T> CommonResult<T> successResponse(T data, String msg) {
method successResponse (line 42) | public static <T> CommonResult<T> successResponse(T data) {
method successResponse (line 51) | public static <T> CommonResult<T> successResponse(String msg) {
method successResponse (line 58) | public static <T> CommonResult<T> successResponse() {
method errorResponse (line 67) | public static <T> CommonResult<T> errorResponse(String msg) {
method errorResponse (line 71) | public static <T> CommonResult<T> errorResponse(ResultStatus resultSta...
method errorResponse (line 75) | public static <T> CommonResult<T> errorResponse(String msg, ResultStat...
method errorResponse (line 79) | public static <T> CommonResult<T> errorResponse(String msg, Integer st...
FILE: voj-common/src/main/java/com/simplefanc/voj/common/result/ResultStatus.java
type ResultStatus (line 11) | @Getter
FILE: voj-common/src/main/java/com/simplefanc/voj/common/utils/CodeForcesAES.js
function getRCPC (line 1) | function getRCPC(a, b, c) {
function toNumbers (line 8) | function toNumbers(d) {
function toHex (line 16) | function toHex() {
FILE: voj-common/src/main/java/com/simplefanc/voj/common/utils/CodeForcesUtils.java
class CodeForcesUtils (line 15) | @Slf4j(topic = "voj")
method getRCPC (line 19) | public static String getRCPC() {
method updateRCPC (line 23) | public static void updateRCPC(List<String> list) {
method downloadPDF (line 45) | public static void downloadPDF(String urlStr, String savePath) {
FILE: voj-common/src/main/java/com/simplefanc/voj/common/utils/IpUtil.java
class IpUtil (line 14) | @Slf4j(topic = "voj")
method getUserIpAddr (line 17) | public static String getUserIpAddr(HttpServletRequest request) {
method getServiceIp (line 54) | public static String getServiceIp() {
method getLocalIpv4Address (line 65) | public static String getLocalIpv4Address() {
FILE: voj-common/src/main/java/com/simplefanc/voj/common/utils/Tools.java
class Tools (line 16) | public class Tools {
method findSubClasses (line 18) | public static <T> List<Class<? extends T>> findSubClasses(String packa...
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/JudgeServerApplication.java
class JudgeServerApplication (line 14) | @EnableDiscoveryClient // 开启服务注册发现功能
method main (line 20) | public static void main(String[] args) {
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/common/constants/CompileConfig.java
type CompileConfig (line 13) | @Getter
method getCompilerByLanguage (line 78) | public static CompileConfig getCompilerByLanguage(String language) {
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/common/constants/Constants.java
type Constants (line 11) | public interface Constants {
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/common/constants/JudgeDir.java
type JudgeDir (line 7) | public interface JudgeDir {
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/common/constants/JudgeLanguage.java
type JudgeLanguage (line 6) | @Getter
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/common/constants/JudgeServerConstant.java
type JudgeServerConstant (line 10) | public interface JudgeServerConstant {
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/common/constants/RunConfig.java
type RunConfig (line 15) | @Getter
method getRunnerByLanguage (line 63) | public static RunConfig getRunnerByLanguage(String language) {
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/common/exception/CompileException.java
class CompileException (line 10) | @Data
method CompileException (line 17) | public CompileException(String message, String stdout, String stderr) {
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/common/exception/RuntimeException.java
class RuntimeException (line 10) | @Data
method RuntimeException (line 17) | public RuntimeException(String message, String stdout, String stderr) {
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/common/exception/SubmitException.java
class SubmitException (line 10) | @Data
method SubmitException (line 17) | public SubmitException(String message, String stdout, String stderr) {
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/common/exception/SystemException.java
class SystemException (line 10) | @Data
method SystemException (line 17) | public SystemException(String message, String stdout, String stderr) {
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/common/utils/JudgeUtil.java
class JudgeUtil (line 14) | public class JudgeUtil {
method getProblemExtraFileMap (line 16) | @SuppressWarnings("All")
method translateCommandline (line 30) | public static List<String> translateCommandline(String toProcess) {
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/common/utils/ThreadPoolUtil.java
class ThreadPoolUtil (line 10) | public class ThreadPoolUtil {
method ThreadPoolUtil (line 16) | private ThreadPoolUtil() {
method getInstance (line 34) | public static ThreadPoolUtil getInstance() {
method getThreadPool (line 38) | public ExecutorService getThreadPool() {
class PluginConfigHolder (line 42) | private static class PluginConfigHolder {
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/config/AsyncTaskConfig.java
class AsyncTaskConfig (line 16) | @Configuration
method getAsyncExecutor (line 19) | @Override
method getAsyncUncaughtExceptionHandler (line 47) | @Override
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/config/DruidConfiguration.java
class DruidConfiguration (line 15) | @Configuration
method dataSource (line 50) | @Bean(name = "datasource")
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/config/MyMetaObjectConfig.java
class MyMetaObjectConfig (line 14) | @Component
method insertFill (line 17) | @Override
method updateFill (line 23) | @Override
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/config/MybatisPlusConfig.java
class MybatisPlusConfig (line 14) | @Configuration
method optimisticLockerInterceptor (line 24) | @Bean
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/config/NacosConfig.java
class NacosConfig (line 17) | @Configuration
method nacosProperties (line 43) | @Bean
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/config/StartupRunner.java
class StartupRunner (line 22) | @Component
method run (line 51) | @Override
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/controller/JudgeController.java
class JudgeController (line 22) | @RestController
method submitProblemJudge (line 35) | @PostMapping(value = "/judge")
method compileSpj (line 52) | @PostMapping(value = "/compile-spj")
method compileInteractive (line 67) | @PostMapping(value = "/compile-interactive")
method remoteJudge (line 82) | @PostMapping(value = "/remote-judge")
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/controller/SystemConfigController.java
class SystemConfigController (line 17) | @RestController
method getSystemConfig (line 23) | @RequestMapping("/get-sys-config")
method getVersion (line 28) | @RequestMapping("/version")
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/dao/ContestEntityService.java
type ContestEntityService (line 14) | public interface ContestEntityService extends IService<Contest> {
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/dao/ContestRecordEntityService.java
type ContestRecordEntityService (line 15) | public interface ContestRecordEntityService extends IService<ContestReco...
method updateContestRecord (line 17) | void updateContestRecord(Judge judge);
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/dao/JudgeCaseEntityService.java
type JudgeCaseEntityService (line 14) | public interface JudgeCaseEntityService extends IService<JudgeCase> {
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/dao/JudgeEntityService.java
type JudgeEntityService (line 14) | public interface JudgeEntityService extends IService<Judge> {
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/dao/JudgeServerEntityService.java
type JudgeServerEntityService (line 8) | public interface JudgeServerEntityService extends IService<JudgeServer> {
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/dao/ProblemCaseEntityService.java
type ProblemCaseEntityService (line 11) | public interface ProblemCaseEntityService extends IService<ProblemCase> {
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/dao/ProblemEntityService.java
type ProblemEntityService (line 15) | public interface ProblemEntityService extends IService<Problem> {
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/dao/RemoteJudgeAccountEntityService.java
type RemoteJudgeAccountEntityService (line 6) | public interface RemoteJudgeAccountEntityService extends IService<Remote...
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/dao/UserAcproblemEntityService.java
type UserAcproblemEntityService (line 14) | public interface UserAcproblemEntityService extends IService<UserAcprobl...
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/dao/impl/ContestEntityServiceImpl.java
class ContestEntityServiceImpl (line 19) | @Service
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/dao/impl/ContestRecordEntityServiceImpl.java
class ContestRecordEntityServiceImpl (line 25) | @Service
method updateContestRecord (line 36) | @Override
method tryAgainUpdate (line 67) | public void tryAgainUpdate(UpdateWrapper<ContestRecord> updateWrapper) {
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/dao/impl/JudgeCaseEntityServiceImpl.java
class JudgeCaseEntityServiceImpl (line 17) | @Service
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/dao/impl/JudgeEntityServiceImpl.java
class JudgeEntityServiceImpl (line 17) | @Service
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/dao/impl/JudgeServerEntityServiceImpl.java
class JudgeServerEntityServiceImpl (line 14) | @Service
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/dao/impl/ProblemCaseEntityServiceImpl.java
class ProblemCaseEntityServiceImpl (line 14) | @Service
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/dao/impl/ProblemEntityServiceImpl.java
class ProblemEntityServiceImpl (line 17) | @Service
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/dao/impl/RemoteJudgeAccountEntityServiceImpl.java
class RemoteJudgeAccountEntityServiceImpl (line 14) | @Service
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/dao/impl/UserAcproblemEntityServiceImpl.java
class UserAcproblemEntityServiceImpl (line 17) | @Service
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/judge/local/Compiler.java
class Compiler (line 24) | public class Compiler {
method compile (line 26) | public static String compile(CompileConfig compileConfig,
method compileSpj (line 64) | public static Boolean compileSpj(String code, Long pid, String languag...
method compileInteractive (line 101) | public static Boolean compileInteractive(String code, Long pid, String...
method parseCompileCommand (line 135) | private static List<String> parseCompileCommand(CompileConfig compileC...
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/judge/local/JudgeContext.java
class JudgeContext (line 18) | @Component
method judge (line 24) | public void judge(Judge judge, Problem problem) {
method wrapJudgeResult (line 38) | private void wrapJudgeResult(Judge judge, JudgeResult judgeResult, Pro...
method compileSpj (line 49) | public Boolean compileSpj(String code, Long pid, String spjLanguage, H...
method compileInteractive (line 54) | public Boolean compileInteractive(String code, Long pid, String intera...
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/judge/local/JudgeProcess.java
class JudgeProcess (line 35) | @Slf4j(topic = "voj")
method execute (line 49) | public JudgeResult execute(Problem problem, Judge judge) {
method checkOrCompileExtraProgram (line 110) | private Boolean checkOrCompileExtraProgram(Problem problem) throws Com...
method handleJudgeError (line 136) | private void handleJudgeError(JudgeResult result, JudgeStatus status, ...
method isCompileInteractive (line 143) | private Boolean isCompileInteractive(Problem problem, String currentVe...
method isCompileSpjOk (line 173) | private Boolean isCompileSpjOk(Problem problem, String currentVersion)...
method getJudgeResult (line 212) | private JudgeResult getJudgeResult(List<CaseResult> testCaseResultList...
method handleTestCaseResult (line 223) | private void handleTestCaseResult(CaseResult result, Problem problem, ...
method computeJudgeResultInfo (line 262) | private JudgeResult computeJudgeResultInfo(List<JudgeCase> allTestCase...
method getUserFileName (line 298) | private String getUserFileName(String language) {
method mergeNonEmptyStrings (line 310) | private String mergeNonEmptyStrings(String... strings) {
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/judge/local/JudgeRun.java
class JudgeRun (line 37) | @Component
method judgeAllCase (line 49) | public List<CaseResult> judgeAllCase(Judge judge, Problem problem, Str...
method iterateJudgeAllCase (line 63) | private List<CaseResult> iterateJudgeAllCase(List<JudgeTask> judgeTask...
method defaultJudgeAllCase (line 79) | private List<CaseResult> defaultJudgeAllCase(List<JudgeTask> judgeTask...
method getJudgeTasks (line 104) | private List<JudgeTask> getJudgeTasks(JudgeGlobalDTO judgeGlobalDTO) {
method getJudgeGlobalDTO (line 140) | private JudgeGlobalDTO getJudgeGlobalDTO(Judge judge, Problem problem,...
class JudgeTask (line 189) | class JudgeTask implements Callable<CaseResult> {
method JudgeTask (line 193) | public JudgeTask(JudgeCaseDTO judgeDTO, JudgeGlobalDTO judgeGlobalDT...
method call (line 198) | @Override
method getAbstractJudge (line 210) | private AbstractJudge getAbstractJudge(JudgeMode judgeMode) {
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/judge/local/ProblemTestCaseUtils.java
class ProblemTestCaseUtils (line 33) | @Component
method loadTestCaseInfo (line 39) | public JSONObject loadTestCaseInfo(Problem problem) throws SystemExcep...
method tryInitTestCaseInfo (line 69) | private JSONObject tryInitTestCaseInfo(String testCasesDir, Long probl...
method initLocalTestCase (line 112) | private JSONObject initLocalTestCase(String mode, String version, Stri...
method initTestCase (line 156) | private JSONObject initTestCase(List<HashMap<String, Object>> testCase...
method initOutputData (line 208) | private void initOutputData(JSONObject jsonObject, String outputData) {
method rtrim (line 226) | private static String rtrim(String value) {
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/judge/local/SandboxRun.java
class SandboxRun (line 57) | @Slf4j(topic = "voj")
method SandboxRun (line 64) | private SandboxRun() {
method getRestTemplate (line 76) | public static RestTemplate getRestTemplate() {
method getSandboxBaseUrl (line 82) | public static String getSandboxBaseUrl() {
method run (line 168) | public JSONArray run(String uri, JSONObject param) throws SystemExcept...
method delFile (line 189) | public static void delFile(String fileId) {
method compile (line 218) | public static JSONArray compile(Long maxCpuTime,
method testCase (line 294) | public static JSONArray testCase(List<String> args,
method spjCheckResult (line 373) | public static JSONArray spjCheckResult(List<String> args,
method interactTestCase (line 470) | public static JSONArray interactTestCase(List<String> args,
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/judge/local/pojo/CaseResult.java
class CaseResult (line 5) | @Data
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/judge/local/pojo/JudgeCaseDTO.java
class JudgeCaseDTO (line 15) | @Data
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/judge/local/pojo/JudgeGlobalDTO.java
class JudgeGlobalDTO (line 19) | @Data
FILE: voj-judger/src/main/java/com/simplefanc/voj/judger/judge/local/pojo/JudgeResult.java
class JudgeResult (line 5) |
Condensed preview — 683 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,003K chars).
[
{
"path": ".gitignore",
"chars": 353,
"preview": "*.classpath\n\n# Package Files\n*.jar\n*.war\n*.ear\n*.log\n*.iml\n\n.DS_Store\nnode_modules\ndist/\n.cache/\n.temp/\ntarget/\nout/\n.id"
},
{
"path": "LICENSE",
"chars": 1065,
"preview": "MIT License\n\nCopyright (c) 2022 simplefanC\n\nPermission is hereby granted, free of charge, to any person obtaining a copy"
},
{
"path": "README.md",
"chars": 3443,
"preview": "# Virtual Online Judge(VOJ)\n\n[](https://openjdk.java.net)\n[\n\n**评测的调用流程有如下步骤:**\n\n1. 用户登录后进入指定题目的详情页,编辑完代码后提交;\n2. 后端业务服务接收到提交信息后,校验提交数据后写入到MySQL"
},
{
"path": "docs/src/develop/sandbox.md",
"chars": 5730,
"preview": "# 安全沙盒的调用\n\n> Judger-SandBox使用的是开源项目[go-judge](https://github.com/criyle/go-judge)Linux版本的可执行文件,更多调用方式请自行浏览[go-judge](htt"
},
{
"path": "docs/src/develop/update-fe.md",
"chars": 493,
"preview": "# 自定义前端\n\n直接下载[voj-vue](https://github.com/simplefanc/voj-vue)\n\n修改后,使用`npm run build`,生成一个dist文件夹,结构如下:\n\n```\ndist\n├── ind"
},
{
"path": "docs/src/introduction/README.md",
"chars": 436,
"preview": "# 简介\n\n## 一、什么是 VOJ?\n\nVOJ,全称 Virtual Online Judge,是基于(Spring Cloud + Vue)前后端分离、分布式架构的在线测评系统。\n\n## 二、VOJ的特点\n:::tip\n - 适应:响"
},
{
"path": "docs/src/introduction/architecture.md",
"chars": 2440,
"preview": "# 系统设计\n\n## 一、技术选型\n\n本系统的项目后端基于 Spring Boot、Spring Cloud Alibaba 框架,数据库使用 MySQL,缓存中间件使用 Redis,数据操作框架使用 Mybatis-Plus,前端基于 V"
},
{
"path": "docs/src/monomer/backend.md",
"chars": 4436,
"preview": "# 后端部署\n\n## 前言\n\n下载本项目,进入到当前文件夹执行打包命令\n\n```shell\ngit clone https://github.com/simplefanc/voj-deploy.git && cd voj-deploy/sr"
},
{
"path": "docs/src/monomer/frontend.md",
"chars": 7427,
"preview": "# 前端部署\n\n## 一、常规部署\n\n### (1). 安装Nginx\n:::warning\n注意:apt下载太慢的话,建议换阿里云源,请自行百度or谷歌\n:::\n1. 使用apt安装\n\n ```shell\n sudo apt in"
},
{
"path": "docs/src/monomer/judgeserver.md",
"chars": 8048,
"preview": "# 判题服务部署\n\n> VOJ使用安全沙盒的是开源的[go-judge](https://github.com/criyle/go-judge),具体使用可看该项目文档。\n\n> 注意:判题服务可以部署多台云服务器,步骤一样\n\n## 一、常规"
},
{
"path": "docs/src/monomer/mysql-checker.md",
"chars": 1832,
"preview": "# MySQL更新工具\n\n:::tip\n本镜像主要是为了跟随VOJ主仓库更新,使用固定镜像来检查是否有更新,以达到MySQL数据库的平滑升级\n:::\n## 一、用已有的VOJ镜像部署\n\n可以直接在已有的docker-compose.yml添"
},
{
"path": "docs/src/monomer/mysql.md",
"chars": 239,
"preview": "# MySQL部署\n\n## Docker部署\n\n```shell\ndocker run -d --name voj-mysql \\\n-v $PWD/voj/data/mysql/data:/var/lib/mysql \\\n-e MYSQL_"
},
{
"path": "docs/src/monomer/nacos.md",
"chars": 474,
"preview": "# Nacos部署\n\n## Docker部署\n\n```shell\ndocker run -d \\\n-e JVM_XMS=384m \\\n-e JVM_XMX=384m \\\n-e JVM_XMN=192m \\\n-e MODE=standalon"
},
{
"path": "docs/src/monomer/redis.md",
"chars": 212,
"preview": "# Redis部署\n\n## Docker部署\n\n```shell\ndocker run -d --name redis -p 6379:6379 \\\n-v $PWD/voj/data/redis/data:/data \\\n--name vo"
},
{
"path": "docs/src/monomer/rsync.md",
"chars": 4809,
"preview": "# 评测数据同步(分布式才需要)\n\n:::tip\n本镜像主要是用在于后端服务与判題服务不在同一机器,为了让题目评测数据从主服务器同步于判題服务所在机器而使用的,也就是分布式部署都需要本服务来同步评测数据,包括多台判题机。\n:::\n\n## 一"
},
{
"path": "docs/src/use/admin-user.md",
"chars": 3248,
"preview": "# 用户管理\n\n> 注意:用户管理只有超级管理员账号可以操作!\n\n**管理员角色说明**\n\n| 权限 | 超级管理员 | 题目管理员 | 普通管理员 |"
},
{
"path": "docs/src/use/close-free-cdn.md",
"chars": 6632,
"preview": "# 取消前端免费CDN\n\n由于有的机房的网络不支持一些域名的访问,有防火墙挡住,所以可能前端页面的js和css的CDN访问不了,导致页面打不开。\n\n:::info\nvoj挂载了一些前端静态资源库的免费CDN,全部都是域名`unpkg.com"
},
{
"path": "docs/src/use/contest.md",
"chars": 1287,
"preview": "# 比赛介绍\n\n:::tip\n总概功能介绍\n\n- 支持ACM、OI、IOI赛制\n- 支持公开赛、保护赛、私有赛\n- 支持线下打印功能\n- 支持比赛账号限制功能\n- 支持封榜、支持打星队伍、支持关注队伍\n- 支持比赛外部榜单显示\n- 支持榜单"
},
{
"path": "docs/src/use/custom-difficulty.md",
"chars": 732,
"preview": "# 自定义题目难度\n\n:::tip\n\n由于题目的难度是由前端代码决定**显示文本与背景颜色**的,所以想要修改或增删难度需要自定义前端,那么首先得知道如何**自定义前端**,[请点击查看](/use/update-fe/)\n\n:::\n\n接着"
},
{
"path": "docs/src/use/discussion-admin.md",
"chars": 86,
"preview": "# 评论管理\n\n\n:::tip\n- 后台管理员可以查看所有的讨论帖,并且可以选择是否置顶,是否正常显示,删除,查看等\n- 后台管理员可以查看对应讨论帖的举报内容\n:::\n\n"
},
{
"path": "docs/src/use/import-problem.md",
"chars": 2753,
"preview": "# 题目管理\n\n## 一、VOJ题目\n\n#### 1. 导出题目\n\n点击选择需要的题目,便可以批量导出成一个zip压缩包,分别对应一个json格式的题目数据,一个对应名字的文件夹存放评测数据文件,具体的文件结构如下:\n\n```\n+-- pr"
},
{
"path": "docs/src/use/import-user.md",
"chars": 251,
"preview": "# 导入用户\n\n**要求如下:**\n\n:::tip\n1. 用户数据导入仅支持csv格式的用户数据。\n2. 共7列数据:**用户名和密码不能为空**,邮箱、真实姓名、性别、昵称和学校可选填,否则该行数据可能导入失败。\n3. 第一行不必写(“用"
},
{
"path": "docs/src/use/judge-mode.md",
"chars": 5036,
"preview": "# 判题模式\n\n### 一、普通判题\n\n**普通模式是程序在线评测系统(OJ)通用的判题模式**,主要的实现逻辑步骤如下:\n\n:::tip\n\n1. 选手程序读取题目标准输入文件的数据\n\n2. 判题机执行代码逻辑得到选手输出\n3. 再将选手输"
},
{
"path": "docs/src/use/notice-announcement.md",
"chars": 76,
"preview": "# 通知和公告发布\n\n:::tip\n1. 通知和公告都仅有超级管理员可操作\n2. 通知是系统消息通知,每个小时推送一次到用户的站内消息系统\n:::\n\n\n"
},
{
"path": "docs/src/use/testcase.md",
"chars": 711,
"preview": "# 测试用例\n\n**进入后台添加题目,上传题目测试用例数据可以选择手动输入、Zip文件上传两种方式**\n\n## 一、手动输入\n\n每次点击`Add Sampple`就可以手动填入该用例的输入与输出,该方式比较适合题目数据简单的,同时手动输入的"
},
{
"path": "docs/src/use/training.md",
"chars": 632,
"preview": "# 训练介绍\n\n:::tip\n\n训练分为**公开训练**与**私有训练**,同时可自定义训练分类 \n\n两种训练其实都是题单功能,区别在于私有训练拥有记录榜单\n\n:::\n\n:::warning\n\n在训练题单里面的题目提交情况与公开题库的对应题"
},
{
"path": "pom.xml",
"chars": 8701,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/"
},
{
"path": "voj-backend/pom.xml",
"chars": 4388,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<project xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://mav"
},
{
"path": "voj-backend/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java",
"chars": 79382,
"preview": "//\n// Source code recreated from a .class file by IntelliJ IDEA\n// (powered by Fernflower decompiler)\n//\n\npackage com.al"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/BackendApplication.java",
"chars": 973,
"preview": "package com.simplefanc.voj.backend;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot."
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/cache/CacheTypeManager.java",
"chars": 1122,
"preview": "package com.simplefanc.voj.backend.cache;\n\nimport com.simplefanc.voj.common.constants.RedisConstant;\nimport lombok.AllAr"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/cache/DoubleCache.java",
"chars": 4871,
"preview": "package com.simplefanc.voj.backend.cache;\n\nimport com.github.benmanes.caffeine.cache.Cache;\nimport com.simplefanc.voj.ba"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/cache/DoubleCacheManager.java",
"chars": 3139,
"preview": "package com.simplefanc.voj.backend.cache;\n\nimport com.github.benmanes.caffeine.cache.Caffeine;\nimport com.simplefanc.voj"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/annotation/Access.java",
"chars": 477,
"preview": "package com.simplefanc.voj.backend.common.annotation;\n\nimport com.simplefanc.voj.backend.common.constants.AccessEnum;\n\ni"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/AccessEnum.java",
"chars": 324,
"preview": "package com.simplefanc.voj.backend.common.constants;\n\n/**\n * @Author chenfan\n * @Date 2022/9/25\n */\npublic enum AccessEn"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/CallJudgerType.java",
"chars": 136,
"preview": "package com.simplefanc.voj.backend.common.constants;\n\n/**\n * @author chenfan\n */\npublic enum CallJudgerType {\n\n JUDGE"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/Constant.java",
"chars": 200,
"preview": "package com.simplefanc.voj.backend.common.constants;\n\n/**\n * @author chenfan\n * @date 2022/5/7 22:46\n **/\npublic interfa"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/EmailConstant.java",
"chars": 571,
"preview": "package com.simplefanc.voj.backend.common.constants;\n\n/**\n * @Description 邮件任务的一些常量\n * @Since 2021/1/14\n */\npublic inter"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/FileConstant.java",
"chars": 755,
"preview": "package com.simplefanc.voj.backend.common.constants;\n\n/**\n * @Description 文件操作的一些常量\n * @Since 2021/1/10\n */\npublic inter"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/FileTypeEnum.java",
"chars": 322,
"preview": "package com.simplefanc.voj.backend.common.constants;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\n\n/**\n * @a"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/QueueConstant.java",
"chars": 452,
"preview": "package com.simplefanc.voj.backend.common.constants;\n\n/**\n * 等待判题的redis队列\n *\n * @Since 2021/12/22\n */\npublic interface Q"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/RoleEnum.java",
"chars": 608,
"preview": "package com.simplefanc.voj.backend.common.constants;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\n\n@Getter\n@"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/ScheduleConstant.java",
"chars": 205,
"preview": "package com.simplefanc.voj.backend.common.constants;\n\n/**\n * @author chenfan\n * @date 2022/4/18 16:23\n **/\npublic interf"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/TrainingEnum.java",
"chars": 313,
"preview": "package com.simplefanc.voj.backend.common.constants;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\n\n/**\n * @D"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/UserStatusEnum.java",
"chars": 297,
"preview": "package com.simplefanc.voj.backend.common.constants;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\n\n/**\n * @A"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/exception/StatusAccessDeniedException.java",
"chars": 776,
"preview": "package com.simplefanc.voj.backend.common.exception;\n\n/**\n * @Author: chenfan\n * @Date: 2022/3/9 10:30\n * @Description:\n"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/exception/StatusFailException.java",
"chars": 689,
"preview": "package com.simplefanc.voj.backend.common.exception;\n\n/**\n * @Author: chenfan\n * @Date: 2022/3/9 10:27\n * @Description:\n"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/exception/StatusForbiddenException.java",
"chars": 755,
"preview": "package com.simplefanc.voj.backend.common.exception;\n\n/**\n * @Author: chenfan\n * @Date: 2022/3/9 10:29\n * @Description:\n"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/exception/StatusNotFoundException.java",
"chars": 748,
"preview": "package com.simplefanc.voj.backend.common.exception;\n\n/**\n * @Author: chenfan\n * @Date: 2022/3/9 10:30\n * @Description:\n"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/exception/StatusSystemErrorException.java",
"chars": 770,
"preview": "package com.simplefanc.voj.backend.common.exception;\n\n/**\n * @Author: chenfan\n * @Date: 2022/3/10 14:33\n * @Description:"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/exception/advice/GlobalExceptionAdvice.java",
"chars": 11716,
"preview": "package com.simplefanc.voj.backend.common.exception.advice;\n\nimport com.google.protobuf.ServiceException;\nimport com.sim"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/utils/ConfigUtil.java",
"chars": 3732,
"preview": "package com.simplefanc.voj.backend.common.utils;\n\nimport com.simplefanc.voj.backend.config.ConfigVO;\nimport lombok.Requi"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/utils/ExcelUtil.java",
"chars": 826,
"preview": "package com.simplefanc.voj.backend.common.utils;\n\nimport cn.hutool.core.util.CharsetUtil;\nimport lombok.experimental.Uti"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/utils/JwtUtil.java",
"chars": 1709,
"preview": "package com.simplefanc.voj.backend.common.utils;\n\nimport com.auth0.jwt.JWT;\nimport com.auth0.jwt.algorithms.Algorithm;\ni"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/utils/MyFileUtil.java",
"chars": 2302,
"preview": "package com.simplefanc.voj.backend.common.utils;\n\nimport cn.hutool.core.io.file.FileReader;\nimport cn.hutool.core.util.C"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/utils/RedisUtil.java",
"chars": 15644,
"preview": "package com.simplefanc.voj.backend.common.utils;\n\nimport cn.hutool.core.collection.CollUtil;\nimport lombok.RequiredArgsC"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/common/utils/RestTemplateUtil.java",
"chars": 1073,
"preview": "package com.simplefanc.voj.backend.common.utils;\n\nimport lombok.RequiredArgsConstructor;\nimport org.springframework.ster"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/config/CacheConfig.java",
"chars": 843,
"preview": "package com.simplefanc.voj.backend.config;\n\nimport com.simplefanc.voj.backend.cache.DoubleCacheManager;\nimport com.simpl"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/config/CommonAsyncTaskConfig.java",
"chars": 2240,
"preview": "package com.simplefanc.voj.backend.config;\n\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.aop.interceptor"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/config/ConfigVO.java",
"chars": 3656,
"preview": "package com.simplefanc.voj.backend.config;\n\nimport lombok.Data;\nimport org.springframework.beans.factory.annotation.Valu"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/config/CorsConfig.java",
"chars": 1634,
"preview": "package com.simplefanc.voj.backend.config;\n\nimport com.simplefanc.voj.backend.config.property.FilePathProperties;\nimport"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/config/DruidConfiguration.java",
"chars": 2057,
"preview": "package com.simplefanc.voj.backend.config;\n\nimport com.alibaba.druid.pool.DruidDataSource;\nimport lombok.Data;\nimport or"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/config/JudgeAsyncTaskConfig.java",
"chars": 1213,
"preview": "package com.simplefanc.voj.backend.config;\n\nimport org.springframework.context.annotation.Bean;\nimport org.springframewo"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/config/MyMetaObjectConfig.java",
"chars": 756,
"preview": "package com.simplefanc.voj.backend.config;\n\nimport com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;\nimport org."
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/config/MybatisPlusConfig.java",
"chars": 998,
"preview": "package com.simplefanc.voj.backend.config;\n\nimport com.baomidou.mybatisplus.extension.plugins.OptimisticLockerIntercepto"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/config/NacosConfig.java",
"chars": 1098,
"preview": "package com.simplefanc.voj.backend.config;\n\nimport com.alibaba.cloud.nacos.NacosDiscoveryProperties;\nimport com.simplefa"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/config/RedisConfig.java",
"chars": 2106,
"preview": "package com.simplefanc.voj.backend.config;\n\nimport com.fasterxml.jackson.annotation.JsonAutoDetect;\nimport com.fasterxml"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/config/RestTemplateConfig.java",
"chars": 915,
"preview": "package com.simplefanc.voj.backend.config;\n\nimport org.springframework.context.annotation.Bean;\nimport org.springframewo"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/config/ShiroConfig.java",
"chars": 4189,
"preview": "package com.simplefanc.voj.backend.config;\n\nimport com.simplefanc.voj.backend.shiro.AccountRealm;\nimport com.simplefanc."
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/config/StartupRunner.java",
"chars": 4924,
"preview": "package com.simplefanc.voj.backend.config;\n\nimport cn.hutool.core.util.IdUtil;\nimport com.baomidou.mybatisplus.core.cond"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/config/SwaggerConfig.java",
"chars": 1660,
"preview": "package com.simplefanc.voj.backend.config;\n\nimport org.springframework.context.annotation.Bean;\nimport org.springframewo"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/config/property/DoubleCacheProperties.java",
"chars": 758,
"preview": "package com.simplefanc.voj.backend.config.property;\n\nimport lombok.Data;\nimport org.springframework.boot.context.propert"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/config/property/EmailRuleBO.java",
"chars": 2314,
"preview": "package com.simplefanc.voj.backend.config.property;\n\nimport lombok.Data;\nimport org.springframework.beans.factory.config"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/config/property/FilePathProperties.java",
"chars": 815,
"preview": "package com.simplefanc.voj.backend.config.property;\n\nimport lombok.Data;\nimport org.springframework.boot.context.propert"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/config/property/RemoteAccountProperties.java",
"chars": 662,
"preview": "package com.simplefanc.voj.backend.config.property;\n\nimport lombok.Data;\nimport org.springframework.boot.context.propert"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/AdminContestController.java",
"chars": 10620,
"preview": "package com.simplefanc.voj.backend.controller.admin;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.si"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/AdminDiscussionController.java",
"chars": 2578,
"preview": "package com.simplefanc.voj.backend.controller.admin;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.si"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/AdminJudgeController.java",
"chars": 1673,
"preview": "package com.simplefanc.voj.backend.controller.admin;\n\nimport com.simplefanc.voj.backend.service.admin.rejudge.RejudgeSer"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/AdminProblemController.java",
"chars": 5461,
"preview": "package com.simplefanc.voj.backend.controller.admin;\n\nimport cn.hutool.core.util.StrUtil;\nimport com.baomidou.mybatisplu"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/AdminTagController.java",
"chars": 3223,
"preview": "package com.simplefanc.voj.backend.controller.admin;\n\nimport com.simplefanc.voj.backend.service.admin.tag.AdminTagServic"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/AdminTrainingCategoryController.java",
"chars": 1867,
"preview": "package com.simplefanc.voj.backend.controller.admin;\n\nimport com.simplefanc.voj.backend.service.admin.training.AdminTrai"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/AdminTrainingController.java",
"chars": 6220,
"preview": "package com.simplefanc.voj.backend.controller.admin;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.si"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/AdminUserController.java",
"chars": 3311,
"preview": "package com.simplefanc.voj.backend.controller.admin;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.si"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/AnnouncementController.java",
"chars": 2261,
"preview": "package com.simplefanc.voj.backend.controller.admin;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.si"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/ConfigController.java",
"chars": 3776,
"preview": "package com.simplefanc.voj.backend.controller.admin;\n\nimport cn.hutool.json.JSONObject;\nimport com.simplefanc.voj.backen"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/DashboardController.java",
"chars": 1559,
"preview": "package com.simplefanc.voj.backend.controller.admin;\n\nimport com.simplefanc.voj.backend.service.admin.system.DashboardSe"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/admin/SwitchController.java",
"chars": 1272,
"preview": "package com.simplefanc.voj.backend.controller.admin;\n\nimport com.simplefanc.voj.backend.pojo.dto.SwitchConfigDTO;\nimport"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/file/ContestFileController.java",
"chars": 2498,
"preview": "package com.simplefanc.voj.backend.controller.file;\n\nimport com.simplefanc.voj.backend.service.file.ContestFileService;\n"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/file/ImageController.java",
"chars": 1584,
"preview": "package com.simplefanc.voj.backend.controller.file;\n\nimport com.simplefanc.voj.backend.service.file.ImageService;\nimport"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/file/ImportFpsProblemController.java",
"chars": 1563,
"preview": "package com.simplefanc.voj.backend.controller.file;\n\nimport com.simplefanc.voj.backend.service.file.ImportFpsProblemServ"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/file/ImportLOJProblemController.java",
"chars": 1055,
"preview": "package com.simplefanc.voj.backend.controller.file;\n\nimport com.simplefanc.voj.backend.service.file.ImportLOJProblemServ"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/file/ImportQDUOJProblemController.java",
"chars": 1419,
"preview": "package com.simplefanc.voj.backend.controller.file;\n\nimport com.simplefanc.voj.backend.service.file.ImportQDUOJProblemSe"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/file/MarkDownFileController.java",
"chars": 2182,
"preview": "package com.simplefanc.voj.backend.controller.file;\n\nimport com.simplefanc.voj.backend.service.file.MarkDownFileService;"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/file/ProblemFileController.java",
"chars": 1685,
"preview": "package com.simplefanc.voj.backend.controller.file;\n\nimport com.simplefanc.voj.backend.service.file.ProblemFileService;\n"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/file/TestCaseController.java",
"chars": 2032,
"preview": "package com.simplefanc.voj.backend.controller.file;\n\nimport com.simplefanc.voj.backend.service.file.TestCaseService;\nimp"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/file/UserFileController.java",
"chars": 1035,
"preview": "package com.simplefanc.voj.backend.controller.file;\n\nimport com.simplefanc.voj.backend.service.file.UserFileService;\nimp"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/msg/AdminNoticeController.java",
"chars": 2146,
"preview": "package com.simplefanc.voj.backend.controller.msg;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.simp"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/msg/NoticeController.java",
"chars": 1756,
"preview": "package com.simplefanc.voj.backend.controller.msg;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.simp"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/msg/UserMessageController.java",
"chars": 3798,
"preview": "package com.simplefanc.voj.backend.controller.msg;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.simp"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/AccountController.java",
"chars": 3161,
"preview": "package com.simplefanc.voj.backend.controller.oj;\n\nimport com.simplefanc.voj.backend.pojo.dto.ChangeEmailDTO;\nimport com"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/CommentController.java",
"chars": 3386,
"preview": "package com.simplefanc.voj.backend.controller.oj;\n\nimport com.simplefanc.voj.backend.pojo.dto.ReplyDTO;\nimport com.simpl"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/CommonController.java",
"chars": 3111,
"preview": "package com.simplefanc.voj.backend.controller.oj;\n\nimport com.simplefanc.voj.backend.pojo.vo.CaptchaVO;\nimport com.simpl"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/ContestAdminController.java",
"chars": 2962,
"preview": "package com.simplefanc.voj.backend.controller.oj;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.simpl"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/ContestController.java",
"chars": 7093,
"preview": "package com.simplefanc.voj.backend.controller.oj;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.simpl"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/ContestScoreboardController.java",
"chars": 1562,
"preview": "package com.simplefanc.voj.backend.controller.oj;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.simpl"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/DiscussionController.java",
"chars": 3792,
"preview": "package com.simplefanc.voj.backend.controller.oj;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.simpl"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/HomeController.java",
"chars": 3439,
"preview": "package com.simplefanc.voj.backend.controller.oj;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.simpl"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/JudgeController.java",
"chars": 5530,
"preview": "package com.simplefanc.voj.backend.controller.oj;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.simpl"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/PassportController.java",
"chars": 3521,
"preview": "package com.simplefanc.voj.backend.controller.oj;\n\nimport com.simplefanc.voj.backend.pojo.dto.ApplyResetPasswordDTO;\nimp"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/ProblemController.java",
"chars": 3558,
"preview": "package com.simplefanc.voj.backend.controller.oj;\n\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nim"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/RankController.java",
"chars": 1462,
"preview": "package com.simplefanc.voj.backend.controller.oj;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.simpl"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/controller/oj/TrainingController.java",
"chars": 4220,
"preview": "package com.simplefanc.voj.backend.controller.oj;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.simpl"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/common/AnnouncementEntityService.java",
"chars": 640,
"preview": "package com.simplefanc.voj.backend.dao.common;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/common/FileEntityService.java",
"chars": 402,
"preview": "package com.simplefanc.voj.backend.dao.common;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com.s"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/common/impl/AnnouncementEntityServiceImpl.java",
"chars": 1459,
"preview": "package com.simplefanc.voj.backend.dao.common.impl;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.bao"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/common/impl/FileEntityEntityServiceImpl.java",
"chars": 1069,
"preview": "package com.simplefanc.voj.backend.dao.common.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/ContestAnnouncementEntityService.java",
"chars": 277,
"preview": "package com.simplefanc.voj.backend.dao.contest;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com."
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/ContestEntityService.java",
"chars": 662,
"preview": "package com.simplefanc.voj.backend.dao.contest;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomido"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/ContestPrintEntityService.java",
"chars": 326,
"preview": "package com.simplefanc.voj.backend.dao.contest;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com."
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/ContestProblemEntityService.java",
"chars": 707,
"preview": "package com.simplefanc.voj.backend.dao.contest;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com."
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/ContestRecordEntityService.java",
"chars": 875,
"preview": "package com.simplefanc.voj.backend.dao.contest;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomido"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/ContestRegisterEntityService.java",
"chars": 407,
"preview": "package com.simplefanc.voj.backend.dao.contest;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com."
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/impl/ContestAnnouncementEntityServiceImpl.java",
"chars": 647,
"preview": "package com.simplefanc.voj.backend.dao.contest.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/impl/ContestEntityServiceImpl.java",
"chars": 3976,
"preview": "package com.simplefanc.voj.backend.dao.contest.impl;\n\nimport cn.hutool.core.bean.BeanUtil;\nimport com.baomidou.mybatispl"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/impl/ContestPrintEntityServiceImpl.java",
"chars": 597,
"preview": "package com.simplefanc.voj.backend.dao.contest.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/impl/ContestProblemEntityServiceImpl.java",
"chars": 2152,
"preview": "package com.simplefanc.voj.backend.dao.contest.impl;\n\nimport com.baomidou.mybatisplus.core.conditions.update.UpdateWrapp"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/impl/ContestRecordEntityServiceImpl.java",
"chars": 6334,
"preview": "package com.simplefanc.voj.backend.dao.contest.impl;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.ba"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/impl/ContestRegisterEntityServiceImpl.java",
"chars": 1032,
"preview": "package com.simplefanc.voj.backend.dao.contest.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/CommentEntityService.java",
"chars": 938,
"preview": "package com.simplefanc.voj.backend.dao.discussion;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baom"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/CommentLikeEntityService.java",
"chars": 259,
"preview": "package com.simplefanc.voj.backend.dao.discussion;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport c"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/DiscussionEntityService.java",
"chars": 458,
"preview": "package com.simplefanc.voj.backend.dao.discussion;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport c"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/DiscussionLikeEntityService.java",
"chars": 268,
"preview": "package com.simplefanc.voj.backend.dao.discussion;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport c"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/DiscussionReportEntityService.java",
"chars": 274,
"preview": "package com.simplefanc.voj.backend.dao.discussion;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport c"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/ReplyEntityService.java",
"chars": 499,
"preview": "package com.simplefanc.voj.backend.dao.discussion;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport c"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/impl/CommentEntityServiceImpl.java",
"chars": 4846,
"preview": "package com.simplefanc.voj.backend.dao.discussion.impl;\n\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrap"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/impl/CommentLikeEntityServiceImpl.java",
"chars": 598,
"preview": "package com.simplefanc.voj.backend.dao.discussion.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceI"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/impl/DiscussionEntityServiceImpl.java",
"chars": 1595,
"preview": "package com.simplefanc.voj.backend.dao.discussion.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceI"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/impl/DiscussionLikeEntityServiceImpl.java",
"chars": 619,
"preview": "package com.simplefanc.voj.backend.dao.discussion.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceI"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/impl/DiscussionReportEntityServiceImpl.java",
"chars": 634,
"preview": "package com.simplefanc.voj.backend.dao.discussion.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceI"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/impl/ReplyEntityServiceImpl.java",
"chars": 1660,
"preview": "package com.simplefanc.voj.backend.dao.discussion.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceI"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/judge/JudgeCaseEntityService.java",
"chars": 317,
"preview": "package com.simplefanc.voj.backend.dao.judge;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com.si"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/judge/JudgeEntityService.java",
"chars": 1489,
"preview": "package com.simplefanc.voj.backend.dao.judge;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou."
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/judge/JudgeServerEntityService.java",
"chars": 249,
"preview": "package com.simplefanc.voj.backend.dao.judge;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com.si"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/judge/RemoteJudgeAccountEntityService.java",
"chars": 270,
"preview": "package com.simplefanc.voj.backend.dao.judge;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com.si"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/judge/impl/JudgeCaseEntityServiceImpl.java",
"chars": 576,
"preview": "package com.simplefanc.voj.backend.dao.judge.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;\n"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/judge/impl/JudgeEntityServiceImpl.java",
"chars": 4078,
"preview": "package com.simplefanc.voj.backend.dao.judge.impl;\n\nimport com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/judge/impl/JudgeServerEntityServiceImpl.java",
"chars": 584,
"preview": "package com.simplefanc.voj.backend.dao.judge.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;\n"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/judge/impl/RemoteJudgeAccountEntityServiceImpl.java",
"chars": 633,
"preview": "package com.simplefanc.voj.backend.dao.judge.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;\n"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/msg/AdminSysNoticeEntityService.java",
"chars": 521,
"preview": "package com.simplefanc.voj.backend.dao.msg;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.my"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/msg/MsgRemindEntityService.java",
"chars": 690,
"preview": "package com.simplefanc.voj.backend.dao.msg;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.my"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/msg/UserSysNoticeEntityService.java",
"chars": 506,
"preview": "package com.simplefanc.voj.backend.dao.msg;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.my"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/msg/impl/AdminSysNoticeEntityServiceImpl.java",
"chars": 1154,
"preview": "package com.simplefanc.voj.backend.dao.msg.impl;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomid"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/msg/impl/MsgRemindEntityServiceImpl.java",
"chars": 1238,
"preview": "package com.simplefanc.voj.backend.dao.msg.impl;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomid"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/msg/impl/UserSysNoticeEntityServiceImpl.java",
"chars": 1366,
"preview": "package com.simplefanc.voj.backend.dao.msg.impl;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomid"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/CategoryEntityService.java",
"chars": 244,
"preview": "package com.simplefanc.voj.backend.dao.problem;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com."
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/CodeTemplateEntityService.java",
"chars": 256,
"preview": "package com.simplefanc.voj.backend.dao.problem;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com."
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/LanguageEntityService.java",
"chars": 244,
"preview": "package com.simplefanc.voj.backend.dao.problem;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com."
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/ProblemCaseEntityService.java",
"chars": 324,
"preview": "package com.simplefanc.voj.backend.dao.problem;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com."
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/ProblemEntityService.java",
"chars": 1092,
"preview": "package com.simplefanc.voj.backend.dao.problem;\n\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimpo"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/ProblemLanguageEntityService.java",
"chars": 336,
"preview": "package com.simplefanc.voj.backend.dao.problem;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com."
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/ProblemTagEntityService.java",
"chars": 250,
"preview": "package com.simplefanc.voj.backend.dao.problem;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com."
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/TagClassificationEntityService.java",
"chars": 315,
"preview": "package com.simplefanc.voj.backend.dao.problem;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com."
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/TagEntityService.java",
"chars": 303,
"preview": "package com.simplefanc.voj.backend.dao.problem;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com."
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/CategoryEntityServiceImpl.java",
"chars": 560,
"preview": "package com.simplefanc.voj.backend.dao.problem.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/CodeTemplateEntityServiceImpl.java",
"chars": 597,
"preview": "package com.simplefanc.voj.backend.dao.problem.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/LanguageEntityServiceImpl.java",
"chars": 562,
"preview": "package com.simplefanc.voj.backend.dao.problem.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/ProblemCaseEntityServiceImpl.java",
"chars": 591,
"preview": "package com.simplefanc.voj.backend.dao.problem.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/ProblemEntityServiceImpl.java",
"chars": 31027,
"preview": "package com.simplefanc.voj.backend.dao.problem.impl;\n\nimport cn.hutool.core.bean.BeanUtil;\nimport cn.hutool.core.io.File"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/ProblemLanguageEntityServiceImpl.java",
"chars": 619,
"preview": "package com.simplefanc.voj.backend.dao.problem.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/ProblemTagEntityServiceImpl.java",
"chars": 584,
"preview": "package com.simplefanc.voj.backend.dao.problem.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/TagClassificationEntityServiceImpl.java",
"chars": 598,
"preview": "package com.simplefanc.voj.backend.dao.problem.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/TagEntityServiceImpl.java",
"chars": 532,
"preview": "package com.simplefanc.voj.backend.dao.problem.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/MappingTrainingCategoryEntityService.java",
"chars": 291,
"preview": "package com.simplefanc.voj.backend.dao.training;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/TrainingCategoryEntityService.java",
"chars": 335,
"preview": "package com.simplefanc.voj.backend.dao.training;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/TrainingEntityService.java",
"chars": 467,
"preview": "package com.simplefanc.voj.backend.dao.training;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomid"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/TrainingProblemEntityService.java",
"chars": 598,
"preview": "package com.simplefanc.voj.backend.dao.training;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/TrainingRecordEntityService.java",
"chars": 476,
"preview": "package com.simplefanc.voj.backend.dao.training;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/TrainingRegisterEntityService.java",
"chars": 349,
"preview": "package com.simplefanc.voj.backend.dao.training;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/impl/MappingTrainingCategoryEntityServiceImpl.java",
"chars": 684,
"preview": "package com.simplefanc.voj.backend.dao.training.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImp"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/impl/TrainingCategoryEntityServiceImpl.java",
"chars": 928,
"preview": "package com.simplefanc.voj.backend.dao.training.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImp"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/impl/TrainingEntityServiceImpl.java",
"chars": 1684,
"preview": "package com.simplefanc.voj.backend.dao.training.impl;\n\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.b"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/impl/TrainingProblemEntityServiceImpl.java",
"chars": 2405,
"preview": "package com.simplefanc.voj.backend.dao.training.impl;\n\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrappe"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/impl/TrainingRecordEntityServiceImpl.java",
"chars": 970,
"preview": "package com.simplefanc.voj.backend.dao.training.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImp"
},
{
"path": "voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/impl/TrainingRegisterEntityServiceImpl.java",
"chars": 1280,
"preview": "package com.simplefanc.voj.backend.dao.training.impl;\n\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrappe"
}
]
// ... and 483 more files (download for full content)
About this extraction
This page contains the full source code of the simplefanC/voj GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 683 files (1.7 MB), approximately 450.7k tokens, and a symbol index with 2252 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.