├── .gitignore ├── LICENSE ├── README.md ├── docs ├── package-lock.json ├── package.json └── src │ ├── .vuepress │ ├── config.ts │ ├── navbar.ts │ ├── public │ │ ├── default_judge.png │ │ ├── favicon.ico │ │ ├── interactive_judge.png │ │ ├── judge_dispatch.png │ │ ├── logo.png │ │ ├── remote_judge.png │ │ └── spj_judge.png │ ├── 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 /.gitignore: -------------------------------------------------------------------------------- 1 | *.classpath 2 | 3 | # Package Files 4 | *.jar 5 | *.war 6 | *.ear 7 | *.log 8 | *.iml 9 | 10 | .DS_Store 11 | node_modules 12 | dist/ 13 | .cache/ 14 | .temp/ 15 | target/ 16 | out/ 17 | .idea/ 18 | .classpath 19 | .project 20 | 21 | # local env files 22 | .env.local 23 | .env.*.local 24 | 25 | # Log files 26 | npm-debug.log* 27 | yarn-debug.log* 28 | yarn-error.log* 29 | pnpm-debug.log* 30 | *.log* 31 | 32 | # Editor directories and files 33 | .idea 34 | .vscode 35 | *.suo 36 | *.ntvs* 37 | *.njsproj 38 | *.sln 39 | *.sw? 40 | 41 | -------------------------------------------------------------------------------- /docs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "voj-docs", 3 | "version": "1.0.0", 4 | "description": "Virtual Online Judge", 5 | "license": "MIT", 6 | "type": "module", 7 | "scripts": { 8 | "build": "vuepress build src", 9 | "clean-dev": "vuepress dev src --clean-cache", 10 | "dev": "vuepress dev src" 11 | }, 12 | "devDependencies": { 13 | "@vuepress/client": "2.0.0-beta.51", 14 | "vue": "^3.2.29", 15 | "vuepress": "2.0.0-beta.51", 16 | "vuepress-theme-hope": "2.0.0-beta.108" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /docs/src/.vuepress/config.ts: -------------------------------------------------------------------------------- 1 | import {defineUserConfig} from "vuepress"; 2 | import theme from "./theme"; 3 | 4 | // const { searchPlugin } = require('@vuepress/plugin-search') 5 | 6 | export default defineUserConfig({ 7 | // dest: './', // 设置输出目录 8 | lang: "zh-CN", 9 | title: "VOJ", 10 | description: "Virtual Online Judge", 11 | 12 | base: "/", 13 | 14 | head: [ 15 | [ 16 | "link", 17 | { 18 | rel: "stylesheet", 19 | href: "//at.alicdn.com/t/font_2410206_mfj6e1vbwo.css", 20 | }, 21 | ], 22 | ], 23 | 24 | plugins: [ 25 | // searchPlugin({ 26 | // // https://v2.vuepress.vuejs.org/zh/reference/plugin/search.html 27 | // // 排除首页 28 | // isSearchable: (page) => page.path !== "/", 29 | // maxSuggestions: 10, 30 | // hotKeys: ["s", "/"], 31 | // // 用于在页面的搜索索引中添加额外字段 32 | // getExtraFields: () => [], 33 | // locales: { 34 | // "/": { 35 | // placeholder: "搜索", 36 | // }, 37 | // }, 38 | // }), 39 | ], 40 | theme, 41 | }); 42 | -------------------------------------------------------------------------------- /docs/src/.vuepress/public/default_judge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simplefanC/voj/ebd50f61798b55c10dc0887f8eab42f5c413caee/docs/src/.vuepress/public/default_judge.png -------------------------------------------------------------------------------- /docs/src/.vuepress/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simplefanC/voj/ebd50f61798b55c10dc0887f8eab42f5c413caee/docs/src/.vuepress/public/favicon.ico -------------------------------------------------------------------------------- /docs/src/.vuepress/public/interactive_judge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simplefanC/voj/ebd50f61798b55c10dc0887f8eab42f5c413caee/docs/src/.vuepress/public/interactive_judge.png -------------------------------------------------------------------------------- /docs/src/.vuepress/public/judge_dispatch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simplefanC/voj/ebd50f61798b55c10dc0887f8eab42f5c413caee/docs/src/.vuepress/public/judge_dispatch.png -------------------------------------------------------------------------------- /docs/src/.vuepress/public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simplefanC/voj/ebd50f61798b55c10dc0887f8eab42f5c413caee/docs/src/.vuepress/public/logo.png -------------------------------------------------------------------------------- /docs/src/.vuepress/public/remote_judge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simplefanC/voj/ebd50f61798b55c10dc0887f8eab42f5c413caee/docs/src/.vuepress/public/remote_judge.png -------------------------------------------------------------------------------- /docs/src/.vuepress/public/spj_judge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simplefanC/voj/ebd50f61798b55c10dc0887f8eab42f5c413caee/docs/src/.vuepress/public/spj_judge.png -------------------------------------------------------------------------------- /docs/src/.vuepress/styles/index.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simplefanC/voj/ebd50f61798b55c10dc0887f8eab42f5c413caee/docs/src/.vuepress/styles/index.scss -------------------------------------------------------------------------------- /docs/src/.vuepress/styles/palette.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/simplefanC/voj/ebd50f61798b55c10dc0887f8eab42f5c413caee/docs/src/.vuepress/styles/palette.scss -------------------------------------------------------------------------------- /docs/src/develop/update-fe.md: -------------------------------------------------------------------------------- 1 | # 自定义前端 2 | 3 | 直接下载[voj-vue](https://github.com/simplefanc/voj-vue) 4 | 5 | 修改后,使用`npm run build`,生成一个dist文件夹,结构如下: 6 | 7 | ``` 8 | dist 9 | ├── index.html 10 | ├── favicon.ico 11 | └── assets 12 | ├── css 13 | │ ├── .... 14 | ├── fonts 15 | │ ├── .... 16 | ├── img 17 | │ ├── .... 18 | ├── js 19 | │ ├── .... 20 | 21 | .... 22 | .... 23 | ``` 24 | 25 | 将 `dist` 文件夹复制到服务器上某个目录下,比如 `/voj/www/html/dist`,然后修改 `docker-compose.yml`,在 `voj-frontend` 模块中的 `volumes` 中增加一行 `- /voj/www/html/dist:/usr/share/nginx/html` (冒号前面的请修改为实际的路径),然后 `docker-compose up -d` 即可。 26 | -------------------------------------------------------------------------------- /docs/src/introduction/README.md: -------------------------------------------------------------------------------- 1 | # 简介 2 | 3 | ## 一、什么是 VOJ? 4 | 5 | VOJ,全称 Virtual Online Judge,是基于(Spring Cloud + Vue)前后端分离、分布式架构的在线测评系统。 6 | 7 | ## 二、VOJ的特点 8 | :::tip 9 | - 适应:响应式布局,支持手机端 10 | - 设计:界面简约大方 11 | - 安全:判题使用 Cgroups 隔离用户程序,杜绝卡评测;网站权限控制完善 12 | - 扩展:支持分布式判题 13 | - 简单:网站配置高度集中 14 | - 功能: 15 | - 支持 ACM、OI 题目及比赛,比赛拥有外榜、打星队伍、关注队伍等功能 16 | - 拥有讨论区、题目讨论、比赛讨论、同时拥有站内消息系统 17 | - 支持私有训练、公开训练(题单) 18 | - 支持私有团队、公开团队、保护团队 19 | - 支持 testlib 的特殊判题 20 | - 支持交互判题 21 | - 多样:支持本地判题服务,也支持其它知名OJ(HDU、POJ、MXT、JSK)题目的远程判题 22 | ::: 23 | -------------------------------------------------------------------------------- /docs/src/monomer/mysql.md: -------------------------------------------------------------------------------- 1 | # MySQL部署 2 | 3 | ## Docker部署 4 | 5 | ```shell 6 | docker run -d --name voj-mysql \ 7 | -v $PWD/voj/data/mysql/data:/var/lib/mysql \ 8 | -e MYSQL_ROOT_PASSWORD="voj123456" \ 9 | -e TZ="Asia/Shanghai" \ 10 | -p 3306:3306 \ 11 | --restart="always" \ 12 | mysql:5.7 13 | ``` 14 | 15 | ## 常规部署 16 | 17 | 请自行探索。 18 | -------------------------------------------------------------------------------- /docs/src/monomer/nacos.md: -------------------------------------------------------------------------------- 1 | # Nacos部署 2 | 3 | ## Docker部署 4 | 5 | ```shell 6 | docker run -d \ 7 | -e JVM_XMS=384m \ 8 | -e JVM_XMX=384m \ 9 | -e JVM_XMN=192m \ 10 | -e MODE=standalone \ 11 | -e SPRING_DATASOURCE_PLATFORM=mysql \ 12 | -e MYSQL_SERVICE_HOST=mysql_host \ 13 | -e MYSQL_SERVICE_PORT=mysql_port \ 14 | -e MYSQL_SERVICE_USER=root \ 15 | -e MYSQL_SERVICE_PASSWORD="mysql_root_password" \ 16 | -e MYSQL_SERVICE_DB_NAME=nacos \ 17 | --env NACOS_AUTH_ENABLE=true \ 18 | -p 8848:8848 \ 19 | --name voj-nacos \ 20 | --restart=always \ 21 | nacos/nacos-server:1.4.2 22 | ``` 23 | 24 | ## 常规部署 25 | 26 | 请自行探索。 27 | -------------------------------------------------------------------------------- /docs/src/monomer/redis.md: -------------------------------------------------------------------------------- 1 | # Redis部署 2 | 3 | ## Docker部署 4 | 5 | ```shell 6 | docker run -d --name redis -p 6379:6379 \ 7 | -v $PWD/voj/data/redis/data:/data \ 8 | --name voj-redis \ 9 | --restart="always" \ 10 | redis \ 11 | --requirepass "redis_password" 12 | ``` 13 | 14 | ## 常规部署 15 | 16 | 请自行探索。 17 | -------------------------------------------------------------------------------- /docs/src/use/custom-difficulty.md: -------------------------------------------------------------------------------- 1 | # 自定义题目难度 2 | 3 | :::tip 4 | 5 | 由于题目的难度是由前端代码决定**显示文本与背景颜色**的,所以想要修改或增删难度需要自定义前端,那么首先得知道如何**自定义前端**,[请点击查看](/use/update-fe/) 6 | 7 | ::: 8 | 9 | 接着,找到`/voj-vue/src/common/constants.js`的文件,修改里面的难度常量代码`PROBLEM_LEVEL`如下,修改完后,请自行build前端项目生成dist的静态文件夹,上传到服务器后,修改挂载,重启voj-frontend容器即可,重启完后,浏览器可能有缓存,多刷新即可!!! 10 | 11 | ```javascript 12 | export const PROBLEM_LEVEL={ 13 | '0':{ 14 | name:{ 15 | 'zh-CN':'简单', // 中文文本显示 16 | 'en-US':'Easy', // 英文文本显示 17 | }, 18 | color:'#19be6b' // 背景颜色 19 | }, 20 | '1':{ 21 | name:{ 22 | 'zh-CN':'中等', 23 | 'en-US':'Mid', 24 | }, 25 | color:'#2d8cf0' 26 | }, 27 | '2':{ 28 | name:{ 29 | 'zh-CN':'困难', 30 | 'en-US':'Hard', 31 | }, 32 | color:'#ed3f14' 33 | } 34 | } 35 | 36 | ``` 37 | 38 | :::warning 39 | 40 | 注意:每个OI题目的得分计算公式为:(总得分×0.1+难度×2)×(通过测试点数÷总测试点数),所以上面代码中的数字会影响OI题目得分,请尽量合理使用正整数!!! 41 | 42 | ::: 43 | -------------------------------------------------------------------------------- /docs/src/use/discussion-admin.md: -------------------------------------------------------------------------------- 1 | # 评论管理 2 | 3 | 4 | :::tip 5 | - 后台管理员可以查看所有的讨论帖,并且可以选择是否置顶,是否正常显示,删除,查看等 6 | - 后台管理员可以查看对应讨论帖的举报内容 7 | ::: 8 | 9 | -------------------------------------------------------------------------------- /docs/src/use/import-user.md: -------------------------------------------------------------------------------- 1 | # 导入用户 2 | 3 | **要求如下:** 4 | 5 | :::tip 6 | 1. 用户数据导入仅支持csv格式的用户数据。 7 | 2. 共7列数据:**用户名和密码不能为空**,邮箱、真实姓名、性别、昵称和学校可选填,否则该行数据可能导入失败。 8 | 3. 第一行不必写(“用户名”,“密码”,“邮箱”,"真实姓名",“性别”,“昵称”,“学校”)这7个列名 9 | 4. 性别为男请使用“male”或“0”,女请使用“female”或“1”,不填默认为“secrecy”。 10 | 5. 请导入保存为UTF-8编码的文件,否则中文可能会乱码。 11 | ::: 12 | -------------------------------------------------------------------------------- /docs/src/use/notice-announcement.md: -------------------------------------------------------------------------------- 1 | # 通知和公告发布 2 | 3 | :::tip 4 | 1. 通知和公告都仅有超级管理员可操作 5 | 2. 通知是系统消息通知,每个小时推送一次到用户的站内消息系统 6 | ::: 7 | 8 | 9 | -------------------------------------------------------------------------------- /docs/src/use/testcase.md: -------------------------------------------------------------------------------- 1 | # 测试用例 2 | 3 | **进入后台添加题目,上传题目测试用例数据可以选择手动输入、Zip文件上传两种方式** 4 | 5 | ## 一、手动输入 6 | 7 | 每次点击`Add Sampple`就可以手动填入该用例的输入与输出,该方式比较适合题目数据简单的,同时手动输入的题目数据将记录进数据库,下次对该题目进行修改可以直接获取,然后进行测试数据的修改,同时也会在服务器对应的testcase文件夹生成对应的文件。 8 | 9 | ## 二、文件上传 10 | 11 | 对于普通题目,测试用例文件包括`in`、`out`、`ans`、`txt`四种拓展名 12 | 13 | 例如有两组测试用例,则对于普通题目测试用例的文件名分别为`*.in, *.out(*.ans)`,或者`*input*.txt, *output*.txt ` ,其他形式的文件后台均不识别。 14 | 15 | 压缩时,请将文件都放在压缩包的根目录,而不是包含在某一个文件夹中,比如正确的格式是: 16 | 17 | ```bash 18 | ├── 1.in 19 | ├── 1.out 20 | ├── 2.in 21 | ├── 2.out 22 | ``` 23 | 24 | ```bash 25 | ├── 1.in 26 | ├── 1.ans 27 | ├── 2.in 28 | ├── 2.ans 29 | ``` 30 | 31 | 或者 32 | 33 | ```bash 34 | ├── input1.txt 35 | ├── output1.txt 36 | ├── input2.txt 37 | ├── output2.txt 38 | ``` 39 | 40 | 然后压缩测试用例到一个zip中 41 | 42 | :::danger 43 | **注意:不要在这些文件外面套多一层文件夹,请直接压缩!!!** 44 | ::: 45 | 46 | :::info 47 | 建议:尽量合并测试用例到一个文件中,减少测试用例组数,这会一定程度上提高判题性能。 48 | ::: -------------------------------------------------------------------------------- /docs/src/use/training.md: -------------------------------------------------------------------------------- 1 | # 训练介绍 2 | 3 | :::tip 4 | 5 | 训练分为**公开训练**与**私有训练**,同时可自定义训练分类 6 | 7 | 两种训练其实都是题单功能,区别在于私有训练拥有记录榜单 8 | 9 | ::: 10 | 11 | :::warning 12 | 13 | 在训练题单里面的题目提交情况与公开题库的对应题目的数据一致,所以只能显示公开权限的题目,其功能主要是汇总对应的题型。 14 | 15 | ::: 16 | 17 | ### 1. 公开训练 18 | 19 | - 管理员可在后台添加公开权限的题目,同时能对题目进行排序。 20 | - 题目的所有用户提交情况以及用户自身对该题目的提交情况与题目列表的题目数据同步。 21 | 22 | ### 2. 私有训练 23 | 24 | - 管理员可在后台添加公开权限的题目,同时能对题目进行排序。 25 | - 题目的所有用户提交情况以及用户自身对该题目的提交情况与题目列表的题目数据同步。 26 | 27 | 与**公开训练**的区别: 28 | 29 | - 非训练创建者和超级管理员访问私有训练需要对应的密码。 30 | - **超级管理员与训练创建者的题目提交情况不会计入记录榜单** 31 | - 系统会同步普通用户对应训练题目的提交情况,生成对应的记录榜单。 32 | - 用户在进入私有训练后,只有在训练里面的题目提交,记录榜单才会继续更新记录。 33 | 34 | **系统同步用户对应题目数据的情况如下:** 35 | 36 | :::info 37 | 38 | - 用户第一次输入密码成功后,系统会同步其对应题目的提交情况到榜单。 39 | - 后台管理员增加新的题目,系统会同步训练已成功访问的所有用户对应新题目的提交情况。 40 | - 后台管理员移除题目,系统会删除对应题目的榜单记录。 41 | 42 | ::: 43 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/common/annotation/Access.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.common.annotation; 2 | 3 | import com.simplefanc.voj.backend.common.constants.AccessEnum; 4 | 5 | import java.lang.annotation.ElementType; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.RetentionPolicy; 8 | import java.lang.annotation.Target; 9 | 10 | /** 11 | * @Author chenfan 12 | * @Date 2022/9/25 13 | */ 14 | @Target({ElementType.TYPE, ElementType.METHOD}) 15 | @Retention(RetentionPolicy.RUNTIME) 16 | public @interface Access { 17 | AccessEnum[] value() default {}; 18 | } 19 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/AccessEnum.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.common.constants; 2 | 3 | /** 4 | * @Author chenfan 5 | * @Date 2022/9/25 6 | */ 7 | public enum AccessEnum { 8 | /** 9 | * 公共讨论区 10 | */ 11 | PUBLIC_DISCUSSION, 12 | 13 | /** 14 | * 比赛评论 15 | */ 16 | CONTEST_COMMENT, 17 | 18 | /** 19 | * 公共评测 20 | */ 21 | PUBLIC_JUDGE, 22 | 23 | /** 24 | * 比赛评测 25 | */ 26 | CONTEST_JUDGE, 27 | } 28 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/CallJudgerType.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.common.constants; 2 | 3 | /** 4 | * @author chenfan 5 | */ 6 | public enum CallJudgerType { 7 | 8 | JUDGE, 9 | COMPILE 10 | } 11 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/Constant.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.common.constants; 2 | 3 | /** 4 | * @author chenfan 5 | * @date 2022/5/7 22:46 6 | **/ 7 | public interface Constant { 8 | String GENERATE_USER_INFO_LIST = "GENERATE_USER_INFO_LIST"; 9 | } 10 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/EmailConstant.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.common.constants; 2 | 3 | /** 4 | * @Description 邮件任务的一些常量 5 | * @Since 2021/1/14 6 | */ 7 | public interface EmailConstant { 8 | 9 | String OJ_URL = "OJ_UR"; 10 | 11 | String OJ_NAME = "OJ_NAME"; 12 | 13 | String OJ_SHORT_NAME = "OJ_SHORT_NAME"; 14 | 15 | String EMAIL_FROM = "EMAIL_FROM"; 16 | 17 | String EMAIL_BACKGROUND_IMG = "EMAIL_BACKGROUND_IMG"; 18 | 19 | String REGISTER_KEY_PREFIX = "register-user:"; 20 | 21 | String RESET_PASSWORD_KEY_PREFIX = "reset-password:"; 22 | 23 | String RESET_EMAIL_LOCK = "reset-email-lock:"; 24 | 25 | String REGISTER_EMAIL_LOCK = "register-email-lock:"; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/FileConstant.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.common.constants; 2 | 3 | /** 4 | * @Description 文件操作的一些常量 5 | * @Since 2021/1/10 6 | */ 7 | public interface FileConstant { 8 | 9 | String USER_AVATAR_FOLDER = "/voj/file/avatar"; 10 | 11 | String HOME_CAROUSEL_FOLDER = "/voj/file/carousel"; 12 | 13 | String MARKDOWN_FILE_FOLDER = "/voj/file/md"; 14 | 15 | String PROBLEM_FILE_FOLDER = "/voj/file/problem"; 16 | 17 | String CONTEST_TEXT_PRINT_FOLDER = "/voj/file/contest_print"; 18 | 19 | String IMG_API = "/api/public/img/"; 20 | 21 | String FILE_API = "/api/public/file/"; 22 | 23 | String TESTCASE_TMP_FOLDER = "/voj/file/zip"; 24 | 25 | String TESTCASE_BASE_FOLDER = "/voj/testcase"; 26 | 27 | String FILE_DOWNLOAD_TMP_FOLDER = "/voj/file/zip/download"; 28 | 29 | String CONTEST_AC_SUBMISSION_TMP_FOLDER = "/voj/file/zip/contest_ac"; 30 | 31 | } 32 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/FileTypeEnum.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.common.constants; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * @author chenfan 8 | * @date 2022/5/7 22:41 9 | **/ 10 | @Getter 11 | @AllArgsConstructor 12 | public enum FileTypeEnum { 13 | AVATAR("avatar"), 14 | 15 | CAROUSEL("carousel"), 16 | 17 | MARKDOWN("md"); 18 | 19 | private final String type; 20 | } 21 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/QueueConstant.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.common.constants; 2 | 3 | /** 4 | * 等待判题的redis队列 5 | * 6 | * @Since 2021/12/22 7 | */ 8 | public interface QueueConstant { 9 | 10 | String CONTEST_JUDGE_WAITING = "Contest_Waiting_Handle_Queue"; 11 | 12 | String GENERAL_JUDGE_WAITING = "General_Waiting_Handle_Queue"; 13 | 14 | String CONTEST_REMOTE_JUDGE_WAITING_HANDLE = "Contest_Remote_Waiting_Handle_Queue"; 15 | 16 | String GENERAL_REMOTE_JUDGE_WAITING_HANDLE = "General_Remote_Waiting_Handle_Queue"; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/RoleEnum.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.common.constants; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | @Getter 7 | @AllArgsConstructor 8 | public enum RoleEnum { 9 | ROOT(1000L, "root"), 10 | ADMIN(1001L, "admin"), 11 | DEFAULT_USER(1002L, "default_user"), 12 | NO_SUBMIT_USER(1003L, "no_submit_user"), 13 | NO_DISCUSS_USER(1004L, "no_discuss_user"), 14 | MUTE_USER(1005L, "mute_user"), 15 | NO_SUBMIT_NO_DISCUSS_USER(1006L, "no_submit_no_discuss_user"), 16 | NO_SUBMIT_MUTE_USER(1007L, "no_submit_mute_user"), 17 | PROBLEM_ADMIN(1008L, "problem_admin"); 18 | 19 | private final Long id; 20 | private final String name; 21 | } 22 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/ScheduleConstant.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.common.constants; 2 | 3 | /** 4 | * @author chenfan 5 | * @date 2022/4/18 16:23 6 | **/ 7 | public interface ScheduleConstant { 8 | 9 | String RECENT_OTHER_CONTEST = "recent-other-contest"; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/TrainingEnum.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.common.constants; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * @Description 训练题单的一些常量 8 | * @Since 2021/11/20 9 | */ 10 | @Getter 11 | @AllArgsConstructor 12 | public enum TrainingEnum { 13 | 14 | AUTH_PRIVATE("Private"), 15 | AUTH_PUBLIC("Public"); 16 | 17 | private final String value; 18 | } 19 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/common/constants/UserStatusEnum.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.common.constants; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * @Author chenfan 8 | * @Date 2022/9/28 9 | */ 10 | @Getter 11 | @AllArgsConstructor 12 | public enum UserStatusEnum { 13 | NORMAL(0), 14 | FORBID(1), 15 | APPLYING(2); 16 | 17 | private final Integer status; 18 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/common/exception/StatusAccessDeniedException.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.common.exception; 2 | 3 | /** 4 | * @Author: chenfan 5 | * @Date: 2022/3/9 10:30 6 | * @Description: 7 | */ 8 | public class StatusAccessDeniedException extends RuntimeException { 9 | 10 | public StatusAccessDeniedException() { 11 | } 12 | 13 | public StatusAccessDeniedException(String message) { 14 | super(message); 15 | } 16 | 17 | public StatusAccessDeniedException(String message, Throwable cause) { 18 | super(message, cause); 19 | } 20 | 21 | public StatusAccessDeniedException(Throwable cause) { 22 | super(cause); 23 | } 24 | 25 | public StatusAccessDeniedException(String message, Throwable cause, boolean enableSuppression, 26 | boolean writableStackTrace) { 27 | super(message, cause, enableSuppression, writableStackTrace); 28 | } 29 | 30 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/common/exception/StatusFailException.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.common.exception; 2 | 3 | /** 4 | * @Author: chenfan 5 | * @Date: 2022/3/9 10:27 6 | * @Description: 7 | */ 8 | public class StatusFailException extends RuntimeException { 9 | 10 | public StatusFailException() { 11 | } 12 | 13 | public StatusFailException(String message) { 14 | super(message); 15 | } 16 | 17 | public StatusFailException(String message, Throwable cause) { 18 | super(message, cause); 19 | } 20 | 21 | public StatusFailException(Throwable cause) { 22 | super(cause); 23 | } 24 | 25 | public StatusFailException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { 26 | super(message, cause, enableSuppression, writableStackTrace); 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/common/exception/StatusForbiddenException.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.common.exception; 2 | 3 | /** 4 | * @Author: chenfan 5 | * @Date: 2022/3/9 10:29 6 | * @Description: 7 | */ 8 | public class StatusForbiddenException extends RuntimeException { 9 | 10 | public StatusForbiddenException() { 11 | } 12 | 13 | public StatusForbiddenException(String message) { 14 | super(message); 15 | } 16 | 17 | public StatusForbiddenException(String message, Throwable cause) { 18 | super(message, cause); 19 | } 20 | 21 | public StatusForbiddenException(Throwable cause) { 22 | super(cause); 23 | } 24 | 25 | public StatusForbiddenException(String message, Throwable cause, boolean enableSuppression, 26 | boolean writableStackTrace) { 27 | super(message, cause, enableSuppression, writableStackTrace); 28 | } 29 | 30 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/common/exception/StatusNotFoundException.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.common.exception; 2 | 3 | /** 4 | * @Author: chenfan 5 | * @Date: 2022/3/9 10:30 6 | * @Description: 7 | */ 8 | public class StatusNotFoundException extends RuntimeException { 9 | 10 | public StatusNotFoundException() { 11 | } 12 | 13 | public StatusNotFoundException(String message) { 14 | super(message); 15 | } 16 | 17 | public StatusNotFoundException(String message, Throwable cause) { 18 | super(message, cause); 19 | } 20 | 21 | public StatusNotFoundException(Throwable cause) { 22 | super(cause); 23 | } 24 | 25 | public StatusNotFoundException(String message, Throwable cause, boolean enableSuppression, 26 | boolean writableStackTrace) { 27 | super(message, cause, enableSuppression, writableStackTrace); 28 | } 29 | 30 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/common/exception/StatusSystemErrorException.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.common.exception; 2 | 3 | /** 4 | * @Author: chenfan 5 | * @Date: 2022/3/10 14:33 6 | * @Description: 7 | */ 8 | public class StatusSystemErrorException extends RuntimeException { 9 | 10 | public StatusSystemErrorException() { 11 | } 12 | 13 | public StatusSystemErrorException(String message) { 14 | super(message); 15 | } 16 | 17 | public StatusSystemErrorException(String message, Throwable cause) { 18 | super(message, cause); 19 | } 20 | 21 | public StatusSystemErrorException(Throwable cause) { 22 | super(cause); 23 | } 24 | 25 | public StatusSystemErrorException(String message, Throwable cause, boolean enableSuppression, 26 | boolean writableStackTrace) { 27 | super(message, cause, enableSuppression, writableStackTrace); 28 | } 29 | 30 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/common/utils/ExcelUtil.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.common.utils; 2 | 3 | import cn.hutool.core.util.CharsetUtil; 4 | import lombok.experimental.UtilityClass; 5 | 6 | import javax.servlet.http.HttpServletResponse; 7 | import java.net.URLEncoder; 8 | import java.nio.charset.StandardCharsets; 9 | 10 | /** 11 | * @author chenfan 12 | * @date 2022/5/20 20:40 13 | **/ 14 | @UtilityClass 15 | public class ExcelUtil { 16 | public void wrapExcelResponse(HttpServletResponse response, String fileName) { 17 | response.setContentType("application/vnd.ms-excel"); 18 | response.setCharacterEncoding(CharsetUtil.UTF_8); 19 | // 这里URLEncoder.encode可以防止中文乱码 20 | response.setHeader("Content-disposition", "attachment;filename=" 21 | + URLEncoder.encode(fileName, StandardCharsets.UTF_8) 22 | + ".xlsx"); 23 | response.setHeader("Content-Type", "application/xlsx"); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/config/CacheConfig.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.config; 2 | 3 | import com.simplefanc.voj.backend.cache.DoubleCacheManager; 4 | import com.simplefanc.voj.backend.config.property.DoubleCacheProperties; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.context.annotation.Bean; 7 | import org.springframework.context.annotation.Configuration; 8 | import org.springframework.data.redis.core.RedisTemplate; 9 | 10 | /** 11 | * @author: chenfan 12 | * @create: 2022-10-6 10:07 13 | **/ 14 | //@Configuration 15 | public class CacheConfig { 16 | // @Autowired 17 | DoubleCacheProperties doubleCacheConfig; 18 | 19 | // @Bean 20 | public DoubleCacheManager cacheManager(RedisTemplate redisTemplate, 21 | DoubleCacheProperties doubleCacheConfig) { 22 | return new DoubleCacheManager(redisTemplate, doubleCacheConfig); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/config/MyMetaObjectConfig.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.config; 2 | 3 | import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; 4 | import org.apache.ibatis.reflection.MetaObject; 5 | import org.springframework.stereotype.Component; 6 | 7 | import java.util.Date; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/12/4 14:14 12 | * @Description: 处理mybatis-plus自动填充时间 13 | */ 14 | @Component 15 | public class MyMetaObjectConfig implements MetaObjectHandler { 16 | 17 | @Override 18 | public void insertFill(MetaObject metaObject) { 19 | this.setFieldValByName("gmtCreate", new Date(), metaObject); 20 | this.setFieldValByName("gmtModified", new Date(), metaObject); 21 | } 22 | 23 | @Override 24 | public void updateFill(MetaObject metaObject) { 25 | this.setFieldValByName("gmtModified", new Date(), metaObject); 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/config/property/DoubleCacheProperties.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.config.property; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | import org.springframework.stereotype.Component; 6 | 7 | /** 8 | * @program: double-cache 9 | * @author: chenfan 10 | * @create: 2022-10-6 10:07 11 | **/ 12 | @Data 13 | @Component 14 | @ConfigurationProperties(prefix = "voj.cache") 15 | public class DoubleCacheProperties { 16 | private Boolean allowNull = true; 17 | /** 18 | * 缓存初始容量(能存储多少个缓存对象) 19 | */ 20 | private Integer initialCapacity = 100; 21 | /** 22 | * 缓存最大容量 23 | */ 24 | private Integer maximumSize = 1000; 25 | /** 26 | * 指定缓存的过期时间(写了之后多久过期) 27 | */ 28 | private Long expireAfterWrite; 29 | private Long expireAfterAccess; 30 | private Long refreshAfterWrite; 31 | private Long redisExpire; 32 | } 33 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/config/property/FilePathProperties.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.config.property; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | import org.springframework.stereotype.Component; 6 | 7 | /** 8 | * https://www.baeldung.com/spring-boot-yaml-list 9 | */ 10 | @Component 11 | @ConfigurationProperties(prefix = "filepath") 12 | @Data 13 | public class FilePathProperties { 14 | 15 | private String userAvatarFolder; 16 | 17 | /** 18 | * 主页轮播图 19 | */ 20 | private String homeCarouselFolder; 21 | 22 | private String markdownFileFolder; 23 | 24 | private String problemFileFolder; 25 | 26 | private String contestTextPrintFolder; 27 | 28 | private String imgApi; 29 | 30 | private String fileApi; 31 | 32 | private String testcaseTmpFolder; 33 | 34 | private String testcaseBaseFolder; 35 | 36 | private String fileDownloadTmpFolder; 37 | 38 | private String contestAcSubmissionTmpFolder; 39 | 40 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/config/property/RemoteAccountProperties.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.config.property; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | import org.springframework.stereotype.Component; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * https://www.baeldung.com/spring-boot-yaml-list 11 | */ 12 | @Component 13 | @ConfigurationProperties(prefix = "voj.remote") 14 | @Data 15 | public class RemoteAccountProperties { 16 | 17 | private List ojs; 18 | 19 | @Data 20 | public static class RemoteOj { 21 | 22 | private String oj; 23 | 24 | private List accounts; 25 | 26 | } 27 | 28 | @Data 29 | public static class Account { 30 | 31 | private String username; 32 | 33 | private String password; 34 | 35 | } 36 | 37 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/common/AnnouncementEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.common; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import com.simplefanc.voj.backend.pojo.vo.AnnouncementVO; 6 | import com.simplefanc.voj.common.pojo.entity.common.Announcement; 7 | 8 | /** 9 | *

10 | * 服务类 11 | *

12 | * 13 | * @Author: chenfan 14 | * @since 2021-10-23 15 | */ 16 | public interface AnnouncementEntityService extends IService { 17 | 18 | IPage getAnnouncementList(int limit, int currentPage, Boolean notAdmin); 19 | 20 | IPage getContestAnnouncement(Long cid, Boolean notAdmin, int limit, int currentPage); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/common/FileEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.common; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.common.File; 5 | 6 | import java.util.List; 7 | 8 | public interface FileEntityService extends IService { 9 | 10 | int updateFileToDeleteByUidAndType(String uid, String type); 11 | 12 | List queryDeleteAvatarList(); 13 | 14 | List queryCarouselFileList(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/ContestAnnouncementEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.contest; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.contest.ContestAnnouncement; 5 | 6 | public interface ContestAnnouncementEntityService extends IService { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/ContestEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.contest; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import com.simplefanc.voj.backend.pojo.vo.ContestVO; 6 | import com.simplefanc.voj.common.pojo.entity.contest.Contest; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | *

12 | * 服务类 13 | *

14 | * 15 | * @Author: chenfan 16 | * @since 2021-10-23 17 | */ 18 | public interface ContestEntityService extends IService { 19 | 20 | List getWithinNext14DaysContests(); 21 | 22 | IPage getContestList(Integer limit, Integer currentPage, Integer type, Integer status, String keyword); 23 | 24 | ContestVO getContestInfoById(long cid); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/ContestPrintEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.contest; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.contest.ContestPrint; 5 | 6 | /** 7 | * @Author: chenfan 8 | * @Date: 2021/9/19 21:05 9 | * @Description: 10 | */ 11 | public interface ContestPrintEntityService extends IService { 12 | 13 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/ContestProblemEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.contest; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.backend.pojo.vo.ContestProblemVO; 5 | import com.simplefanc.voj.common.pojo.entity.contest.ContestProblem; 6 | 7 | import java.util.Date; 8 | import java.util.List; 9 | 10 | /** 11 | *

12 | * 服务类 13 | *

14 | * 15 | * @Author: chenfan 16 | * @since 2021-10-23 17 | */ 18 | public interface ContestProblemEntityService extends IService { 19 | 20 | List getContestProblemList(Long cid, Date startTime, Date endTime, Date sealTime, Boolean isAdmin, 21 | String contestAuthorUid); 22 | 23 | void syncContestRecord(Long pid, Long cid, String displayId); 24 | 25 | } 26 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/ContestRecordEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.contest; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import com.simplefanc.voj.backend.pojo.vo.ContestRecordVO; 6 | import com.simplefanc.voj.common.pojo.entity.contest.Contest; 7 | import com.simplefanc.voj.common.pojo.entity.contest.ContestRecord; 8 | 9 | import java.util.Date; 10 | import java.util.List; 11 | 12 | /** 13 | *

14 | * 服务类 15 | *

16 | * 17 | * @Author: chenfan 18 | * @since 2021-10-23 19 | */ 20 | public interface ContestRecordEntityService extends IService { 21 | 22 | IPage getACInfo(Integer currentPage, Integer limit, Integer status, Long cid, 23 | String contestCreatorId); 24 | 25 | List getOIContestRecord(Contest contest, Boolean isOpenSealRank); 26 | 27 | List getACMContestRecord(Long cid, Date startTime); 28 | 29 | } 30 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/ContestRegisterEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.contest; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.contest.ContestRegister; 5 | 6 | import java.util.Set; 7 | 8 | /** 9 | *

10 | * 服务类 11 | *

12 | * 13 | * @Author: chenfan 14 | * @since 2021-10-23 15 | */ 16 | public interface ContestRegisterEntityService extends IService { 17 | Set getRegisteredUsers(Long cid); 18 | } 19 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/impl/ContestAnnouncementEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.contest.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.backend.dao.contest.ContestAnnouncementEntityService; 5 | import com.simplefanc.voj.backend.mapper.ContestAnnouncementMapper; 6 | import com.simplefanc.voj.common.pojo.entity.contest.ContestAnnouncement; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/12/21 22:59 12 | * @Description: 13 | */ 14 | @Service 15 | public class ContestAnnouncementEntityServiceImpl extends ServiceImpl 16 | implements ContestAnnouncementEntityService { 17 | 18 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/contest/impl/ContestPrintEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.contest.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.backend.dao.contest.ContestPrintEntityService; 5 | import com.simplefanc.voj.backend.mapper.ContestPrintMapper; 6 | import com.simplefanc.voj.common.pojo.entity.contest.ContestPrint; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/9/19 21:05 12 | * @Description: 13 | */ 14 | @Service 15 | public class ContestPrintEntityServiceImpl extends ServiceImpl 16 | implements ContestPrintEntityService { 17 | 18 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/CommentLikeEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.discussion; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.discussion.CommentLike; 5 | 6 | public interface CommentLikeEntityService extends IService { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/DiscussionEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.discussion; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.backend.pojo.vo.DiscussionVO; 5 | import com.simplefanc.voj.common.pojo.entity.discussion.Discussion; 6 | 7 | public interface DiscussionEntityService extends IService { 8 | 9 | DiscussionVO getDiscussion(Integer did, String uid); 10 | 11 | void updatePostLikeMsg(String recipientId, String senderId, Integer discussionId); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/DiscussionLikeEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.discussion; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.discussion.DiscussionLike; 5 | 6 | public interface DiscussionLikeEntityService extends IService { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/DiscussionReportEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.discussion; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.discussion.DiscussionReport; 5 | 6 | public interface DiscussionReportEntityService extends IService { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/ReplyEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.discussion; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.discussion.Reply; 5 | 6 | /** 7 | * @Author: chenfan 8 | * @Date: 2021/5/5 22:08 9 | * @Description: 10 | */ 11 | public interface ReplyEntityService extends IService { 12 | 13 | public void updateReplyMsg(Integer sourceId, String sourceType, String content, Integer quoteId, String quoteType, 14 | String recipientId, String senderId); 15 | 16 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/impl/CommentLikeEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.discussion.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.backend.dao.discussion.CommentLikeEntityService; 5 | import com.simplefanc.voj.backend.mapper.CommentLikeMapper; 6 | import com.simplefanc.voj.common.pojo.entity.discussion.CommentLike; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/5/4 22:31 12 | * @Description: 13 | */ 14 | @Service 15 | public class CommentLikeEntityServiceImpl extends ServiceImpl 16 | implements CommentLikeEntityService { 17 | 18 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/impl/DiscussionLikeEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.discussion.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.backend.dao.discussion.DiscussionLikeEntityService; 5 | import com.simplefanc.voj.backend.mapper.DiscussionLikeMapper; 6 | import com.simplefanc.voj.common.pojo.entity.discussion.DiscussionLike; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/5/4 22:31 12 | * @Description: 13 | */ 14 | @Service 15 | public class DiscussionLikeEntityServiceImpl extends ServiceImpl 16 | implements DiscussionLikeEntityService { 17 | 18 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/discussion/impl/DiscussionReportEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.discussion.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.backend.dao.discussion.DiscussionReportEntityService; 5 | import com.simplefanc.voj.backend.mapper.DiscussionReportMapper; 6 | import com.simplefanc.voj.common.pojo.entity.discussion.DiscussionReport; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/5/11 21:46 12 | * @Description: 13 | */ 14 | @Service 15 | public class DiscussionReportEntityServiceImpl extends ServiceImpl 16 | implements DiscussionReportEntityService { 17 | 18 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/judge/JudgeCaseEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.judge; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.judge.JudgeCase; 5 | 6 | /** 7 | *

8 | * 服务类 9 | *

10 | * 11 | * @Author: chenfan 12 | * @since 2021-10-23 13 | */ 14 | public interface JudgeCaseEntityService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/judge/JudgeServerEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.judge; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.judge.JudgeServer; 5 | 6 | public interface JudgeServerEntityService extends IService { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/judge/RemoteJudgeAccountEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.judge; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.judge.RemoteJudgeAccount; 5 | 6 | public interface RemoteJudgeAccountEntityService extends IService { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/judge/impl/JudgeCaseEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.judge.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.backend.dao.judge.JudgeCaseEntityService; 5 | import com.simplefanc.voj.backend.mapper.JudgeCaseMapper; 6 | import com.simplefanc.voj.common.pojo.entity.judge.JudgeCase; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | *

11 | * 服务实现类 12 | *

13 | * 14 | * @Author: chenfan 15 | * @since 2021-10-23 16 | */ 17 | @Service 18 | public class JudgeCaseEntityServiceImpl extends ServiceImpl 19 | implements JudgeCaseEntityService { 20 | 21 | } 22 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/judge/impl/JudgeServerEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.judge.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.backend.dao.judge.JudgeServerEntityService; 5 | import com.simplefanc.voj.backend.mapper.JudgeServerMapper; 6 | import com.simplefanc.voj.common.pojo.entity.judge.JudgeServer; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/4/15 11:27 12 | * @Description: 13 | */ 14 | @Service 15 | public class JudgeServerEntityServiceImpl extends ServiceImpl 16 | implements JudgeServerEntityService { 17 | 18 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/judge/impl/RemoteJudgeAccountEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.judge.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.backend.dao.judge.RemoteJudgeAccountEntityService; 5 | import com.simplefanc.voj.backend.mapper.RemoteJudgeAccountMapper; 6 | import com.simplefanc.voj.common.pojo.entity.judge.RemoteJudgeAccount; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/5/18 17:46 12 | * @Description: 13 | */ 14 | @Service 15 | public class RemoteJudgeAccountEntityServiceImpl extends ServiceImpl 16 | implements RemoteJudgeAccountEntityService { 17 | 18 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/msg/AdminSysNoticeEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.msg; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import com.simplefanc.voj.backend.pojo.vo.AdminSysNoticeVO; 6 | import com.simplefanc.voj.common.pojo.entity.msg.AdminSysNotice; 7 | 8 | /** 9 | * @Author: chenfan 10 | * @Date: 2021/10/1 20:33 11 | * @Description: 12 | */ 13 | public interface AdminSysNoticeEntityService extends IService { 14 | 15 | IPage getSysNotice(int limit, int currentPage, String type); 16 | 17 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/msg/MsgRemindEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.msg; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 5 | import com.baomidou.mybatisplus.extension.service.IService; 6 | import com.simplefanc.voj.backend.pojo.vo.UserMsgVO; 7 | import com.simplefanc.voj.backend.pojo.vo.UserUnreadMsgCountVO; 8 | import com.simplefanc.voj.common.pojo.entity.msg.MsgRemind; 9 | 10 | /** 11 | * @Author: chenfan 12 | * @Date: 2021/10/1 20:32 13 | * @Description: 14 | */ 15 | public interface MsgRemindEntityService extends IService { 16 | 17 | UserUnreadMsgCountVO getUserUnreadMsgCount(String uid); 18 | 19 | IPage getUserMsg(Page page, String uid, String action); 20 | 21 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/msg/UserSysNoticeEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.msg; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import com.simplefanc.voj.backend.pojo.vo.SysMsgVO; 6 | import com.simplefanc.voj.common.pojo.entity.msg.UserSysNotice; 7 | 8 | public interface UserSysNoticeEntityService extends IService { 9 | 10 | IPage getSysNotice(int limit, int currentPage, String uid); 11 | 12 | IPage getMineNotice(int limit, int currentPage, String uid); 13 | 14 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/CategoryEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.problem; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.problem.Category; 5 | 6 | public interface CategoryEntityService extends IService { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/CodeTemplateEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.problem; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.problem.CodeTemplate; 5 | 6 | public interface CodeTemplateEntityService extends IService { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/LanguageEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.problem; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.problem.Language; 5 | 6 | public interface LanguageEntityService extends IService { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/ProblemCaseEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.problem; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.problem.ProblemCase; 5 | 6 | /** 7 | * @Author: chenfan 8 | * @Date: 2021/12/14 19:58 9 | * @Description: 10 | */ 11 | public interface ProblemCaseEntityService extends IService { 12 | 13 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/ProblemLanguageEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.problem; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.problem.ProblemLanguage; 5 | 6 | /** 7 | * @Author: chenfan 8 | * @Date: 2021/12/13 00:03 9 | * @Description: 10 | */ 11 | public interface ProblemLanguageEntityService extends IService { 12 | 13 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/ProblemTagEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.problem; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.problem.ProblemTag; 5 | 6 | public interface ProblemTagEntityService extends IService { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/TagClassificationEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.problem; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.problem.TagClassification; 5 | 6 | /** 7 | * @Author chenfan 8 | * @Date 2022/8/3 9 | */ 10 | public interface TagClassificationEntityService extends IService { 11 | } 12 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/TagEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.problem; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.problem.Tag; 5 | 6 | /** 7 | *

8 | * 服务类 9 | *

10 | * 11 | * @Author: chenfan 12 | * @since 2021-10-23 13 | */ 14 | public interface TagEntityService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/CategoryEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.problem.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.backend.dao.problem.CategoryEntityService; 5 | import com.simplefanc.voj.backend.mapper.CategoryMapper; 6 | import com.simplefanc.voj.common.pojo.entity.problem.Category; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/5/4 22:30 12 | * @Description: 13 | */ 14 | @Service 15 | public class CategoryEntityServiceImpl extends ServiceImpl implements CategoryEntityService { 16 | 17 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/CodeTemplateEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.problem.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.backend.dao.problem.CodeTemplateEntityService; 5 | import com.simplefanc.voj.backend.mapper.CodeTemplateMapper; 6 | import com.simplefanc.voj.common.pojo.entity.problem.CodeTemplate; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/4/24 10:27 12 | * @Description: 13 | */ 14 | @Service 15 | public class CodeTemplateEntityServiceImpl extends ServiceImpl 16 | implements CodeTemplateEntityService { 17 | 18 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/LanguageEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.problem.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.backend.dao.problem.LanguageEntityService; 5 | import com.simplefanc.voj.backend.mapper.LanguageMapper; 6 | import com.simplefanc.voj.common.pojo.entity.problem.Language; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/12/12 23:23 12 | * @Description: 13 | */ 14 | @Service 15 | public class LanguageEntityServiceImpl extends ServiceImpl implements LanguageEntityService { 16 | 17 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/ProblemCaseEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.problem.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.backend.dao.problem.ProblemCaseEntityService; 5 | import com.simplefanc.voj.backend.mapper.ProblemCaseMapper; 6 | import com.simplefanc.voj.common.pojo.entity.problem.ProblemCase; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/12/14 19:59 12 | * @Description: 13 | */ 14 | @Service 15 | public class ProblemCaseEntityServiceImpl extends ServiceImpl 16 | implements ProblemCaseEntityService { 17 | 18 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/ProblemLanguageEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.problem.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.backend.dao.problem.ProblemLanguageEntityService; 5 | import com.simplefanc.voj.backend.mapper.ProblemLanguageMapper; 6 | import com.simplefanc.voj.common.pojo.entity.problem.ProblemLanguage; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/12/13 00:04 12 | * @Description: 13 | */ 14 | @Service 15 | public class ProblemLanguageEntityServiceImpl extends ServiceImpl 16 | implements ProblemLanguageEntityService { 17 | 18 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/ProblemTagEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.problem.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.backend.dao.problem.ProblemTagEntityService; 5 | import com.simplefanc.voj.backend.mapper.ProblemTagMapper; 6 | import com.simplefanc.voj.common.pojo.entity.problem.ProblemTag; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/12/13 23:22 12 | * @Description: 13 | */ 14 | @Service 15 | public class ProblemTagEntityServiceImpl extends ServiceImpl 16 | implements ProblemTagEntityService { 17 | 18 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/TagClassificationEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.problem.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.backend.dao.problem.TagClassificationEntityService; 5 | import com.simplefanc.voj.backend.mapper.TagClassificationMapper; 6 | import com.simplefanc.voj.common.pojo.entity.problem.TagClassification; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * @Author chenfan 11 | * @Date 2022/8/3 12 | */ 13 | @Service 14 | public class TagClassificationEntityServiceImpl extends ServiceImpl implements TagClassificationEntityService { 15 | } 16 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/problem/impl/TagEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.problem.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.backend.dao.problem.TagEntityService; 5 | import com.simplefanc.voj.backend.mapper.TagMapper; 6 | import com.simplefanc.voj.common.pojo.entity.problem.Tag; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | *

11 | * 服务实现类 12 | *

13 | * 14 | * @Author: chenfan 15 | * @since 2021-10-23 16 | */ 17 | @Service 18 | public class TagEntityServiceImpl extends ServiceImpl implements TagEntityService { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/MappingTrainingCategoryEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.training; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.training.MappingTrainingCategory; 5 | 6 | public interface MappingTrainingCategoryEntityService extends IService { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/TrainingCategoryEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.training; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.training.TrainingCategory; 5 | 6 | public interface TrainingCategoryEntityService extends IService { 7 | 8 | TrainingCategory getTrainingCategoryByTrainingId(Long tid); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/TrainingEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.training; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import com.simplefanc.voj.backend.pojo.vo.TrainingVO; 6 | import com.simplefanc.voj.common.pojo.entity.training.Training; 7 | 8 | public interface TrainingEntityService extends IService { 9 | 10 | IPage getTrainingList(int limit, int currentPage, Long categoryId, String auth, String keyword); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/TrainingProblemEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.training; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.backend.pojo.vo.ProblemVO; 5 | import com.simplefanc.voj.common.pojo.entity.training.TrainingProblem; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/11/20 12:24 12 | * @Description: 13 | */ 14 | public interface TrainingProblemEntityService extends IService { 15 | 16 | List getTrainingProblemIdList(Long tid); 17 | 18 | List getTrainingProblemList(Long tid); 19 | 20 | Integer getUserTrainingACProblemCount(String uid, List pidList); 21 | 22 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/TrainingRecordEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.training; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.backend.pojo.vo.TrainingRecordVO; 5 | import com.simplefanc.voj.common.pojo.entity.training.TrainingRecord; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/11/21 23:38 12 | * @Description: 13 | */ 14 | public interface TrainingRecordEntityService extends IService { 15 | 16 | List getTrainingRecord(Long tid); 17 | 18 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/TrainingRegisterEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.training; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.training.TrainingRegister; 5 | 6 | import java.util.List; 7 | 8 | public interface TrainingRegisterEntityService extends IService { 9 | 10 | List getAlreadyRegisterUidList(Long tid); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/training/impl/MappingTrainingCategoryEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.training.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.backend.dao.training.MappingTrainingCategoryEntityService; 5 | import com.simplefanc.voj.backend.mapper.MappingTrainingCategoryMapper; 6 | import com.simplefanc.voj.common.pojo.entity.training.MappingTrainingCategory; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2022/3/9 19:53 12 | * @Description: 13 | */ 14 | @Service 15 | public class MappingTrainingCategoryEntityServiceImpl 16 | extends ServiceImpl 17 | implements MappingTrainingCategoryEntityService { 18 | 19 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/AuthEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.user; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.user.Auth; 5 | 6 | /** 7 | *

8 | * 服务类 9 | *

10 | * 11 | * @Author: chenfan 12 | * @since 2021-10-23 13 | */ 14 | public interface AuthEntityService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/RoleAuthEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.user; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.user.RoleAuth; 5 | 6 | /** 7 | *

8 | * 服务类 9 | *

10 | * 11 | * @Author: chenfan 12 | * @since 2021-10-23 13 | */ 14 | public interface RoleAuthEntityService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/RoleEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.user; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.user.Role; 5 | 6 | /** 7 | *

8 | * 服务类 9 | *

10 | * 11 | * @Author: chenfan 12 | * @since 2021-10-23 13 | */ 14 | public interface RoleEntityService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/SessionEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.user; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.user.Session; 5 | 6 | public interface SessionEntityService extends IService { 7 | 8 | void checkRemoteLogin(String uid); 9 | 10 | } 11 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/UserAcproblemEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.user; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.user.UserAcproblem; 5 | 6 | /** 7 | *

8 | * 服务类 9 | *

10 | * 11 | * @Author: chenfan 12 | * @since 2021-10-23 13 | */ 14 | public interface UserAcproblemEntityService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/UserInfoEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.user; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.backend.pojo.dto.RegisterDTO; 5 | import com.simplefanc.voj.common.pojo.entity.user.UserInfo; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | *

11 | * 服务类 12 | *

13 | * 14 | * @Author: chenfan 15 | * @since 2021-10-23 16 | */ 17 | public interface UserInfoEntityService extends IService { 18 | 19 | Boolean addUser(RegisterDTO registerDTO); 20 | 21 | List getSuperAdminUidList(); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/UserRoleEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.user; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | import com.baomidou.mybatisplus.extension.service.IService; 5 | import com.simplefanc.voj.backend.pojo.vo.UserRolesVO; 6 | import com.simplefanc.voj.common.pojo.entity.user.UserRole; 7 | 8 | /** 9 | *

10 | * 服务类 11 | *

12 | * 13 | * @Author: chenfan 14 | * @since 2021-10-23 15 | */ 16 | public interface UserRoleEntityService extends IService { 17 | 18 | UserRolesVO getUserRoles(String uid, String username); 19 | 20 | IPage getUserList(int limit, int currentPage, String keyword, Long role, Integer status); 21 | 22 | void deleteCache(String uid, boolean isRemoveSession); 23 | 24 | String getAuthChangeContent(int oldType, int newType); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/impl/AuthEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.user.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.backend.dao.user.AuthEntityService; 5 | import com.simplefanc.voj.backend.mapper.AuthMapper; 6 | import com.simplefanc.voj.common.pojo.entity.user.Auth; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | *

11 | * 服务实现类 12 | *

13 | * 14 | * @Author: chenfan 15 | * @since 2021-10-23 16 | */ 17 | @Service 18 | public class AuthEntityServiceImpl extends ServiceImpl implements AuthEntityService { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/impl/RoleAuthEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.user.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.backend.dao.user.RoleAuthEntityService; 5 | import com.simplefanc.voj.backend.mapper.RoleAuthMapper; 6 | import com.simplefanc.voj.common.pojo.entity.user.RoleAuth; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | *

11 | * 服务实现类 12 | *

13 | * 14 | * @Author: chenfan 15 | * @since 2021-10-23 16 | */ 17 | @Service 18 | public class RoleAuthEntityServiceImpl extends ServiceImpl implements RoleAuthEntityService { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/impl/RoleEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.user.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.backend.dao.user.RoleEntityService; 5 | import com.simplefanc.voj.backend.mapper.RoleMapper; 6 | import com.simplefanc.voj.common.pojo.entity.user.Role; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | *

11 | * 服务实现类 12 | *

13 | * 14 | * @Author: chenfan 15 | * @since 2021-10-23 16 | */ 17 | @Service 18 | public class RoleEntityServiceImpl extends ServiceImpl implements RoleEntityService { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/dao/user/impl/UserAcproblemEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.dao.user.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.backend.dao.user.UserAcproblemEntityService; 5 | import com.simplefanc.voj.backend.mapper.UserAcproblemMapper; 6 | import com.simplefanc.voj.common.pojo.entity.user.UserAcproblem; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | *

11 | * 服务实现类 12 | *

13 | * 14 | * @Author: chenfan 15 | * @since 2021-10-23 16 | */ 17 | @Service 18 | public class UserAcproblemEntityServiceImpl extends ServiceImpl 19 | implements UserAcproblemEntityService { 20 | 21 | } 22 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/judge/AbstractTaskReceiver.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.judge; 2 | 3 | /** 4 | * @Author: chenfan 5 | * @Date: 2021/12/22 12:40 6 | * @Description: 7 | */ 8 | public abstract class AbstractTaskReceiver { 9 | 10 | public void handleWaitingTask(String... queues) { 11 | for (String queue : queues) { 12 | String taskJsonStr = getTaskFromRedis(queue); 13 | if (taskJsonStr != null) { 14 | handleTask(taskJsonStr); 15 | } 16 | } 17 | } 18 | 19 | public abstract String getTaskFromRedis(String queue); 20 | 21 | public abstract void handleTask(String taskJsonStr); 22 | 23 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/AdminSysNoticeMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 6 | import com.simplefanc.voj.backend.pojo.vo.AdminSysNoticeVO; 7 | import com.simplefanc.voj.common.pojo.entity.msg.AdminSysNotice; 8 | import org.apache.ibatis.annotations.Mapper; 9 | import org.apache.ibatis.annotations.Param; 10 | 11 | @Mapper 12 | public interface AdminSysNoticeMapper extends BaseMapper { 13 | 14 | IPage getAdminSysNotice(Page page, @Param("type") String type); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/AnnouncementMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 6 | import com.simplefanc.voj.backend.pojo.vo.AnnouncementVO; 7 | import com.simplefanc.voj.common.pojo.entity.common.Announcement; 8 | import org.apache.ibatis.annotations.Mapper; 9 | import org.apache.ibatis.annotations.Param; 10 | 11 | /** 12 | *

13 | * Mapper 接口 14 | *

15 | * 16 | * @Author: chenfan 17 | * @since 2021-10-23 18 | */ 19 | @Mapper 20 | public interface AnnouncementMapper extends BaseMapper { 21 | 22 | IPage getAnnouncementList(Page page, @Param("notAdmin") Boolean notAdmin); 23 | 24 | IPage getContestAnnouncement(Page page, @Param("cid") Long cid, 25 | @Param("notAdmin") Boolean notAdmin); 26 | 27 | } 28 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/AuthMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.user.Auth; 5 | 6 | /** 7 | *

8 | * Mapper 接口 9 | *

10 | * 11 | * @Author: chenfan 12 | * @since 2021-10-23 13 | */ 14 | public interface AuthMapper extends BaseMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/CategoryMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.problem.Category; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface CategoryMapper extends BaseMapper { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/CodeTemplateMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.problem.CodeTemplate; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface CodeTemplateMapper extends BaseMapper { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/CommentLikeMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.discussion.CommentLike; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface CommentLikeMapper extends BaseMapper { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/ContestAnnouncementMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.contest.ContestAnnouncement; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface ContestAnnouncementMapper extends BaseMapper { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/ContestMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.simplefanc.voj.backend.pojo.vo.ContestRegisterCountVO; 6 | import com.simplefanc.voj.common.pojo.entity.contest.Contest; 7 | import org.apache.ibatis.annotations.Mapper; 8 | import org.apache.ibatis.annotations.Param; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | *

14 | * Mapper 接口 15 | *

16 | * 17 | * @Author: chenfan 18 | * @since 2021-10-23 19 | */ 20 | @Mapper 21 | public interface ContestMapper extends BaseMapper { 22 | 23 | List getContestList(IPage page, @Param("type") Integer type, @Param("status") Integer status, 24 | @Param("keyword") String keyword); 25 | 26 | List getContestRegisterCount(@Param("cidList") List cidList); 27 | 28 | List getWithinNext14DaysContests(); 29 | 30 | } 31 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/ContestPrintMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.contest.ContestPrint; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2021/9/19 21:04 10 | * @Description: 11 | */ 12 | @Mapper 13 | public interface ContestPrintMapper extends BaseMapper { 14 | 15 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/ContestProblemMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.backend.pojo.vo.ContestProblemVO; 5 | import com.simplefanc.voj.common.pojo.entity.contest.ContestProblem; 6 | import org.apache.ibatis.annotations.Mapper; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.Date; 10 | import java.util.List; 11 | 12 | /** 13 | *

14 | * Mapper 接口 15 | *

16 | * 17 | * @Author: chenfan 18 | * @since 2021-10-23 19 | */ 20 | @Mapper 21 | public interface ContestProblemMapper extends BaseMapper { 22 | 23 | List getContestProblemList(@Param("cid") Long cid, @Param("startTime") Date startTime, 24 | @Param("endTime") Date endTime, @Param("sealTime") Date sealTime, @Param("isAdmin") Boolean isAdmin, 25 | @Param("adminList") List adminList); 26 | 27 | } 28 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/ContestRegisterMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.contest.ContestRegister; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * Mapper 接口 10 | *

11 | * 12 | * @Author: chenfan 13 | * @since 2021-10-23 14 | */ 15 | @Mapper 16 | public interface ContestRegisterMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/DiscussionLikeMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.discussion.DiscussionLike; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface DiscussionLikeMapper extends BaseMapper { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/DiscussionMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.backend.pojo.vo.DiscussionVO; 5 | import com.simplefanc.voj.common.pojo.entity.discussion.Discussion; 6 | import org.apache.ibatis.annotations.Mapper; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | @Mapper 10 | public interface DiscussionMapper extends BaseMapper { 11 | 12 | DiscussionVO getDiscussion(@Param("did") Integer did, @Param("uid") String uid); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/DiscussionReportMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.discussion.DiscussionReport; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface DiscussionReportMapper extends BaseMapper { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/FileMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.common.File; 5 | import org.apache.ibatis.annotations.Mapper; 6 | import org.apache.ibatis.annotations.Param; 7 | import org.apache.ibatis.annotations.Select; 8 | import org.apache.ibatis.annotations.Update; 9 | 10 | import java.util.List; 11 | 12 | @Mapper 13 | public interface FileMapper extends BaseMapper { 14 | 15 | @Update("UPDATE `file` SET `delete` = 1 WHERE `uid` = #{uid} AND `type` = #{type}") 16 | int updateFileToDeleteByUidAndType(@Param("uid") String uid, @Param("type") String type); 17 | 18 | @Select("select * from file where (type = 'avatar' AND `delete` = true)") 19 | List queryDeleteAvatarList(); 20 | 21 | @Select("select * from file where (type = 'carousel')") 22 | List queryCarouselFileList(); 23 | 24 | } 25 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/JudgeCaseMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.judge.JudgeCase; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * Mapper 接口 10 | *

11 | * 12 | * @Author: chenfan 13 | * @since 2021-10-23 14 | */ 15 | @Mapper 16 | public interface JudgeCaseMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/JudgeServerMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.judge.JudgeServer; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface JudgeServerMapper extends BaseMapper { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/LanguageMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.problem.Language; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface LanguageMapper extends BaseMapper { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/MappingTrainingCategoryMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.training.MappingTrainingCategory; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface MappingTrainingCategoryMapper extends BaseMapper { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/MsgRemindMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 6 | import com.simplefanc.voj.backend.pojo.vo.UserMsgVO; 7 | import com.simplefanc.voj.backend.pojo.vo.UserUnreadMsgCountVO; 8 | import com.simplefanc.voj.common.pojo.entity.msg.MsgRemind; 9 | import org.apache.ibatis.annotations.Mapper; 10 | import org.apache.ibatis.annotations.Param; 11 | 12 | @Mapper 13 | public interface MsgRemindMapper extends BaseMapper { 14 | 15 | UserUnreadMsgCountVO getUserUnreadMsgCount(@Param("uid") String uid); 16 | 17 | IPage getUserMsg(Page page, @Param("uid") String uid, @Param("action") String action); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/ProblemCaseMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.problem.ProblemCase; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2021/12/14 19:57 10 | * @Description: 11 | */ 12 | @Mapper 13 | public interface ProblemCaseMapper extends BaseMapper { 14 | 15 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/ProblemLanguageMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.problem.ProblemLanguage; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface ProblemLanguageMapper extends BaseMapper { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/ProblemMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.simplefanc.voj.backend.pojo.vo.ProblemVO; 6 | import com.simplefanc.voj.common.pojo.entity.problem.Problem; 7 | import org.apache.ibatis.annotations.Mapper; 8 | import org.apache.ibatis.annotations.Param; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | *

14 | * Mapper 接口 15 | *

16 | * 17 | * @Author: chenfan 18 | * @since 2021-10-23 19 | */ 20 | @Mapper 21 | public interface ProblemMapper extends BaseMapper { 22 | 23 | List getProblemList(IPage page, @Param("keyword") String keyword, 24 | @Param("difficulty") Integer difficulty, @Param("tid") List tid, 25 | @Param("tagListSize") Integer tagListSize, @Param("oj") String oj, @Param("allProblemVisible") boolean allProblemVisible); 26 | 27 | } 28 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/ProblemTagMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.problem.ProblemTag; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface ProblemTagMapper extends BaseMapper { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/RemoteJudgeAccountMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.judge.RemoteJudgeAccount; 5 | import org.apache.ibatis.annotations.Mapper; 6 | import org.apache.ibatis.annotations.Param; 7 | import org.apache.ibatis.annotations.Select; 8 | import org.apache.ibatis.annotations.Update; 9 | 10 | import java.util.List; 11 | 12 | @Mapper 13 | public interface RemoteJudgeAccountMapper extends BaseMapper { 14 | 15 | @Select("select * from `remote_judge_account` where `oj` = #{oj} and `status` = 1 for update") 16 | List getAvailableAccount(@Param("oj") String oj); 17 | 18 | @Update("update `remote_judge_account` set `status` = 0 where `id` = #{id} and `status` = 1") 19 | int updateAccountStatusById(@Param("id") Integer id); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/ReplyMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.discussion.Reply; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2021/5/5 22:07 10 | * @Description: 11 | */ 12 | 13 | @Mapper 14 | public interface ReplyMapper extends BaseMapper { 15 | 16 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/RoleAuthMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.backend.pojo.vo.RoleAuthsVO; 5 | import com.simplefanc.voj.common.pojo.entity.user.RoleAuth; 6 | import org.apache.ibatis.annotations.Mapper; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | /** 10 | *

11 | * Mapper 接口 12 | *

13 | * 14 | * @Author: chenfan 15 | * @since 2021-10-23 16 | */ 17 | @Mapper 18 | public interface RoleAuthMapper extends BaseMapper { 19 | 20 | RoleAuthsVO getRoleAuths(@Param("rid") long rid); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/RoleMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.user.Role; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * Mapper 接口 10 | *

11 | * 12 | * @Author: chenfan 13 | * @since 2021-10-23 14 | */ 15 | @Mapper 16 | public interface RoleMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/SessionMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.user.Session; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface SessionMapper extends BaseMapper { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/TagClassificationMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.problem.TagClassification; 5 | import org.apache.ibatis.annotations.Mapper; 6 | import org.springframework.stereotype.Repository; 7 | 8 | /** 9 | * @Author chenfan 10 | * @Date 2022/8/3 11 | */ 12 | @Mapper 13 | public interface TagClassificationMapper extends BaseMapper { 14 | } 15 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/TagMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.problem.Tag; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * Mapper 接口 10 | *

11 | * 12 | * @Author: chenfan 13 | * @since 2021-10-23 14 | */ 15 | @Mapper 16 | public interface TagMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/TrainingCategoryMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.training.TrainingCategory; 5 | import org.apache.ibatis.annotations.Mapper; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | @Mapper 9 | public interface TrainingCategoryMapper extends BaseMapper { 10 | 11 | public TrainingCategory getTrainingCategoryByTrainingId(@Param("tid") Long tid); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/TrainingMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.backend.pojo.vo.TrainingVO; 5 | import com.simplefanc.voj.common.pojo.entity.training.Training; 6 | import org.apache.ibatis.annotations.Mapper; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * @Author: chenfan 13 | * @Date: 2021/11/19 22:03 14 | * @Description: 15 | */ 16 | @Mapper 17 | public interface TrainingMapper extends BaseMapper { 18 | 19 | List getTrainingList(@Param("categoryId") Long categoryId, @Param("auth") String auth, 20 | @Param("keyword") String keyword); 21 | 22 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/TrainingProblemMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.backend.pojo.vo.ProblemVO; 5 | import com.simplefanc.voj.common.pojo.entity.training.TrainingProblem; 6 | import org.apache.ibatis.annotations.Mapper; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.List; 10 | 11 | @Mapper 12 | public interface TrainingProblemMapper extends BaseMapper { 13 | 14 | public List getTrainingProblemCount(@Param("tid") Long tid); 15 | 16 | public List getTrainingProblemList(@Param("tid") Long tid); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/TrainingRecordMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.backend.pojo.vo.TrainingRecordVO; 5 | import com.simplefanc.voj.common.pojo.entity.training.TrainingRecord; 6 | import org.apache.ibatis.annotations.Mapper; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * @Author: chenfan 13 | * @Date: 2021/11/21 14:27 14 | * @Description: 15 | */ 16 | 17 | @Mapper 18 | public interface TrainingRecordMapper extends BaseMapper { 19 | 20 | public List getTrainingRecord(@Param("tid") Long tid); 21 | 22 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/TrainingRegisterMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.training.TrainingRegister; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface TrainingRegisterMapper extends BaseMapper { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/UserAcproblemMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.user.UserAcproblem; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * Mapper 接口 10 | *

11 | * 12 | * @Author: chenfan 13 | * @since 2021-10-23 14 | */ 15 | @Mapper 16 | public interface UserAcproblemMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/UserInfoMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.backend.pojo.dto.RegisterDTO; 5 | import com.simplefanc.voj.common.pojo.entity.user.UserInfo; 6 | import org.apache.ibatis.annotations.Mapper; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | import java.util.List; 10 | import java.util.Set; 11 | 12 | /** 13 | *

14 | * Mapper 接口 15 | *

16 | * 17 | * @Author: chenfan 18 | * @since 2021-10-23 19 | */ 20 | @Mapper 21 | public interface UserInfoMapper extends BaseMapper { 22 | 23 | int addUser(RegisterDTO registerDTO); 24 | 25 | List getSuperAdminUidList(@Param("roleId") Long roleId); 26 | 27 | } 28 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/UserSysNoticeMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 6 | import com.simplefanc.voj.backend.pojo.vo.SysMsgVO; 7 | import com.simplefanc.voj.common.pojo.entity.msg.UserSysNotice; 8 | import org.apache.ibatis.annotations.Mapper; 9 | import org.apache.ibatis.annotations.Param; 10 | 11 | @Mapper 12 | public interface UserSysNoticeMapper extends BaseMapper { 13 | 14 | IPage getSysOrMineNotice(Page page, @Param("uid") String uid, @Param("type") String type); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/xml/ContestExplanationMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/xml/ContestRegisterMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/xml/ContestScoreMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/xml/RoleMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/xml/SessionMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/xml/TagMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/xml/TrainingCategoryMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/xml/UserAcproblemMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/mapper/xml/UserInfoMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | insert into user_info(uuid, username, password, email, realname, school, `number`) 6 | values (#{uuid}, #{username}, #{password}, #{email}, #{realname}, #{school}, #{number}) 7 | 8 | 15 | 16 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/AdminEditUserDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import lombok.Data; 4 | 5 | import javax.validation.constraints.NotBlank; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2022/3/9 21:09 10 | * @Description: 11 | */ 12 | @Data 13 | public class AdminEditUserDTO { 14 | 15 | @NotBlank(message = "username不能为空") 16 | private String username; 17 | 18 | @NotBlank(message = "uid不能为空") 19 | private String uid; 20 | 21 | private String realname; 22 | 23 | private String school; 24 | 25 | private String number; 26 | 27 | private String email; 28 | 29 | private String password; 30 | 31 | private Integer type; 32 | 33 | private Integer status; 34 | 35 | private Boolean setNewPwd; 36 | 37 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/AnnouncementDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import com.simplefanc.voj.common.pojo.entity.common.Announcement; 4 | import lombok.Data; 5 | 6 | import javax.validation.constraints.NotBlank; 7 | 8 | /** 9 | * @Author: chenfan 10 | * @Date: 2021/12/21 22:55 11 | * @Description: 12 | */ 13 | @Data 14 | public class AnnouncementDTO { 15 | 16 | @NotBlank(message = "比赛id不能为空") 17 | private Long cid; 18 | 19 | private Announcement announcement; 20 | 21 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/ApplyResetPasswordDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import lombok.Data; 4 | 5 | import javax.validation.constraints.NotBlank; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2022/3/11 17:26 10 | * @Description: 11 | */ 12 | @Data 13 | public class ApplyResetPasswordDTO { 14 | 15 | @NotBlank(message = "邮箱或验证码不能为空") 16 | private String captcha; 17 | 18 | @NotBlank(message = "邮箱或验证码不能为空") 19 | private String captchaKey; 20 | 21 | @NotBlank(message = "邮箱或验证码不能为空") 22 | private String email; 23 | 24 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/ChangeEmailDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @Author: chenfan 7 | * @Date: 2022/3/11 18:05 8 | * @Description: 9 | */ 10 | @Data 11 | public class ChangeEmailDTO { 12 | 13 | private String password; 14 | 15 | private String newEmail; 16 | 17 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/ChangePasswordDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @Author: chenfan 7 | * @Date: 2022/3/11 18:06 8 | * @Description: 9 | */ 10 | @Data 11 | public class ChangePasswordDTO { 12 | 13 | private String oldPassword; 14 | 15 | private String newPassword; 16 | 17 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/CheckAcDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import lombok.Data; 4 | 5 | import javax.validation.constraints.NotBlank; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2021/1/17 19:13 10 | * @Description: 11 | */ 12 | @Data 13 | public class CheckAcDTO { 14 | 15 | @NotBlank(message = "比赛记录id不能为空") 16 | private Long id; 17 | 18 | @NotBlank(message = "比赛id不能为空") 19 | private Long cid; 20 | 21 | @NotBlank(message = "是否确认不能为空") 22 | private Boolean checked; 23 | 24 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/CheckUsernameOrEmailDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @Author: chenfan 7 | * @Date: 2022/3/11 18:15 8 | * @Description: 9 | */ 10 | @Data 11 | public class CheckUsernameOrEmailDTO { 12 | 13 | private String email; 14 | 15 | private String username; 16 | 17 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/ContestPrintDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import lombok.Data; 4 | 5 | import javax.validation.constraints.NotBlank; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2021/9/20 13:00 10 | * @Description: 11 | */ 12 | @Data 13 | public class ContestPrintDTO { 14 | 15 | @NotBlank(message = "比赛id不能为空") 16 | private Long cid; 17 | 18 | @NotBlank(message = "打印内容不能为空") 19 | private String content; 20 | 21 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/ContestProblemDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | import javax.validation.constraints.NotBlank; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2022/3/9 11:10 12 | * @Description: 13 | */ 14 | @Data 15 | @AllArgsConstructor 16 | @NoArgsConstructor 17 | public class ContestProblemDTO { 18 | 19 | @NotBlank(message = "题目id不能为空") 20 | private Long pid; 21 | 22 | @NotBlank(message = "比赛id不能为空") 23 | private Long cid; 24 | 25 | // @NotBlank(message = "题目在比赛中的展示id不能为空") 26 | // private String displayId; 27 | 28 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/ContestRankDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2021/12/10 17:07 10 | * @Description: 11 | */ 12 | @Data 13 | public class ContestRankDTO { 14 | 15 | /*** 16 | * @param cid 比赛id 17 | * @param removeStar 是否移除打星队伍 18 | * @param forceRefresh 是否强制实时榜单 19 | * @param concernedList 关注的用户(uuid)列表 20 | */ 21 | private Long cid; 22 | 23 | private Integer limit; 24 | 25 | private Integer currentPage; 26 | 27 | private Boolean forceRefresh; 28 | 29 | private Boolean removeStar; 30 | 31 | private List concernedList; 32 | 33 | private String keyword; 34 | 35 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/EmailConfigDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | import lombok.experimental.Accessors; 8 | 9 | /** 10 | * @Author chenfan 11 | * @Date 2022/4/2 19:40 12 | * @Description 13 | */ 14 | @Data 15 | @Accessors(chain = true) 16 | @Builder 17 | @AllArgsConstructor 18 | @NoArgsConstructor 19 | public class EmailConfigDTO { 20 | 21 | /** 22 | * SMTP 主机 23 | */ 24 | private String emailHost; 25 | 26 | /** 27 | * SMTP 密码/授权码 28 | */ 29 | private String emailPassword; 30 | 31 | /** 32 | * SMTP 端口 33 | */ 34 | private Integer emailPort; 35 | 36 | /** 37 | * SMTP 邮箱 38 | */ 39 | private String emailUsername; 40 | 41 | /** 42 | * 邮件背景图片 43 | */ 44 | private String emailBGImg; 45 | 46 | /** 47 | * SMTP 使用 SSL 48 | */ 49 | private Boolean emailSsl; 50 | 51 | } 52 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/LoginDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import lombok.Data; 4 | 5 | import javax.validation.constraints.NotBlank; 6 | import javax.validation.constraints.Size; 7 | import java.io.Serializable; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/7/20 00:23 12 | * @Description: 登录数据实体类 13 | */ 14 | @Data 15 | public class LoginDTO implements Serializable { 16 | 17 | @NotBlank(message = "用户名不能为空") 18 | @Size(max = 20, message = "用户名长度不能超过20位!") 19 | private String username; 20 | 21 | @NotBlank(message = "密码不能为空") 22 | @Size(min = 6, max = 20, message = "密码长度应该为6~20位!") 23 | private String password; 24 | 25 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/PidListDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import lombok.Data; 4 | import lombok.experimental.Accessors; 5 | 6 | import javax.validation.constraints.NotEmpty; 7 | import javax.validation.constraints.NotNull; 8 | import java.util.List; 9 | 10 | /** 11 | * @Author: chenfan 12 | * @Date: 2021/12/28 22:33 13 | * @Description: 主要是获取前端题目列表页查询用户对应题目提交详情 14 | */ 15 | @Data 16 | @Accessors(chain = true) 17 | public class PidListDTO { 18 | 19 | @NotEmpty(message = "查询的题目id列表不能为空") 20 | private List pidList; 21 | 22 | @NotNull(message = "是否为比赛题目提交判断不能为空") 23 | private Boolean isContestProblemList; 24 | 25 | private Long cid; 26 | 27 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/ProblemDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import com.simplefanc.voj.common.pojo.entity.problem.*; 4 | import lombok.Data; 5 | import lombok.experimental.Accessors; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/12/14 22:30 12 | * @Description: 13 | */ 14 | @Data 15 | @Accessors(chain = true) 16 | public class ProblemDTO { 17 | 18 | private Problem problem; 19 | 20 | private List samples; 21 | 22 | private Boolean isUploadTestCase; 23 | 24 | private String uploadTestcaseDir; 25 | 26 | private String judgeMode; 27 | 28 | private Boolean changeModeCode; 29 | 30 | private List languages; 31 | 32 | private List tags; 33 | 34 | private List codeTemplates; 35 | 36 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/RegisterContestDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import lombok.Data; 4 | 5 | import javax.validation.constraints.NotBlank; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2022/3/12 14:37 10 | * @Description: 11 | */ 12 | @Data 13 | public class RegisterContestDTO { 14 | 15 | @NotBlank(message = "cid不能为空") 16 | private Long cid; 17 | 18 | @NotBlank(message = "password不能为空") 19 | private String password; 20 | 21 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/RegisterTrainingDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import lombok.Data; 4 | 5 | import javax.validation.constraints.NotBlank; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2022/3/10 17:55 10 | * @Description: 11 | */ 12 | @Data 13 | public class RegisterTrainingDTO { 14 | 15 | @NotBlank(message = "tid不能为空") 16 | private Long tid; 17 | 18 | @NotBlank(message = "password不能为空") 19 | private String password; 20 | 21 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/ReplyDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import com.simplefanc.voj.common.pojo.entity.discussion.Reply; 4 | import lombok.Data; 5 | import lombok.experimental.Accessors; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2021/6/24 17:00 10 | * @Description: 11 | */ 12 | @Data 13 | @Accessors(chain = true) 14 | public class ReplyDTO { 15 | 16 | private Reply reply; 17 | 18 | private Integer did; 19 | 20 | private Integer quoteId; 21 | 22 | private String quoteType; 23 | 24 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/ResetPasswordDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import lombok.Data; 4 | 5 | import javax.validation.constraints.NotBlank; 6 | import javax.validation.constraints.Size; 7 | 8 | /** 9 | * @Author: chenfan 10 | * @Date: 2022/3/11 17:32 11 | * @Description: 12 | */ 13 | 14 | @Data 15 | public class ResetPasswordDTO { 16 | @NotBlank(message = "用户名不能为空") 17 | private String username; 18 | 19 | @Size(min = 6, max = 20, message = "新密码长度应该为6~20位!") 20 | @NotBlank(message = "新密码不能为空") 21 | private String password; 22 | 23 | @NotBlank(message = "验证码不能为空") 24 | private String code; 25 | 26 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/SubmitIdListDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import lombok.Data; 4 | 5 | import javax.validation.constraints.NotEmpty; 6 | import java.util.List; 7 | 8 | /** 9 | * @Author: chenfan 10 | * @Date: 2021/1/3 16:50 11 | * @Description: 12 | */ 13 | @Data 14 | public class SubmitIdListDTO { 15 | 16 | @NotEmpty(message = "查询的提交id列表不能为空") 17 | private List submitIds; 18 | 19 | private Long cid; 20 | 21 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/TestEmailDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @Author: chenfan 7 | * @Date: 2022/4/7 11:02 8 | * @Description: 9 | */ 10 | @Data 11 | public class TestEmailDTO { 12 | 13 | /** 14 | * 发送的测试邮箱 15 | */ 16 | private String email; 17 | 18 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/ToJudgeDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import lombok.Data; 4 | import lombok.experimental.Accessors; 5 | 6 | import javax.validation.constraints.NotBlank; 7 | 8 | /** 9 | * @Author: chenfan 10 | * @Date: 2021/10/30 11:03 11 | * @Description: 用户代码提交类 12 | */ 13 | @Data 14 | @Accessors(chain = true) 15 | public class ToJudgeDTO { 16 | 17 | @NotBlank(message = "题目id不能为空") 18 | private String pid; 19 | 20 | @NotBlank(message = "代码语言选择不能为空") 21 | private String language; 22 | 23 | @NotBlank(message = "提交的代码不能为空") 24 | private String code; 25 | 26 | @NotBlank(message = "提交的比赛id所属不能为空,若并非比赛提交,请设置为0") 27 | private Long cid; 28 | 29 | private Long tid; 30 | 31 | private Boolean isRemote; 32 | 33 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/TrainingDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import com.simplefanc.voj.common.pojo.entity.training.Training; 4 | import com.simplefanc.voj.common.pojo.entity.training.TrainingCategory; 5 | import lombok.Data; 6 | import lombok.experimental.Accessors; 7 | 8 | /** 9 | * @Author: chenfan 10 | * @Date: 2021/11/22 21:49 11 | * @Description: 后台管理训练的传输类 12 | */ 13 | @Data 14 | @Accessors(chain = true) 15 | public class TrainingDTO { 16 | 17 | private Training training; 18 | 19 | private TrainingCategory trainingCategory; 20 | 21 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/TrainingProblemDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import lombok.Data; 4 | 5 | import javax.validation.constraints.NotBlank; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2022/3/9 11:10 10 | * @Description: 11 | */ 12 | @Data 13 | public class TrainingProblemDTO { 14 | 15 | @NotBlank(message = "题目id不能为空") 16 | private Long pid; 17 | 18 | @NotBlank(message = "训练id不能为空") 19 | private Long tid; 20 | 21 | @NotBlank(message = "题目在比赛中的展示id不能为空") 22 | private String displayId; 23 | 24 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/dto/UserReadContestAnnouncementDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.dto; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2021/7/17 15:31 10 | * @Description: 11 | */ 12 | 13 | @Data 14 | public class UserReadContestAnnouncementDTO { 15 | 16 | private Long cid; 17 | 18 | private List readAnnouncementList; 19 | 20 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/AccessVO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.vo; 2 | 3 | import io.swagger.annotations.ApiModelProperty; 4 | import lombok.Data; 5 | 6 | /** 7 | * @Author: chenfan 8 | * @Date: 2022/3/10 17:51 9 | * @Description: 10 | */ 11 | @Data 12 | public class AccessVO { 13 | 14 | @ApiModelProperty(value = "是否有进入比赛或训练的权限") 15 | private Boolean access; 16 | 17 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/AdminSysNoticeVO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.vo; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import java.util.Date; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/10/4 14:03 12 | * @Description: 13 | */ 14 | @Data 15 | @ApiModel(value = "系统通知消息", description = "") 16 | public class AdminSysNoticeVO { 17 | 18 | private Long id; 19 | 20 | @ApiModelProperty(value = "通知标题") 21 | private String title; 22 | 23 | @ApiModelProperty(value = "通知内容") 24 | private String content; 25 | 26 | @ApiModelProperty(value = "发给哪些用户类型,例如全部用户All,指定单个用户Single,管理员Admin") 27 | private String type; 28 | 29 | @ApiModelProperty(value = "是否已被拉取过,如果已经拉取过,就无需再次拉取") 30 | private Boolean state; 31 | 32 | @ApiModelProperty(value = "发布通知的管理员用户名") 33 | private String adminUsername; 34 | 35 | private Date gmtCreate; 36 | 37 | private Date gmtModified; 38 | 39 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/CaptchaVO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.vo; 2 | 3 | import io.swagger.annotations.ApiModelProperty; 4 | import lombok.Data; 5 | 6 | /** 7 | * @Author: chenfan 8 | * @Date: 2022/3/11 16:37 9 | * @Description: 10 | */ 11 | @Data 12 | public class CaptchaVO { 13 | 14 | @ApiModelProperty(value = "验证码图片的base64") 15 | private String img; 16 | 17 | @ApiModelProperty(value = "验证码key") 18 | private String captchaKey; 19 | 20 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/ChangeAccountVO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.vo; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @Author: chenfan 7 | * @Date: 2022/3/11 17:58 8 | * @Description: 9 | */ 10 | @Data 11 | public class ChangeAccountVO { 12 | 13 | private Integer code; 14 | 15 | private String msg; 16 | 17 | private UserInfoVO userInfo; 18 | 19 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/CheckUsernameOrEmailVO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.vo; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @Author: chenfan 7 | * @Date: 2022/3/11 18:15 8 | * @Description: 9 | */ 10 | @Data 11 | public class CheckUsernameOrEmailVO { 12 | 13 | private Boolean email; 14 | 15 | private Boolean username; 16 | 17 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/CommentListVO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.vo; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | import lombok.Data; 5 | 6 | import java.util.HashMap; 7 | 8 | /** 9 | * @Author: chenfan 10 | * @Date: 2022/3/11 16:12 11 | * @Description: 12 | */ 13 | @Data 14 | public class CommentListVO { 15 | 16 | private IPage commentList; 17 | 18 | private HashMap commentLikeMap; 19 | 20 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/ContestOutsideInfo.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.vo; 2 | 3 | import com.simplefanc.voj.common.pojo.entity.contest.ContestProblem; 4 | import io.swagger.annotations.ApiModel; 5 | import io.swagger.annotations.ApiModelProperty; 6 | import lombok.Data; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * @Author: chenfan 12 | * @Date: 2021/12/8 12:32 13 | * @Description: 14 | */ 15 | @ApiModel(value = "赛外排行榜所需的比赛信息,同时包括题目题号、气球颜色", description = "") 16 | @Data 17 | public class ContestOutsideInfo { 18 | 19 | @ApiModelProperty(value = "比赛信息") 20 | private ContestVO contest; 21 | 22 | @ApiModelProperty(value = "比赛题目信息列表") 23 | private List problemList; 24 | 25 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/ContestRegisterCountVO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.vo; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2022/2/7 20:28 12 | * @Description: 13 | */ 14 | @Data 15 | @ApiModel(value = "比赛报名统计", description = "") 16 | public class ContestRegisterCountVO implements Serializable { 17 | 18 | @ApiModelProperty(value = "比赛id") 19 | private Long cid; 20 | 21 | @ApiModelProperty(value = "比赛报名人数") 22 | private Integer count; 23 | 24 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/ExcelIpVO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.vo; 2 | 3 | import com.alibaba.excel.annotation.ExcelProperty; 4 | import com.alibaba.excel.annotation.write.style.ColumnWidth; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.experimental.Accessors; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/12/10 16:33 12 | * @Description: 13 | */ 14 | @Data 15 | @Accessors(chain = true) 16 | @ColumnWidth(25) 17 | @AllArgsConstructor 18 | public class ExcelIpVO { 19 | 20 | @ExcelProperty(value = "用户名", index = 0) 21 | private String username; 22 | 23 | @ExcelProperty(value = "IP", index = 1) 24 | private String ip; 25 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/ExcelUserVO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.vo; 2 | 3 | import com.alibaba.excel.annotation.ExcelProperty; 4 | import com.alibaba.excel.annotation.write.style.ColumnWidth; 5 | import lombok.Data; 6 | import lombok.experimental.Accessors; 7 | 8 | /** 9 | * @Author: chenfan 10 | * @Date: 2021/12/10 16:33 11 | * @Description: 12 | */ 13 | @Data 14 | @Accessors(chain = true) 15 | @ColumnWidth(25) 16 | public class ExcelUserVO { 17 | 18 | @ExcelProperty(value = "用户名", index = 0) 19 | private String username; 20 | 21 | @ExcelProperty(value = "密码", index = 1) 22 | private String password; 23 | 24 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/ProblemInfoVO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.vo; 2 | 3 | import com.simplefanc.voj.common.pojo.entity.problem.Problem; 4 | import com.simplefanc.voj.common.pojo.entity.problem.Tag; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | 8 | import java.util.HashMap; 9 | import java.util.List; 10 | 11 | /** 12 | * @Author: chenfan 13 | * @Date: 2021/12/30 21:37 14 | * @Description: 15 | */ 16 | @Data 17 | @AllArgsConstructor 18 | public class ProblemInfoVO { 19 | 20 | private Problem problem; 21 | 22 | private List tags; 23 | 24 | private List languages; 25 | 26 | private ProblemCountVO problemCount; 27 | 28 | private HashMap codeTemplate; 29 | 30 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/ProblemTagVO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.vo; 2 | 3 | import com.simplefanc.voj.common.pojo.entity.problem.Tag; 4 | import com.simplefanc.voj.common.pojo.entity.problem.TagClassification; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | import java.util.List; 9 | 10 | /** 11 | * @Author chenfan 12 | * @Date 2022/8/3 13 | */ 14 | @Data 15 | public class ProblemTagVO implements Serializable { 16 | /** 17 | * 标签分类 18 | */ 19 | private TagClassification classification; 20 | 21 | /** 22 | * 标签列表 23 | */ 24 | private List tagList; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/RandomProblemVO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.vo; 2 | 3 | import io.swagger.annotations.ApiModelProperty; 4 | import lombok.Data; 5 | 6 | /** 7 | * @Author: chenfan 8 | * @Date: 2022/3/11 10:55 9 | * @Description: 10 | */ 11 | @Data 12 | public class RandomProblemVO { 13 | 14 | @ApiModelProperty(value = "题目id") 15 | private String problemId; 16 | 17 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/RegisterCodeVO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.vo; 2 | 3 | import io.swagger.annotations.ApiModelProperty; 4 | import lombok.Data; 5 | 6 | /** 7 | * @Author: chenfan 8 | * @Date: 2022/3/11 17:08 9 | * @Description: 10 | */ 11 | @Data 12 | public class RegisterCodeVO { 13 | 14 | @ApiModelProperty(value = "邮箱") 15 | private String email; 16 | 17 | @ApiModelProperty(value = "注册邮件有效时间,单位秒") 18 | private Integer expire; 19 | 20 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/SubmissionInfoVO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.vo; 2 | 3 | import com.simplefanc.voj.common.pojo.entity.judge.Judge; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | import lombok.experimental.Accessors; 7 | 8 | /** 9 | * @Author: chenfan 10 | * @Date: 2022/3/11 11:38 11 | * @Description: 12 | */ 13 | @Data 14 | @Accessors(chain = true) 15 | public class SubmissionInfoVO { 16 | 17 | @ApiModelProperty(value = "提交详情") 18 | private Judge submission; 19 | 20 | @ApiModelProperty(value = "提交者是否可以分享该代码") 21 | private Boolean codeShare; 22 | 23 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/SysMsgVO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.vo; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | import java.util.Date; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/10/3 16:36 12 | * @Description: 13 | */ 14 | @ApiModel(value = "用户的系统消息", description = "") 15 | @Data 16 | public class SysMsgVO { 17 | 18 | private Long id; 19 | 20 | @ApiModelProperty(value = "通知标题") 21 | private String title; 22 | 23 | @ApiModelProperty(value = "通知内容") 24 | private String content; 25 | 26 | @ApiModelProperty(value = "发布通知的管理员id") 27 | private String adminId; 28 | 29 | @ApiModelProperty(value = "消息类型,系统通知Sys、我的信息Mine") 30 | private String type; 31 | 32 | @ApiModelProperty(value = "是否已读") 33 | private Boolean state; 34 | 35 | private Date gmtCreate; 36 | 37 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/pojo/vo/UserUnreadMsgCountVO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.pojo.vo; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/10/1 20:59 12 | * @Description: 13 | */ 14 | @ApiModel(value = "用户未读消息统计", description = "") 15 | @Data 16 | @AllArgsConstructor 17 | @NoArgsConstructor 18 | public class UserUnreadMsgCountVO { 19 | 20 | @ApiModelProperty(value = "未读评论") 21 | private Integer comment; 22 | 23 | @ApiModelProperty(value = "未读回复") 24 | private Integer reply; 25 | 26 | @ApiModelProperty(value = "未读点赞") 27 | private Integer like; 28 | 29 | @ApiModelProperty(value = "未读系统通知") 30 | private Integer sys; 31 | 32 | @ApiModelProperty(value = "未读我的消息") 33 | private Integer mine; 34 | 35 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/announcement/AdminAnnouncementService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.admin.announcement; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | import com.simplefanc.voj.backend.pojo.vo.AnnouncementVO; 5 | import com.simplefanc.voj.common.pojo.entity.common.Announcement; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2022/3/9 21:40 10 | * @Description: 11 | */ 12 | public interface AdminAnnouncementService { 13 | 14 | IPage getAnnouncementList(Integer limit, Integer currentPage); 15 | 16 | void deleteAnnouncement(long aid); 17 | 18 | void addAnnouncement(Announcement announcement); 19 | 20 | void updateAnnouncement(Announcement announcement); 21 | 22 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/contest/AdminContestAnnouncementService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.admin.contest; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | import com.simplefanc.voj.backend.pojo.dto.AnnouncementDTO; 5 | import com.simplefanc.voj.backend.pojo.vo.AnnouncementVO; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2022/3/9 11:19 10 | * @Description: 11 | */ 12 | 13 | public interface AdminContestAnnouncementService { 14 | 15 | IPage getAnnouncementList(Integer limit, Integer currentPage, Long cid); 16 | 17 | void deleteAnnouncement(Long aid); 18 | 19 | void addAnnouncement(AnnouncementDTO announcementDTO); 20 | 21 | void updateAnnouncement(AnnouncementDTO announcementDTO); 22 | 23 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/contest/AdminContestService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.admin.contest; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | import com.simplefanc.voj.backend.pojo.vo.AdminContestVO; 5 | import com.simplefanc.voj.common.pojo.entity.contest.Contest; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2022/3/9 11:20 10 | * @Description: 11 | */ 12 | 13 | public interface AdminContestService { 14 | 15 | IPage getContestList(Integer limit, Integer currentPage, String keyword); 16 | 17 | AdminContestVO getContest(Long cid); 18 | 19 | void deleteContest(Long cid); 20 | 21 | void addContest(AdminContestVO adminContestVO); 22 | 23 | void updateContest(AdminContestVO adminContestVO); 24 | 25 | void changeContestVisible(Long cid, String uid, Boolean visible); 26 | 27 | void cloneContest(Long cid); 28 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/discussion/AdminDiscussionService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.admin.discussion; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | import com.simplefanc.voj.common.pojo.entity.discussion.Discussion; 5 | import com.simplefanc.voj.common.pojo.entity.discussion.DiscussionReport; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2022/3/9 16:02 12 | * @Description: 13 | */ 14 | 15 | public interface AdminDiscussionService { 16 | 17 | void updateDiscussion(Discussion discussion); 18 | 19 | void removeDiscussion(List didList); 20 | 21 | IPage getDiscussionReport(Integer limit, Integer currentPage); 22 | 23 | void updateDiscussionReport(DiscussionReport discussionReport); 24 | 25 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/rejudge/RejudgeService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.admin.rejudge; 2 | 3 | import com.simplefanc.voj.common.pojo.entity.judge.Judge; 4 | 5 | /** 6 | * @Author: chenfan 7 | * @Date: 2022/3/9 16:21 8 | * @Description: 9 | */ 10 | 11 | public interface RejudgeService { 12 | 13 | Judge rejudge(Long submitId); 14 | 15 | void rejudgeContestProblem(Long cid, Long pid); 16 | 17 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/system/DashboardService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.admin.system; 2 | 3 | import com.simplefanc.voj.common.pojo.entity.user.Session; 4 | 5 | import java.util.Map; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2022/3/9 21:44 10 | * @Description: 11 | */ 12 | public interface DashboardService { 13 | 14 | Session getRecentSession(); 15 | 16 | Map getDashboardInfo(); 17 | 18 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/tag/AdminTagService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.admin.tag; 2 | 3 | import com.simplefanc.voj.common.pojo.entity.problem.Tag; 4 | import com.simplefanc.voj.common.pojo.entity.problem.TagClassification; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * @Author: chenfan 10 | * @Date: 2022/3/9 17:47 11 | * @Description: 12 | */ 13 | 14 | public interface AdminTagService { 15 | 16 | Tag addTag(Tag tag); 17 | 18 | void updateTag(Tag tag); 19 | 20 | void deleteTag(Long tid); 21 | 22 | List getTagClassification(String oj); 23 | 24 | TagClassification addTagClassification(TagClassification tagClassification); 25 | 26 | void updateTagClassification(TagClassification tagClassification); 27 | 28 | void deleteTagClassification(Long tcid); 29 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/training/AdminTrainingCategoryService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.admin.training; 2 | 3 | import com.simplefanc.voj.common.pojo.entity.training.TrainingCategory; 4 | 5 | /** 6 | * @Author: chenfan 7 | * @Date: 2022/3/9 19:29 8 | * @Description: 9 | */ 10 | public interface AdminTrainingCategoryService { 11 | 12 | TrainingCategory addTrainingCategory(TrainingCategory trainingCategory); 13 | 14 | void updateTrainingCategory(TrainingCategory trainingCategory); 15 | 16 | void deleteTrainingCategory(Long cid); 17 | 18 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/training/AdminTrainingProblemService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.admin.training; 2 | 3 | import com.simplefanc.voj.backend.pojo.dto.TrainingProblemDTO; 4 | import com.simplefanc.voj.common.pojo.entity.training.TrainingProblem; 5 | 6 | import java.util.HashMap; 7 | 8 | /** 9 | * @Author: chenfan 10 | * @Date: 2022/3/9 20:20 11 | * @Description: 12 | */ 13 | 14 | public interface AdminTrainingProblemService { 15 | 16 | HashMap getProblemList(Integer limit, Integer currentPage, String keyword, Boolean queryExisted, 17 | Long tid); 18 | 19 | void updateProblem(TrainingProblem trainingProblem); 20 | 21 | void deleteProblem(Long pid, Long tid); 22 | 23 | void addProblemFromPublic(TrainingProblemDTO trainingProblemDTO); 24 | 25 | void importTrainingRemoteOjProblem(String name, String problemId, Long tid); 26 | 27 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/training/AdminTrainingService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.admin.training; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | import com.simplefanc.voj.backend.pojo.dto.TrainingDTO; 5 | import com.simplefanc.voj.common.pojo.entity.training.Training; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2022/3/9 19:46 10 | * @Description: 11 | */ 12 | public interface AdminTrainingService { 13 | 14 | IPage getTrainingList(Integer limit, Integer currentPage, String keyword); 15 | 16 | TrainingDTO getTraining(Long tid); 17 | 18 | void deleteTraining(Long tid); 19 | 20 | void addTraining(TrainingDTO trainingDTO); 21 | 22 | void updateTraining(TrainingDTO trainingDTO); 23 | 24 | void changeTrainingStatus(Long tid, String author, Boolean status); 25 | 26 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/user/AdminUserService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.admin.user; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | import com.simplefanc.voj.backend.pojo.dto.AdminEditUserDTO; 5 | import com.simplefanc.voj.backend.pojo.vo.UserRolesVO; 6 | 7 | import java.util.List; 8 | import java.util.Map; 9 | 10 | /** 11 | * @Author: chenfan 12 | * @Date: 2022/3/9 21:05 13 | * @Description: 14 | */ 15 | public interface AdminUserService { 16 | 17 | IPage getUserList(Integer limit, Integer currentPage, String keyword, Long role, Integer status); 18 | 19 | void editUser(AdminEditUserDTO adminEditUserDTO); 20 | 21 | void deleteUser(List deleteUserIdList); 22 | 23 | void forbidUser(List deleteUserIdList); 24 | 25 | void insertBatchUser(List> users); 26 | 27 | Map generateUser(Map params); 28 | 29 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/admin/user/UserRecordService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.admin.user; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 5 | import com.simplefanc.voj.backend.pojo.vo.ACMRankVO; 6 | import com.simplefanc.voj.backend.pojo.vo.OIRankVO; 7 | import com.simplefanc.voj.backend.pojo.vo.UserHomeVO; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | *

13 | * 服务类 14 | *

15 | * 16 | * @Author: chenfan 17 | * @since 2021-10-23 18 | */ 19 | public interface UserRecordService { 20 | 21 | List getRecent7ACRank(); 22 | 23 | UserHomeVO getUserHomeInfo(String uid, String username); 24 | 25 | IPage getOIRankList(Page page, List uidList); 26 | 27 | IPage getACMRankList(Page page, List uidList); 28 | 29 | } 30 | -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/ContestFileService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.file; 2 | 3 | import javax.servlet.http.HttpServletResponse; 4 | import java.io.IOException; 5 | 6 | /** 7 | * @Author: chenfan 8 | * @Date: 2022/3/10 14:27 9 | * @Description: 10 | */ 11 | public interface ContestFileService { 12 | 13 | void downloadContestRank(Long cid, Boolean forceRefresh, Boolean removeStar, HttpServletResponse response) 14 | throws IOException; 15 | 16 | void downloadContestAcSubmission(Long cid, Boolean excludeAdmin, Boolean allStatus, String splitType, HttpServletResponse response); 17 | 18 | void downloadContestPrintText(Long id, HttpServletResponse response); 19 | 20 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/ImageService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.file; 2 | 3 | import org.springframework.web.multipart.MultipartFile; 4 | 5 | import java.util.Map; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2022/3/10 14:31 10 | * @Description: 11 | */ 12 | public interface ImageService { 13 | 14 | Map uploadAvatar(MultipartFile image); 15 | 16 | Map uploadCarouselImg(MultipartFile image); 17 | 18 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/ImportDSOJProblemService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.file; 2 | 3 | /** 4 | * @Author: chenfan 5 | * @Date: 2022/3/10 14:47 6 | * @Description: 7 | */ 8 | public interface ImportDSOJProblemService { 9 | 10 | void importDSOJProblem(); 11 | 12 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/ImportFpsProblemService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.file; 2 | 3 | import org.springframework.web.multipart.MultipartFile; 4 | 5 | import java.io.IOException; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2022/3/10 14:44 10 | * @Description: 11 | */ 12 | public interface ImportFpsProblemService { 13 | 14 | /** 15 | * @param file 16 | * @MethodName importFpsProblem 17 | * @Description zip文件导入题目 仅超级管理员可操作 18 | * @Return 19 | * @Since 2021/10/06 20 | */ 21 | void importFPSProblem(MultipartFile file) throws IOException; 22 | 23 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/ImportLOJProblemService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.file; 2 | 3 | /** 4 | * @Author: chenfan 5 | * @Date: 2022/11/07 14:44 6 | * @Description: 7 | */ 8 | public interface ImportLOJProblemService { 9 | 10 | boolean importLOJProblem(Integer problemId); 11 | 12 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/ImportQDUOJProblemService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.file; 2 | 3 | import org.springframework.web.multipart.MultipartFile; 4 | 5 | /** 6 | * @Author: chenfan 7 | * @Date: 2022/3/10 14:47 8 | * @Description: 9 | */ 10 | public interface ImportQDUOJProblemService { 11 | 12 | /** 13 | * @param file 14 | * @MethodName importQDOJProblem 15 | * @Description zip文件导入题目 仅超级管理员可操作 16 | * @Return 17 | * @Since 2021/5/27 18 | */ 19 | void importQDOJProblem(MultipartFile file); 20 | 21 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/MarkDownFileService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.file; 2 | 3 | import org.springframework.web.multipart.MultipartFile; 4 | 5 | import java.util.Map; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2022/3/10 14:50 10 | * @Description: 11 | */ 12 | 13 | public interface MarkDownFileService { 14 | 15 | Map uploadMDImg(MultipartFile image); 16 | 17 | void deleteMDImg(Long fileId); 18 | 19 | Map uploadMd(MultipartFile file); 20 | 21 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/ProblemFileService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.file; 2 | 3 | import org.springframework.web.multipart.MultipartFile; 4 | 5 | import javax.servlet.http.HttpServletResponse; 6 | import java.util.List; 7 | 8 | /** 9 | * @Author: chenfan 10 | * @Date: 2022/3/10 14:40 11 | * @Description: 12 | */ 13 | public interface ProblemFileService { 14 | 15 | /** 16 | * @param file 17 | * @MethodName importProblem 18 | * @Description zip文件导入题目 仅超级管理员可操作 19 | * @Return 20 | * @Since 2021/5/27 21 | */ 22 | void importProblem(MultipartFile file); 23 | 24 | /** 25 | * @param pidList 26 | * @param response 27 | * @MethodName exportProblem 28 | * @Description 导出指定的题目包括测试数据生成zip 仅超级管理员可操作 29 | * @Return 30 | * @Since 2021/5/28 31 | */ 32 | void exportProblem(List pidList, HttpServletResponse response); 33 | 34 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/TestCaseService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.file; 2 | 3 | import org.springframework.web.multipart.MultipartFile; 4 | 5 | import javax.servlet.http.HttpServletResponse; 6 | import java.util.Map; 7 | 8 | /** 9 | * @Author: chenfan 10 | * @Date: 2022/3/10 14:57 11 | * @Description: 12 | */ 13 | public interface TestCaseService { 14 | 15 | Map uploadTestcaseZip(MultipartFile file); 16 | 17 | void downloadTestcase(Long pid, HttpServletResponse response); 18 | 19 | void downloadSingleTestCase(Long caseId, String inputData, String outputData, HttpServletResponse response); 20 | 21 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/file/UserFileService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.file; 2 | 3 | import javax.servlet.http.HttpServletResponse; 4 | import java.io.IOException; 5 | 6 | /** 7 | * @Author: chenfan 8 | * @Date: 2022/3/10 15:02 9 | * @Description: 10 | */ 11 | public interface UserFileService { 12 | 13 | void generateUserExcel(String key, HttpServletResponse response) throws IOException; 14 | 15 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/msg/AdminNoticeService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.msg; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | import com.simplefanc.voj.backend.pojo.vo.AdminSysNoticeVO; 5 | import com.simplefanc.voj.common.pojo.entity.msg.AdminSysNotice; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2022/3/9 21:19 12 | * @Description: 13 | */ 14 | public interface AdminNoticeService { 15 | 16 | IPage getSysNotice(Integer limit, Integer currentPage, String type); 17 | 18 | void addSysNotice(AdminSysNotice adminSysNotice); 19 | 20 | void deleteSysNotice(Long id); 21 | 22 | void updateSysNotice(AdminSysNotice adminSysNotice); 23 | 24 | void syncNoticeToNewRegisterBatchUser(List uidList); 25 | 26 | void addSingleNoticeToUser(String adminId, String recipientId, String title, String content, String type); 27 | 28 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/msg/NoticeService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.msg; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | import com.simplefanc.voj.backend.pojo.vo.SysMsgVO; 5 | 6 | /** 7 | * @Author: chenfan 8 | * @Date: 2022/3/10 11:37 9 | * @Description: 10 | */ 11 | 12 | public interface NoticeService { 13 | 14 | IPage getSysNotice(Integer limit, Integer currentPage); 15 | 16 | IPage getMineNotice(Integer limit, Integer currentPage); 17 | 18 | void updateSysOrMineMsgRead(IPage userMsgList); 19 | 20 | void syncNoticeToNewRegisterUser(String uid); 21 | 22 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/msg/UserMessageService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.msg; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | import com.simplefanc.voj.backend.pojo.vo.UserMsgVO; 5 | import com.simplefanc.voj.backend.pojo.vo.UserUnreadMsgCountVO; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2022/3/10 10:36 10 | * @Description: 11 | */ 12 | 13 | public interface UserMessageService { 14 | 15 | UserUnreadMsgCountVO getUnreadMsgCount(); 16 | 17 | void cleanMsg(String type, Long id); 18 | 19 | IPage getCommentMsg(Integer limit, Integer currentPage); 20 | 21 | IPage getReplyMsg(Integer limit, Integer currentPage); 22 | 23 | IPage getLikeMsg(Integer limit, Integer currentPage); 24 | 25 | void updateUserMsgRead(IPage userMsgList); 26 | 27 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/ContestAdminService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.oj; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | import com.simplefanc.voj.backend.pojo.dto.CheckAcDTO; 5 | import com.simplefanc.voj.common.pojo.entity.contest.ContestPrint; 6 | import com.simplefanc.voj.common.pojo.entity.contest.ContestRecord; 7 | 8 | /** 9 | * @Author: chenfan 10 | * @Date: 2022/3/11 19:40 11 | * @Description: 12 | */ 13 | 14 | public interface ContestAdminService { 15 | 16 | IPage getContestACInfo(Long cid, Integer currentPage, Integer limit); 17 | 18 | void checkContestAcInfo(CheckAcDTO checkAcDTO); 19 | 20 | IPage getContestPrint(Long cid, Integer currentPage, Integer limit); 21 | 22 | void checkContestPrintStatus(Long id, Long cid); 23 | 24 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/ContestScoreboardService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.oj; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | import com.simplefanc.voj.backend.pojo.dto.ContestRankDTO; 5 | import com.simplefanc.voj.backend.pojo.vo.ContestOutsideInfo; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2022/3/11 20:02 12 | * @Description: 13 | */ 14 | 15 | public interface ContestScoreboardService { 16 | 17 | ContestOutsideInfo getContestOutsideInfo(Long cid); 18 | 19 | IPage getContestOutsideScoreboard(ContestRankDTO contestRankDTO); 20 | 21 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/service/oj/RankService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.service.oj; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | 5 | /** 6 | * @Author: chenfan 7 | * @Date: 2022/3/10 20:47 8 | * @Description: 9 | */ 10 | 11 | public interface RankService { 12 | 13 | /** 14 | * @MethodName get-rank-list 15 | * @Params * @param null 16 | * @Description 获取排行榜数据 17 | * @Return CommonResult 18 | * @Since 2021/10/27 19 | */ 20 | IPage getRankList(Integer limit, Integer currentPage, String searchUser, Integer type); 21 | 22 | } -------------------------------------------------------------------------------- /voj-backend/src/main/java/com/simplefanc/voj/backend/shiro/JwtToken.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.backend.shiro; 2 | 3 | import org.apache.shiro.authc.AuthenticationToken; 4 | 5 | /** 6 | * @Author: chenfan 7 | * @Date: 2021/7/19 22:58 8 | * @Description: 9 | */ 10 | public class JwtToken implements AuthenticationToken { 11 | 12 | private String token; 13 | 14 | public JwtToken(String token) { 15 | this.token = token; 16 | } 17 | 18 | @Override 19 | public Object getPrincipal() { 20 | return token; 21 | } 22 | 23 | @Override 24 | public Object getCredentials() { 25 | return token; 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /voj-backend/src/main/resources/banner.txt: -------------------------------------------------------------------------------- 1 | ${AnsiColor.BRIGHT_YELLOW} 2 | 3 | ___ ___ ________ ___ 4 | |\ \ / /|\ __ \ |\ \ 5 | \ \ \ / / | \ \|\ \ \ \ \ 6 | \ \ \/ / / \ \ \\\ \ __ \ \ \ 7 | \ \ / / \ \ \\\ \|\ \\_\ \ 8 | \ \__/ / \ \_______\ \________\ 9 | \|__|/ \|_______|\|________| 10 | Virtual Online Judge(VOJ) - Backend 11 | @Author chenfan 12 | @Latest Update ${voj-backend.version} -------------------------------------------------------------------------------- /voj-backend/src/main/resources/email-rule.yml: -------------------------------------------------------------------------------- 1 | # 邮箱地址黑名单 2 | voj: 3 | blacklist: 4 | - "@ccmail.uk" 5 | - "@exdonuts.com" 6 | - "@hamham.uk" 7 | - "@digdig.org" 8 | - "@owleyes.ch" 9 | - "@stayhome.li" 10 | - "@fanclub.pm" 11 | - "@hotsoup.be" 12 | - "@simaenaga.com" 13 | - "@tapi.re" 14 | - "@fuwari.be" 15 | - "@magim.be" 16 | - "@mirai.re" 17 | - "@moimoi.re" 18 | - "@heisei.be" 19 | - "@honeys.be" 20 | - "@mbox.re" 21 | - "@uma3.be" 22 | - "@fuwa.li" 23 | - "@kpost.be" 24 | - "@risu.be" 25 | - "@fuwa.be" 26 | - "@usako.net" 27 | - "@eay.jp" 28 | - "@via.tokyo.jp" 29 | - "@ichigo.me" 30 | - "@choco.la" 31 | - "@cream.pink" 32 | - "@merry.pink" 33 | - "@neko2.net" 34 | - "@fuwamofu.com" 35 | - "@ruru.be" 36 | - "@macr2.com" 37 | - "@f5.si" 38 | - "@ahk.jp" 39 | - "@svk.jp" -------------------------------------------------------------------------------- /voj-backend/src/test/java/com/simplefanc/AppTest.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc; 2 | 3 | import org.junit.jupiter.api.Test; 4 | 5 | import static org.junit.jupiter.api.Assertions.assertTrue; 6 | 7 | /** 8 | * Unit test for simple App. 9 | */ 10 | public class AppTest { 11 | 12 | /** 13 | * Rigorous Test :-) 14 | */ 15 | @Test 16 | public void shouldAnswerWithTrue() { 17 | assertTrue(true); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /voj-common/src/main/java/com/simplefanc/voj/common/constants/Constant.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.common.constants; 2 | 3 | /** 4 | * @author chenfan 5 | * @date 2022/5/7 21:28 6 | **/ 7 | public interface Constant { 8 | String LOCAL = "LOCAL"; 9 | } 10 | -------------------------------------------------------------------------------- /voj-common/src/main/java/com/simplefanc/voj/common/constants/ContestConstant.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.common.constants; 2 | 3 | /** 4 | * @author chenfan 5 | * @date 2022/4/18 18:11 6 | **/ 7 | public interface ContestConstant { 8 | 9 | String OI_RANK_RECENT_SCORE = "Recent"; 10 | 11 | String OI_RANK_HIGHEST_SCORE = "Highest"; 12 | } 13 | -------------------------------------------------------------------------------- /voj-common/src/main/java/com/simplefanc/voj/common/constants/ContestEnum.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.common.constants; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * @Description 比赛相关的常量 8 | * @Since 2021/1/7 9 | */ 10 | @Getter 11 | @AllArgsConstructor 12 | public enum ContestEnum { 13 | TYPE_ACM(0, "ACM"), 14 | TYPE_OI(1, "OI"), 15 | 16 | STATUS_SCHEDULED(-1, "Scheduled"), 17 | STATUS_RUNNING(0, "Running"), 18 | STATUS_ENDED(1, "Ended"), 19 | 20 | AUTH_PUBLIC(0, "Public"), 21 | AUTH_PRIVATE(1, "Private"), 22 | AUTH_PROTECT(2, "Protect"), 23 | 24 | RECORD_NOT_AC_PENALTY(-1, "未AC通过算罚时"), 25 | RECORD_NOT_AC_NOT_PENALTY(0, "未AC通过不罚时"), 26 | RECORD_AC(1, "AC通过"); 27 | 28 | private final Integer code; 29 | 30 | private final String name; 31 | } 32 | -------------------------------------------------------------------------------- /voj-common/src/main/java/com/simplefanc/voj/common/constants/JudgeCaseMode.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.common.constants; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * @author chenfan 8 | * @date 2022/9/21 9 | **/ 10 | @Getter 11 | @AllArgsConstructor 12 | public enum JudgeCaseMode { 13 | 14 | DEFAULT("default"), 15 | 16 | ITERATE_UNTIL_WRONG("iterate_until_wrong"); 17 | 18 | private final String mode; 19 | } 20 | -------------------------------------------------------------------------------- /voj-common/src/main/java/com/simplefanc/voj/common/constants/JudgeMode.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.common.constants; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * @author chenfan 8 | * @date 2022/4/18 16:24 9 | **/ 10 | @Getter 11 | @AllArgsConstructor 12 | public enum JudgeMode { 13 | 14 | DEFAULT("default"), 15 | 16 | SPJ("spj"), 17 | 18 | INTERACTIVE("interactive"); 19 | 20 | private final String mode; 21 | 22 | public static JudgeMode getJudgeMode(String mode) { 23 | for (JudgeMode judgeMode : JudgeMode.values()) { 24 | if (judgeMode.getMode().equals(mode)) { 25 | return judgeMode; 26 | } 27 | } 28 | return null; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /voj-common/src/main/java/com/simplefanc/voj/common/constants/ProblemEnum.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.common.constants; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | @Getter 7 | @AllArgsConstructor 8 | public enum ProblemEnum { 9 | AUTH_PUBLIC(1, "Public"), 10 | AUTH_PRIVATE(2, "Private"), 11 | AUTH_CONTEST(3, "Contest"); 12 | 13 | private final Integer code; 14 | private final String name; 15 | } 16 | -------------------------------------------------------------------------------- /voj-common/src/main/java/com/simplefanc/voj/common/constants/ProblemLevelEnum.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.common.constants; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | @Getter 7 | @AllArgsConstructor 8 | public enum ProblemLevelEnum { 9 | PROBLEM_LEVEL_EASY(0, "Easy"), 10 | PROBLEM_LEVEL_MID(1, "Mid"), 11 | PROBLEM_LEVEL_HARD(2, "Hard"); 12 | 13 | private final Integer code; 14 | private final String name; 15 | } 16 | -------------------------------------------------------------------------------- /voj-common/src/main/java/com/simplefanc/voj/common/pojo/dto/CompileDTO.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.common.pojo.dto; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.HashMap; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2021/2/6 14:42 10 | * @Description: 11 | */ 12 | @Data 13 | public class CompileDTO { 14 | 15 | /** 16 | * 编译的源代码 17 | */ 18 | private String code; 19 | 20 | /** 21 | * 编译的源代码相关的题目id 22 | */ 23 | private Long pid; 24 | 25 | /** 26 | * 编译的源代码所选语言 27 | */ 28 | private String language; 29 | 30 | /** 31 | * 调用判题机的凭证 32 | */ 33 | private String token; 34 | 35 | /** 36 | * 编译所需的额外文件,key:文件名,value:文件内容 37 | */ 38 | private HashMap extraFiles; 39 | 40 | } -------------------------------------------------------------------------------- /voj-common/src/main/java/com/simplefanc/voj/common/result/ResultStatus.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.common.result; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * @Author: chenfan 8 | * @Date: 2022/3/9 15:17 9 | * @Description: 10 | */ 11 | @Getter 12 | @AllArgsConstructor 13 | public enum ResultStatus { 14 | 15 | SUCCESS(200, "成功"), 16 | 17 | FAIL(400, "失败"), 18 | 19 | ACCESS_DENIED(401, "访问受限"), 20 | 21 | FORBIDDEN(403, "拒绝访问"), 22 | 23 | NOT_FOUND(404, "数据不存在"), 24 | 25 | SYSTEM_ERROR(500, "系统错误"); 26 | 27 | private int status; 28 | 29 | private String description; 30 | 31 | } -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/JudgeServerApplication.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.cloud.client.discovery.EnableDiscoveryClient; 6 | import org.springframework.scheduling.annotation.EnableAsync; 7 | import org.springframework.transaction.annotation.EnableTransactionManagement; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/10/29 22:12 12 | * @Description: 判题机服务系统启动类 13 | */ 14 | @EnableDiscoveryClient // 开启服务注册发现功能 15 | @SpringBootApplication 16 | @EnableAsync(proxyTargetClass = true) // 开启异步注解 17 | @EnableTransactionManagement 18 | public class JudgeServerApplication { 19 | 20 | public static void main(String[] args) { 21 | SpringApplication.run(JudgeServerApplication.class, args); 22 | } 23 | 24 | } -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/common/constants/Constants.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.common.constants; 2 | 3 | import java.util.Arrays; 4 | import java.util.List; 5 | 6 | /** 7 | * @Author: chenfan 8 | * @Date: 2021/1/1 13:00 9 | * @Description: 常量类 10 | */ 11 | public interface Constants { 12 | 13 | List DEFAULT_ENV = Arrays.asList( 14 | "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", 15 | "LANG=en_US.UTF-8", 16 | "LANGUAGE=en_US:en", 17 | "HOME=/w"); 18 | 19 | List PYTHON3_ENV = Arrays.asList( 20 | "LANG=en_US.UTF-8", 21 | "LANGUAGE=en_US:en", 22 | "PYTHONIOENCODING=utf-8"); 23 | 24 | List GOLANG_ENV = Arrays.asList( 25 | "GODEBUG=madvdontneed=1", 26 | "GOCACHE=off", 27 | "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", 28 | "LANG=en_US.UTF-8", 29 | "LANGUAGE=en_US:en"); 30 | 31 | } -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/common/constants/JudgeDir.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.common.constants; 2 | 3 | /** 4 | * @author chenfan 5 | * @date 2022/4/18 16:27 6 | **/ 7 | public interface JudgeDir { 8 | 9 | String RUN_WORKPLACE_DIR = "/judge/run"; 10 | 11 | String TEST_CASE_DIR = "/judge/testcase"; 12 | 13 | String SPJ_WORKPLACE_DIR = "/judge/spj"; 14 | 15 | String INTERACTIVE_WORKPLACE_DIR = "/judge/interactive"; 16 | 17 | String TMPFS_DIR = "/w"; 18 | 19 | } 20 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/common/constants/JudgeLanguage.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.common.constants; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | @Getter 7 | @AllArgsConstructor 8 | public enum JudgeLanguage { 9 | C("C"), 10 | CWithO2("C With O2"), 11 | CPP("C++"), 12 | CPPWithO2("C++ With O2"), 13 | JAVA("Java"), 14 | PYTHON2("Python2"), 15 | PYTHON3("Python3"), 16 | GOLANG("Golang"), 17 | CS("C#"); 18 | private final String language; 19 | } 20 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/common/constants/JudgeServerConstant.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.common.constants; 2 | 3 | import java.util.Arrays; 4 | import java.util.List; 5 | 6 | /** 7 | * @author chenfan 8 | * @date 2022/5/7 21:46 9 | **/ 10 | public interface JudgeServerConstant { 11 | List LANGUAGE_LIST = Arrays.asList("G++ 7.5.0", "GCC 7.5.0", "Python 3.7.5", "Python 2.7.17", "OpenJDK 1.8", "Golang 1.16", 12 | "C# Mono 4.6.2", "PHP 7.3.33", "JavaScript Node 14.19.0", "JavaScript V8 8.4.109", 13 | "PyPy 2.7.18 (7.3.8)", "PyPy 3.8.12 (7.3.8)"); 14 | } 15 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/common/exception/CompileException.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.common.exception; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @Author: chenfan 7 | * @Date: 2021/1/31 00:16 8 | * @Description: 9 | */ 10 | @Data 11 | public class CompileException extends Exception { 12 | 13 | private String stdout; 14 | 15 | private String stderr; 16 | 17 | public CompileException(String message, String stdout, String stderr) { 18 | super(message); 19 | this.stdout = stdout; 20 | this.stderr = stderr; 21 | } 22 | 23 | } -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/common/exception/RuntimeException.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.common.exception; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @Author: chenfan 7 | * @Date: 2021/1/31 00:16 8 | * @Description: 9 | */ 10 | @Data 11 | public class RuntimeException extends Exception { 12 | 13 | private String stdout; 14 | 15 | private String stderr; 16 | 17 | public RuntimeException(String message, String stdout, String stderr) { 18 | super(message); 19 | this.stdout = stdout; 20 | this.stderr = stderr; 21 | } 22 | 23 | } -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/common/exception/SubmitException.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.common.exception; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @Author: chenfan 7 | * @Date: 2021/4/16 13:52 8 | * @Description: 9 | */ 10 | @Data 11 | public class SubmitException extends Exception { 12 | 13 | private String stdout; 14 | 15 | private String stderr; 16 | 17 | public SubmitException(String message, String stdout, String stderr) { 18 | super(message); 19 | this.stdout = stdout; 20 | this.stderr = stderr; 21 | } 22 | 23 | } -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/common/exception/SystemException.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.common.exception; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @Author: chenfan 7 | * @Date: 2021/1/31 00:17 8 | * @Description: 9 | */ 10 | @Data 11 | public class SystemException extends Exception { 12 | 13 | private String stdout; 14 | 15 | private String stderr; 16 | 17 | public SystemException(String message, String stdout, String stderr) { 18 | super(message + " " + stderr); 19 | this.stdout = stdout; 20 | this.stderr = stderr; 21 | } 22 | 23 | } -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/config/MyMetaObjectConfig.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.config; 2 | 3 | import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; 4 | import org.apache.ibatis.reflection.MetaObject; 5 | import org.springframework.stereotype.Component; 6 | 7 | import java.util.Date; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/12/4 14:14 12 | * @Description: 处理mybatis-plus自动填充时间 13 | */ 14 | @Component 15 | public class MyMetaObjectConfig implements MetaObjectHandler { 16 | 17 | @Override 18 | public void insertFill(MetaObject metaObject) { 19 | this.setFieldValByName("gmtCreate", new Date(), metaObject); 20 | this.setFieldValByName("gmtModified", new Date(), metaObject); 21 | } 22 | 23 | @Override 24 | public void updateFill(MetaObject metaObject) { 25 | this.setFieldValByName("gmtModified", new Date(), metaObject); 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/config/MybatisPlusConfig.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.config; 2 | 3 | import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor; 4 | import org.mybatis.spring.annotation.MapperScan; 5 | import org.springframework.context.annotation.Bean; 6 | import org.springframework.context.annotation.Configuration; 7 | import org.springframework.transaction.annotation.EnableTransactionManagement; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/7/19 21:04 12 | * @Description: 13 | */ 14 | @Configuration 15 | @EnableTransactionManagement 16 | @MapperScan("com.simplefanc.voj.judger.mapper") 17 | public class MybatisPlusConfig { 18 | 19 | /** 20 | * 注册乐观锁插件 21 | * 22 | * @return 23 | */ 24 | @Bean 25 | public OptimisticLockerInterceptor optimisticLockerInterceptor() { 26 | return new OptimisticLockerInterceptor(); 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/dao/ContestEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.dao; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.contest.Contest; 5 | 6 | /** 7 | *

8 | * 服务类 9 | *

10 | * 11 | * @author chenfan 12 | * @since 2021-10-23 13 | */ 14 | public interface ContestEntityService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/dao/ContestRecordEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.dao; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.contest.ContestRecord; 5 | import com.simplefanc.voj.common.pojo.entity.judge.Judge; 6 | 7 | /** 8 | *

9 | * 服务类 10 | *

11 | * 12 | * @author chenfan 13 | * @since 2021-10-23 14 | */ 15 | public interface ContestRecordEntityService extends IService { 16 | 17 | void updateContestRecord(Judge judge); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/dao/JudgeCaseEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.dao; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.judge.JudgeCase; 5 | 6 | /** 7 | *

8 | * 服务类 9 | *

10 | * 11 | * @author chenfan 12 | * @since 2021-10-23 13 | */ 14 | public interface JudgeCaseEntityService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/dao/JudgeEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.dao; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.judge.Judge; 5 | 6 | /** 7 | *

8 | * 服务类 9 | *

10 | * 11 | * @author chenfan 12 | * @since 2021-10-23 13 | */ 14 | public interface JudgeEntityService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/dao/JudgeServerEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.dao; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.judge.JudgeServer; 5 | 6 | import java.util.HashMap; 7 | 8 | public interface JudgeServerEntityService extends IService { 9 | } 10 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/dao/ProblemCaseEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.dao; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.problem.ProblemCase; 5 | 6 | /** 7 | * @Author: chenfan 8 | * @Date: 2021/12/14 19:58 9 | * @Description: 10 | */ 11 | public interface ProblemCaseEntityService extends IService { 12 | 13 | } -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/dao/ProblemEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.dao; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.problem.Problem; 5 | 6 | /** 7 | *

8 | * 服务类 9 | *

10 | * 11 | * @author chenfan 12 | * @since 2021-10-23 13 | */ 14 | 15 | public interface ProblemEntityService extends IService { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/dao/RemoteJudgeAccountEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.dao; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.judge.RemoteJudgeAccount; 5 | 6 | public interface RemoteJudgeAccountEntityService extends IService { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/dao/UserAcproblemEntityService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.dao; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.simplefanc.voj.common.pojo.entity.user.UserAcproblem; 5 | 6 | /** 7 | *

8 | * 服务类 9 | *

10 | * 11 | * @author chenfan 12 | * @since 2021-10-23 13 | */ 14 | public interface UserAcproblemEntityService extends IService { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/dao/impl/ContestEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.dao.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.common.pojo.entity.contest.Contest; 5 | import com.simplefanc.voj.judger.dao.ContestEntityService; 6 | import com.simplefanc.voj.judger.mapper.ContestMapper; 7 | import org.springframework.stereotype.Service; 8 | 9 | ; 10 | 11 | /** 12 | *

13 | * 服务实现类 14 | *

15 | * 16 | * @author chenfan 17 | * @since 2021-10-23 18 | */ 19 | @Service 20 | public class ContestEntityServiceImpl extends ServiceImpl implements ContestEntityService { 21 | 22 | } 23 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/dao/impl/JudgeCaseEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.dao.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.common.pojo.entity.judge.JudgeCase; 5 | import com.simplefanc.voj.judger.dao.JudgeCaseEntityService; 6 | import com.simplefanc.voj.judger.mapper.JudgeCaseMapper; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | *

11 | * 服务实现类 12 | *

13 | * 14 | * @author chenfan 15 | * @since 2021-10-23 16 | */ 17 | @Service 18 | public class JudgeCaseEntityServiceImpl extends ServiceImpl 19 | implements JudgeCaseEntityService { 20 | 21 | } 22 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/dao/impl/JudgeEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.dao.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.common.pojo.entity.judge.Judge; 5 | import com.simplefanc.voj.judger.dao.JudgeEntityService; 6 | import com.simplefanc.voj.judger.mapper.JudgeMapper; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | *

11 | * 服务实现类 12 | *

13 | * 14 | * @author chenfan 15 | * @since 2021-10-23 16 | */ 17 | @Service 18 | public class JudgeEntityServiceImpl extends ServiceImpl implements JudgeEntityService { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/dao/impl/JudgeServerEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.dao.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.common.pojo.entity.judge.JudgeServer; 5 | import com.simplefanc.voj.judger.dao.JudgeServerEntityService; 6 | import com.simplefanc.voj.judger.mapper.JudgeServerMapper; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/4/15 11:27 12 | * @Description: 13 | */ 14 | @Service 15 | public class JudgeServerEntityServiceImpl extends ServiceImpl 16 | implements JudgeServerEntityService { 17 | } -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/dao/impl/ProblemCaseEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.dao.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.common.pojo.entity.problem.ProblemCase; 5 | import com.simplefanc.voj.judger.dao.ProblemCaseEntityService; 6 | import com.simplefanc.voj.judger.mapper.ProblemCaseMapper; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/12/14 19:59 12 | * @Description: 13 | */ 14 | @Service 15 | public class ProblemCaseEntityServiceImpl extends ServiceImpl 16 | implements ProblemCaseEntityService { 17 | 18 | } -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/dao/impl/ProblemEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.dao.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.common.pojo.entity.problem.Problem; 5 | import com.simplefanc.voj.judger.dao.ProblemEntityService; 6 | import com.simplefanc.voj.judger.mapper.ProblemMapper; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | *

11 | * 服务实现类 12 | *

13 | * 14 | * @author chenfan 15 | * @since 2021-10-23 16 | */ 17 | @Service 18 | public class ProblemEntityServiceImpl extends ServiceImpl implements ProblemEntityService { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/dao/impl/RemoteJudgeAccountEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.dao.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.common.pojo.entity.judge.RemoteJudgeAccount; 5 | import com.simplefanc.voj.judger.dao.RemoteJudgeAccountEntityService; 6 | import com.simplefanc.voj.judger.mapper.RemoteJudgeAccountMapper; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | * @Author: chenfan 11 | * @Date: 2021/5/18 17:46 12 | * @Description: 13 | */ 14 | @Service 15 | public class RemoteJudgeAccountEntityServiceImpl extends ServiceImpl 16 | implements RemoteJudgeAccountEntityService { 17 | 18 | } -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/dao/impl/UserAcproblemEntityServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.dao.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.simplefanc.voj.common.pojo.entity.user.UserAcproblem; 5 | import com.simplefanc.voj.judger.dao.UserAcproblemEntityService; 6 | import com.simplefanc.voj.judger.mapper.UserAcproblemMapper; 7 | import org.springframework.stereotype.Service; 8 | 9 | /** 10 | *

11 | * 服务实现类 12 | *

13 | * 14 | * @author chenfan 15 | * @since 2021-10-23 16 | */ 17 | @Service 18 | public class UserAcproblemEntityServiceImpl extends ServiceImpl 19 | implements UserAcproblemEntityService { 20 | 21 | } 22 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/local/pojo/CaseResult.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.local.pojo; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class CaseResult { 7 | private Integer status; 8 | private Long time; 9 | private Long memory; 10 | private Double percentage; // 交互程序 11 | private String errMsg; 12 | private String output; 13 | 14 | private Long caseId; 15 | private Integer score; 16 | private String inputFileName; 17 | private String outputFileName; 18 | } -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/local/pojo/JudgeResult.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.local.pojo; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class JudgeResult { 7 | private Integer status; 8 | private Integer time; 9 | private Integer memory; 10 | private Integer score; 11 | private Integer oiRankScore; 12 | private String errMsg; 13 | } -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/local/pojo/SandBoxRes.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.local.pojo; 2 | 3 | import lombok.Builder; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.experimental.Accessors; 7 | 8 | /** 9 | * @Author: chenfan 10 | * @Date: 2022/1/3 15:27 11 | * @Description: 单个测评结果实体类 12 | */ 13 | @Data 14 | @EqualsAndHashCode(callSuper = false) 15 | @Accessors(chain = true) 16 | @Builder 17 | public class SandBoxRes { 18 | 19 | /** 20 | * 单个程序的状态码 21 | */ 22 | private Integer status; 23 | 24 | /** 25 | * 单个程序的退出码 26 | */ 27 | private Integer exitCode; 28 | 29 | /** 30 | * 单个程序的运行所耗空间 kb 31 | */ 32 | private Long memory; 33 | 34 | /** 35 | * 单个程序的运行所耗时间 ms 36 | */ 37 | private Long time; 38 | 39 | /** 40 | * 单个程序的标准输出 41 | */ 42 | private String stdout; 43 | 44 | /** 45 | * 单个程序的错误信息 46 | */ 47 | private String stderr; 48 | 49 | } -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/RemoteOjAware.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote; 2 | 3 | import com.simplefanc.voj.judger.judge.remote.pojo.RemoteOjInfo; 4 | 5 | public interface RemoteOjAware { 6 | 7 | RemoteOjInfo getOjInfo(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/account/RemoteAccountRepository.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.account; 2 | 3 | import com.simplefanc.voj.common.constants.RemoteOj; 4 | import org.springframework.stereotype.Component; 5 | 6 | import java.util.HashMap; 7 | import java.util.Map; 8 | 9 | @Component 10 | public class RemoteAccountRepository { 11 | 12 | /** 13 | * accountId -> RemoteAccount 14 | */ 15 | private Map repo = new HashMap<>(); 16 | 17 | public RemoteAccount getRemoteAccount(RemoteOj remoteOj, String username, String password) { 18 | final String key = remoteOj.getName() + "-" + username; 19 | if (!repo.containsKey(key)) { 20 | repo.put(key, new RemoteAccount(remoteOj, username, password)); 21 | } 22 | return repo.get(key); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/httpclient/CookieUtil.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.httpclient; 2 | 3 | import org.apache.http.client.CookieStore; 4 | import org.apache.http.client.protocol.HttpClientContext; 5 | import org.apache.http.cookie.Cookie; 6 | 7 | public class CookieUtil { 8 | 9 | public static String getCookieValue(DedicatedHttpClient client, String name) { 10 | String value = null; 11 | CookieStore cookieStore = (CookieStore) client.getContext().getAttribute(HttpClientContext.COOKIE_STORE); 12 | for (Cookie cookie : cookieStore.getCookies()) { 13 | if (cookie.getName().equals(name)) { 14 | value = cookie.getValue(); 15 | } 16 | } 17 | return value; 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/httpclient/HttpBodyValidator.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.httpclient; 2 | 3 | import cn.hutool.core.lang.Assert; 4 | 5 | public class HttpBodyValidator implements SimpleHttpResponseValidator { 6 | 7 | private String subString; 8 | 9 | private boolean negate; 10 | 11 | public HttpBodyValidator(String subString) { 12 | this(subString, false); 13 | } 14 | 15 | public HttpBodyValidator(String subString, boolean negate) { 16 | this.subString = subString; 17 | this.negate = negate; 18 | } 19 | 20 | @Override 21 | public void validate(SimpleHttpResponse response) throws Exception { 22 | try { 23 | Assert.isTrue(response.getBody().contains(subString) ^ negate); 24 | } catch (Exception e) { 25 | throw new RuntimeException(e); 26 | } 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/httpclient/Mapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.httpclient; 2 | 3 | public interface Mapper { 4 | 5 | T map(S value) throws Exception; 6 | 7 | } 8 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/httpclient/SimpleHttpResponseMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.httpclient; 2 | 3 | public interface SimpleHttpResponseMapper extends Mapper { 4 | 5 | T map(SimpleHttpResponse response) throws Exception; 6 | 7 | } 8 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/httpclient/SimpleHttpResponseValidator.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.httpclient; 2 | 3 | public interface SimpleHttpResponseValidator { 4 | 5 | SimpleHttpResponseValidator DUMMY_VALIDATOR = new SimpleHttpResponseValidator() { 6 | @Override 7 | public void validate(SimpleHttpResponse response) { 8 | // Validate nothing. Pass all the time. 9 | } 10 | }; 11 | 12 | /////////////////////////////////////////////////////////////// 13 | 14 | void validate(SimpleHttpResponse response) throws Exception; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/loginer/Loginer.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.loginer; 2 | 3 | import com.simplefanc.voj.judger.judge.remote.RemoteOjAware; 4 | import com.simplefanc.voj.judger.judge.remote.account.RemoteAccount; 5 | 6 | public interface Loginer extends RemoteOjAware { 7 | 8 | void login(RemoteAccount account) throws Exception; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/pojo/RemoteOjInfo.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.pojo; 2 | 3 | import com.simplefanc.voj.common.constants.RemoteOj; 4 | import org.apache.http.HttpHost; 5 | 6 | /** 7 | * Once initiated, don't modify it. I don't bother implementing an immutable one. 8 | * 9 | * @author chenfan 10 | */ 11 | public class RemoteOjInfo { 12 | 13 | public RemoteOj remoteOj; 14 | 15 | 16 | public HttpHost mainHost; 17 | 18 | public String defaultCharset = "UTF-8"; 19 | 20 | /** 21 | * In milliseconds 22 | */ 23 | public long maxInactiveInterval = 300000L; 24 | 25 | public RemoteOjInfo(RemoteOj remoteOj, HttpHost mainHost) { 26 | this.remoteOj = remoteOj; 27 | this.mainHost = mainHost; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/pojo/SubmissionRemoteStatus.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.pojo; 2 | 3 | import com.simplefanc.voj.common.constants.JudgeStatus; 4 | import com.simplefanc.voj.common.pojo.entity.judge.JudgeCase; 5 | import lombok.Data; 6 | 7 | import java.util.Date; 8 | import java.util.List; 9 | 10 | @Data 11 | public class SubmissionRemoteStatus { 12 | 13 | public JudgeStatus statusType; 14 | 15 | public String rawStatus; 16 | 17 | /** 18 | * millisecond 19 | */ 20 | public int executionTime; 21 | 22 | /** 23 | * KiloBytes 24 | */ 25 | public int executionMemory; 26 | 27 | public String compilationErrorInfo; 28 | 29 | public int failCase = -1; 30 | 31 | public List judgeCaseList; 32 | 33 | public Date queryTime = new Date(); 34 | 35 | } 36 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/provider/atcoder/AtCoderInfo.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.provider.atcoder; 2 | 3 | import com.simplefanc.voj.common.constants.RemoteOj; 4 | import com.simplefanc.voj.judger.judge.remote.pojo.RemoteOjInfo; 5 | import org.apache.http.HttpHost; 6 | 7 | public class AtCoderInfo { 8 | 9 | public static final RemoteOjInfo INFO = new RemoteOjInfo(RemoteOj.AtCoder, 10 | new HttpHost("atcoder.jp", 443, "https")); 11 | } 12 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/provider/codeforcesgym/GYMInfo.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.provider.codeforcesgym; 2 | 3 | import com.simplefanc.voj.common.constants.RemoteOj; 4 | import com.simplefanc.voj.judger.judge.remote.pojo.RemoteOjInfo; 5 | import org.apache.http.HttpHost; 6 | 7 | public class GYMInfo { 8 | 9 | public static final RemoteOjInfo INFO = new RemoteOjInfo(RemoteOj.GYM, 10 | new HttpHost("codeforces.com", 443, "https")); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/provider/codeforcesgym/GYMLoginer.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.provider.codeforcesgym; 2 | 3 | import com.simplefanc.voj.judger.judge.remote.httpclient.DedicatedHttpClientFactory; 4 | import com.simplefanc.voj.judger.judge.remote.pojo.RemoteOjInfo; 5 | import com.simplefanc.voj.judger.judge.remote.provider.shared.codeforces.AbstractCFStyleLoginer; 6 | import org.springframework.stereotype.Component; 7 | 8 | @Component 9 | public class GYMLoginer extends AbstractCFStyleLoginer { 10 | 11 | public GYMLoginer(DedicatedHttpClientFactory dedicatedHttpClientFactory) { 12 | super(dedicatedHttpClientFactory); 13 | } 14 | 15 | @Override 16 | public RemoteOjInfo getOjInfo() { 17 | return GYMInfo.INFO; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/provider/codeforcesgym/GYMSubmitter.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.provider.codeforcesgym; 2 | 3 | import com.simplefanc.voj.judger.judge.remote.httpclient.DedicatedHttpClientFactory; 4 | import com.simplefanc.voj.judger.judge.remote.pojo.RemoteOjInfo; 5 | import com.simplefanc.voj.judger.judge.remote.provider.shared.codeforces.AbstractCFStyleSubmitter; 6 | import org.springframework.stereotype.Component; 7 | 8 | @Component 9 | public class GYMSubmitter extends AbstractCFStyleSubmitter { 10 | 11 | public GYMSubmitter(DedicatedHttpClientFactory dedicatedHttpClientFactory) { 12 | super(dedicatedHttpClientFactory); 13 | } 14 | 15 | @Override 16 | public RemoteOjInfo getOjInfo() { 17 | return GYMInfo.INFO; 18 | } 19 | 20 | protected String getSubmitUrl(String contestNum) { 21 | return "/gym/" + contestNum + "/submit"; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/provider/codefores/CFInfo.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.provider.codefores; 2 | 3 | import com.simplefanc.voj.common.constants.RemoteOj; 4 | import com.simplefanc.voj.judger.judge.remote.pojo.RemoteOjInfo; 5 | import org.apache.http.HttpHost; 6 | 7 | public class CFInfo { 8 | 9 | public static final RemoteOjInfo INFO = new RemoteOjInfo(RemoteOj.CF, 10 | new HttpHost("codeforces.com", 443, "https")); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/provider/codefores/CFLoginer.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.provider.codefores; 2 | 3 | import com.simplefanc.voj.judger.judge.remote.httpclient.DedicatedHttpClientFactory; 4 | import com.simplefanc.voj.judger.judge.remote.pojo.RemoteOjInfo; 5 | import com.simplefanc.voj.judger.judge.remote.provider.shared.codeforces.AbstractCFStyleLoginer; 6 | import org.springframework.stereotype.Component; 7 | 8 | @Component 9 | public class CFLoginer extends AbstractCFStyleLoginer { 10 | 11 | public CFLoginer(DedicatedHttpClientFactory dedicatedHttpClientFactory) { 12 | super(dedicatedHttpClientFactory); 13 | } 14 | 15 | @Override 16 | public RemoteOjInfo getOjInfo() { 17 | return CFInfo.INFO; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/provider/codefores/CFSubmitter.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.provider.codefores; 2 | 3 | import com.simplefanc.voj.judger.judge.remote.httpclient.DedicatedHttpClientFactory; 4 | import com.simplefanc.voj.judger.judge.remote.pojo.RemoteOjInfo; 5 | import com.simplefanc.voj.judger.judge.remote.provider.shared.codeforces.AbstractCFStyleSubmitter; 6 | import org.springframework.stereotype.Component; 7 | 8 | @Component 9 | public class CFSubmitter extends AbstractCFStyleSubmitter { 10 | 11 | public static final String SUBMIT_URL = "/contest/%s/submit"; 12 | 13 | public CFSubmitter(DedicatedHttpClientFactory dedicatedHttpClientFactory) { 14 | super(dedicatedHttpClientFactory); 15 | } 16 | 17 | @Override 18 | public RemoteOjInfo getOjInfo() { 19 | return CFInfo.INFO; 20 | } 21 | 22 | protected String getSubmitUrl(String contestNum) { 23 | return String.format(SUBMIT_URL, contestNum); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/provider/eoj/EojInfo.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.provider.eoj; 2 | 3 | import com.simplefanc.voj.common.constants.RemoteOj; 4 | import com.simplefanc.voj.judger.judge.remote.pojo.RemoteOjInfo; 5 | import org.apache.http.HttpHost; 6 | 7 | /** 8 | * @author chenfan 9 | * @date 2022/1/29 20:40 10 | **/ 11 | public class EojInfo { 12 | 13 | public static final RemoteOjInfo INFO = new RemoteOjInfo(RemoteOj.EOJ, 14 | new HttpHost("acm.ecnu.edu.cn", 443, "https")); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/provider/hdu/HDUInfo.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.provider.hdu; 2 | 3 | import com.simplefanc.voj.common.constants.RemoteOj; 4 | import com.simplefanc.voj.judger.judge.remote.pojo.RemoteOjInfo; 5 | import org.apache.http.HttpHost; 6 | 7 | public class HDUInfo { 8 | 9 | public static final RemoteOjInfo INFO = new RemoteOjInfo( 10 | RemoteOj.HDU, 11 | new HttpHost("acm.hdu.edu.cn") 12 | ); 13 | 14 | } -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/provider/jsk/JSKInfo.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.provider.jsk; 2 | 3 | import com.simplefanc.voj.common.constants.RemoteOj; 4 | import com.simplefanc.voj.judger.judge.remote.pojo.RemoteOjInfo; 5 | import org.apache.http.HttpHost; 6 | 7 | public class JSKInfo { 8 | 9 | public static final RemoteOjInfo INFO = new RemoteOjInfo(RemoteOj.JSK, 10 | new HttpHost("www.jisuanke.com", 443, "https")); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/provider/mxt/MXTInfo.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.provider.mxt; 2 | 3 | import com.simplefanc.voj.common.constants.RemoteOj; 4 | import com.simplefanc.voj.judger.judge.remote.pojo.RemoteOjInfo; 5 | import org.apache.http.HttpHost; 6 | 7 | public class MXTInfo { 8 | 9 | public static final RemoteOjInfo INFO = new RemoteOjInfo(RemoteOj.MXT, 10 | new HttpHost("mxt.cn", 443, "https")); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/provider/poj/POJInfo.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.provider.poj; 2 | 3 | import com.simplefanc.voj.common.constants.RemoteOj; 4 | import com.simplefanc.voj.judger.judge.remote.pojo.RemoteOjInfo; 5 | import org.apache.http.HttpHost; 6 | 7 | public class POJInfo { 8 | 9 | public static final RemoteOjInfo INFO = new RemoteOjInfo(RemoteOj.POJ, new HttpHost("poj.org")); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/provider/tkoj/TKOJInfo.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.provider.tkoj; 2 | 3 | import com.simplefanc.voj.common.constants.RemoteOj; 4 | import com.simplefanc.voj.judger.judge.remote.pojo.RemoteOjInfo; 5 | import org.apache.http.HttpHost; 6 | 7 | public class TKOJInfo { 8 | 9 | public static final RemoteOjInfo INFO = new RemoteOjInfo(RemoteOj.TKOJ, new HttpHost("tk.hustoj.com")); 10 | } 11 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/querier/Querier.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.querier; 2 | 3 | import com.simplefanc.voj.judger.judge.remote.RemoteOjAware; 4 | import com.simplefanc.voj.judger.judge.remote.pojo.SubmissionInfo; 5 | import com.simplefanc.voj.judger.judge.remote.pojo.SubmissionRemoteStatus; 6 | import com.simplefanc.voj.judger.judge.remote.account.RemoteAccount; 7 | 8 | public interface Querier extends RemoteOjAware { 9 | 10 | SubmissionRemoteStatus query(SubmissionInfo info, RemoteAccount account) throws Exception; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/judge/remote/submitter/Submitter.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.judge.remote.submitter; 2 | 3 | import com.simplefanc.voj.judger.judge.remote.RemoteOjAware; 4 | import com.simplefanc.voj.judger.judge.remote.pojo.SubmissionInfo; 5 | import com.simplefanc.voj.judger.judge.remote.account.RemoteAccount; 6 | 7 | public interface Submitter extends RemoteOjAware { 8 | 9 | void submit(SubmissionInfo info, RemoteAccount account) throws Exception; 10 | 11 | } 12 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/mapper/ContestMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.contest.Contest; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * Mapper 接口 10 | *

11 | * 12 | * @author chenfan 13 | * @since 2021-10-23 14 | */ 15 | @Mapper 16 | public interface ContestMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/mapper/ContestRecordMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.contest.ContestRecord; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * Mapper 接口 10 | *

11 | * 12 | * @author chenfan 13 | * @since 2021-10-23 14 | */ 15 | @Mapper 16 | public interface ContestRecordMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/mapper/JudgeCaseMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.judge.JudgeCase; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * Mapper 接口 10 | *

11 | * 12 | * @author chenfan 13 | * @since 2021-10-23 14 | */ 15 | @Mapper 16 | public interface JudgeCaseMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/mapper/JudgeMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.judge.Judge; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * Mapper 接口 10 | *

11 | * 12 | * @author chenfan 13 | * @since 2021-10-23 14 | */ 15 | @Mapper 16 | public interface JudgeMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/mapper/JudgeServerMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.judge.JudgeServer; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface JudgeServerMapper extends BaseMapper { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/mapper/ProblemCaseMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.problem.ProblemCase; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | * @Author: chenfan 9 | * @Date: 2021/12/14 19:57 10 | * @Description: 11 | */ 12 | @Mapper 13 | public interface ProblemCaseMapper extends BaseMapper { 14 | 15 | } -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/mapper/ProblemMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.problem.Problem; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * Mapper 接口 10 | *

11 | * 12 | * @author chenfan 13 | * @since 2021-10-23 14 | */ 15 | @Mapper 16 | public interface ProblemMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/mapper/RemoteJudgeAccountMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.judge.RemoteJudgeAccount; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface RemoteJudgeAccountMapper extends BaseMapper { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/mapper/UserAcproblemMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.simplefanc.voj.common.pojo.entity.user.UserAcproblem; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * Mapper 接口 10 | *

11 | * 12 | * @author chenfan 13 | * @since 2021-10-23 14 | */ 15 | @Mapper 16 | public interface UserAcproblemMapper extends BaseMapper { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/mapper/UserRecordMapper.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.mapper; 2 | 3 | import org.apache.ibatis.annotations.Mapper; 4 | 5 | /** 6 | *

7 | * Mapper 接口 8 | *

9 | * 10 | * @author chenfan 11 | * @since 2021-10-23 12 | */ 13 | @Mapper 14 | public interface UserRecordMapper { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/service/JudgeService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.service; 2 | 3 | import com.simplefanc.voj.common.pojo.dto.JudgeDTO; 4 | import com.simplefanc.voj.common.pojo.entity.judge.Judge; 5 | import com.simplefanc.voj.judger.common.exception.SystemException; 6 | 7 | import java.util.HashMap; 8 | 9 | public interface JudgeService { 10 | 11 | void localJudge(Judge judge); 12 | 13 | void remoteJudge(JudgeDTO toJudge); 14 | 15 | Boolean compileSpj(String code, Long pid, String spjLanguage, HashMap extraFiles) 16 | throws SystemException; 17 | 18 | Boolean compileInteractive(String code, Long pid, String interactiveLanguage, HashMap extraFiles) 19 | throws SystemException; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /voj-judger/src/main/java/com/simplefanc/voj/judger/service/SystemConfigService.java: -------------------------------------------------------------------------------- 1 | package com.simplefanc.voj.judger.service; 2 | 3 | import java.util.HashMap; 4 | 5 | public interface SystemConfigService { 6 | 7 | HashMap getSystemConfig(); 8 | 9 | HashMap getJudgeServerInfo(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /voj-judger/src/main/resources/banner.txt: -------------------------------------------------------------------------------- 1 | ${AnsiColor.BRIGHT_YELLOW} 2 | 3 | ___ ___ ________ ___ 4 | |\ \ / /|\ __ \ |\ \ 5 | \ \ \ / / | \ \|\ \ \ \ \ 6 | \ \ \/ / / \ \ \\\ \ __ \ \ \ 7 | \ \ / / \ \ \\\ \|\ \\_\ \ 8 | \ \__/ / \ \_______\ \________\ 9 | \|__|/ \|_______|\|________| 10 | Virtual Online Judge(VOJ) - Judger 11 | @Author chenfan 12 | @Latest Update ${voj-judge-server.version} 13 | 14 | --------------------------------------------------------------------------------