├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md ├── build.bat ├── build.sh ├── cms-boot-web ├── .mvn │ ├── build.sh │ └── wrapper │ │ ├── MavenWrapperDownloader.java │ │ ├── maven-wrapper.jar │ │ └── maven-wrapper.properties ├── Dockerfile ├── build.sh ├── docker-build.sh ├── docker-compose.yml ├── docker │ ├── cms-admin │ │ ├── config.js │ │ └── nginx │ │ │ ├── cms-admin.conf │ │ │ └── default.conf │ ├── cms-web │ │ ├── config.js │ │ └── nginx │ │ │ ├── cms-web.conf │ │ │ └── default.conf │ └── mysql │ │ └── conf │ │ └── my.cnf ├── k8s-cms-web.yml ├── mvnw ├── mvnw.cmd ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── xzjie │ │ │ └── cms │ │ │ ├── WebApplication.java │ │ │ ├── ad │ │ │ ├── convert │ │ │ │ └── AdConverter.java │ │ │ ├── dto │ │ │ │ ├── AdDto.java │ │ │ │ └── AdPositionDto.java │ │ │ ├── model │ │ │ │ ├── Ad.java │ │ │ │ ├── AdPosition.java │ │ │ │ └── AdSense.java │ │ │ ├── repository │ │ │ │ ├── AdPositionRepository.java │ │ │ │ └── AdRepository.java │ │ │ ├── service │ │ │ │ ├── AdService.java │ │ │ │ └── impl │ │ │ │ │ └── AdServiceImpl.java │ │ │ └── vo │ │ │ │ └── AdVo.java │ │ │ ├── article │ │ │ ├── convert │ │ │ │ ├── ArticleDtoConverter.java │ │ │ │ └── CategoryConverter.java │ │ │ ├── dto │ │ │ │ ├── ArticleDto.java │ │ │ │ ├── ArticleHotResult.java │ │ │ │ ├── ArticleQueryDto.java │ │ │ │ ├── ArticleRecommendStatResult.java │ │ │ │ ├── CateDto.java │ │ │ │ ├── CategoryTree.java │ │ │ │ └── SearchDto.java │ │ │ ├── model │ │ │ │ ├── Article.java │ │ │ │ ├── ArticleHot.java │ │ │ │ ├── ArticleLabel.java │ │ │ │ ├── ArticleRecommendStat.java │ │ │ │ ├── Category.java │ │ │ │ └── Topic.java │ │ │ ├── repository │ │ │ │ ├── ArticleHotRepository.java │ │ │ │ ├── ArticleLabelRepository.java │ │ │ │ ├── ArticleRecommendStatRepository.java │ │ │ │ ├── ArticleRepository.java │ │ │ │ └── CategoryRepository.java │ │ │ ├── service │ │ │ │ ├── ArticleService.java │ │ │ │ └── impl │ │ │ │ │ └── ArticleServiceImpl.java │ │ │ └── vo │ │ │ │ ├── ArticleCateVo.java │ │ │ │ ├── ArticleDetailVo.java │ │ │ │ ├── CaseVo.java │ │ │ │ ├── CateFatherVo.java │ │ │ │ └── CategoriesVo.java │ │ │ ├── client │ │ │ └── web │ │ │ │ ├── AppAdController.java │ │ │ │ ├── AppArticleController.java │ │ │ │ ├── AppLabelController.java │ │ │ │ ├── AppNavigationController.java │ │ │ │ ├── AppNoticeController.java │ │ │ │ ├── AppVisitLogController.java │ │ │ │ ├── BaseController.java │ │ │ │ └── DefaultController.java │ │ │ ├── configure │ │ │ ├── AsyncConfigure.java │ │ │ ├── AsyncProperties.java │ │ │ ├── CmsProperties.java │ │ │ ├── DateFormatConfigure.java │ │ │ ├── LocationProperties.java │ │ │ ├── MessageConfiguration.java │ │ │ ├── MultipartConfigure.java │ │ │ ├── RedisConfigure.java │ │ │ ├── SecurityProperties.java │ │ │ ├── SwaggerConfigure.java │ │ │ ├── UploadProperties.java │ │ │ ├── WxMpConfiguration.java │ │ │ └── WxMpProperties.java │ │ │ ├── core │ │ │ ├── ObjectConvertUtils.java │ │ │ ├── PageResult.java │ │ │ ├── ReflectionUtils.java │ │ │ ├── Result.java │ │ │ ├── SFunction.java │ │ │ ├── annotation │ │ │ │ └── Log.java │ │ │ ├── aspect │ │ │ │ └── SystemLogAspect.java │ │ │ ├── convert │ │ │ │ └── Converter.java │ │ │ ├── entity │ │ │ │ └── BaseEntity.java │ │ │ ├── event │ │ │ │ ├── EmailEvent.java │ │ │ │ └── SystemLogEvent.java │ │ │ ├── listener │ │ │ │ └── RegisterSystemListener.java │ │ │ ├── persistence │ │ │ │ ├── Criteria.java │ │ │ │ ├── PredicateWrapper.java │ │ │ │ ├── SimpleSpecification.java │ │ │ │ ├── SpecSearchCriteria.java │ │ │ │ ├── SpecificationUtils.java │ │ │ │ ├── SpecificationWrapper.java │ │ │ │ ├── Specifications.java │ │ │ │ ├── annotation │ │ │ │ │ └── QueryCondition.java │ │ │ │ └── enums │ │ │ │ │ ├── ConditionType.java │ │ │ │ │ ├── Join.java │ │ │ │ │ └── SpecType.java │ │ │ ├── repository │ │ │ │ └── BaseRepository.java │ │ │ ├── service │ │ │ │ ├── AbstractService.java │ │ │ │ └── BaseService.java │ │ │ └── utils │ │ │ │ ├── FileTypeUtils.java │ │ │ │ ├── HttpUtils.java │ │ │ │ ├── I18Utils.java │ │ │ │ ├── JsonUtils.java │ │ │ │ ├── MapUtils.java │ │ │ │ ├── RequestHolder.java │ │ │ │ ├── ResultCode.java │ │ │ │ ├── SecurityUtils.java │ │ │ │ └── XmlConvertUtil.java │ │ │ ├── dict │ │ │ ├── model │ │ │ │ └── KeyData.java │ │ │ ├── repository │ │ │ │ └── KeyDataRepository.java │ │ │ └── service │ │ │ │ ├── KeyDataService.java │ │ │ │ └── impl │ │ │ │ └── KeyDataServiceImpl.java │ │ │ ├── dto │ │ │ ├── AuthResponse.java │ │ │ ├── BasePageDto.java │ │ │ ├── BinderUserDto.java │ │ │ ├── Dto.java │ │ │ ├── EmailRequest.java │ │ │ ├── NodeTree.java │ │ │ ├── PasswordRequest.java │ │ │ ├── ResetPasswordDto.java │ │ │ ├── RoleRequest.java │ │ │ ├── TreeNode.java │ │ │ └── ValidatorDto.java │ │ │ ├── enums │ │ │ ├── Business.java │ │ │ ├── HttpProtocol.java │ │ │ ├── KeyDataKey.java │ │ │ ├── MassMsgType.java │ │ │ ├── MediaFileType.java │ │ │ ├── QiniuRegion.java │ │ │ ├── RoleType.java │ │ │ ├── Sorting.java │ │ │ ├── StateType.java │ │ │ ├── UploadType.java │ │ │ ├── VerifyCodeScenes.java │ │ │ └── VerifyCodeType.java │ │ │ ├── exception │ │ │ ├── BusinessException.java │ │ │ ├── WxMpException.java │ │ │ └── handler │ │ │ │ └── WebGlobalExceptionHandler.java │ │ │ ├── label │ │ │ ├── dto │ │ │ │ └── LabelQueryDto.java │ │ │ ├── model │ │ │ │ └── Label.java │ │ │ ├── repository │ │ │ │ └── LabelRepository.java │ │ │ └── service │ │ │ │ ├── LabelService.java │ │ │ │ └── impl │ │ │ │ └── LabelServiceImpl.java │ │ │ ├── log │ │ │ ├── model │ │ │ │ └── SystemLog.java │ │ │ ├── repository │ │ │ │ └── SystemLogRepository.java │ │ │ └── service │ │ │ │ ├── SystemLogService.java │ │ │ │ └── impl │ │ │ │ ├── SystemLogServiceImpl.java │ │ │ │ └── VerifyCodeServiceImpl.java │ │ │ ├── navigation │ │ │ ├── dto │ │ │ │ └── NavigationRequest.java │ │ │ ├── model │ │ │ │ └── Navigation.java │ │ │ ├── repository │ │ │ │ └── NavigationRepository.java │ │ │ └── service │ │ │ │ ├── NavigationService.java │ │ │ │ └── impl │ │ │ │ └── NavigationServiceImpl.java │ │ │ ├── notice │ │ │ ├── dto │ │ │ │ └── NoticeQueryDto.java │ │ │ ├── model │ │ │ │ └── Notice.java │ │ │ ├── repository │ │ │ │ └── NoticeRepository.java │ │ │ └── service │ │ │ │ ├── NoticeService.java │ │ │ │ └── impl │ │ │ │ └── NoticeServiceImpl.java │ │ │ ├── picture │ │ │ ├── dto │ │ │ │ ├── PictureQueryDto.java │ │ │ │ └── PicturesGroupRequest.java │ │ │ ├── model │ │ │ │ ├── Pictures.java │ │ │ │ └── PicturesGroup.java │ │ │ ├── repository │ │ │ │ ├── PicturesGroupRepository.java │ │ │ │ └── PicturesRepository.java │ │ │ └── service │ │ │ │ ├── PicturesService.java │ │ │ │ ├── UploadService.java │ │ │ │ └── impl │ │ │ │ ├── PicturesServiceImpl.java │ │ │ │ └── UploadServiceImpl.java │ │ │ ├── quartz │ │ │ ├── JobFactory.java │ │ │ ├── dto │ │ │ │ ├── PauseQuartzRequest.java │ │ │ │ ├── QuartzRequest.java │ │ │ │ └── QuartzResult.java │ │ │ ├── model │ │ │ │ ├── QuartzEntity.java │ │ │ │ └── QuartzMultiKeys.java │ │ │ ├── repository │ │ │ │ └── QuartzRepository.java │ │ │ ├── service │ │ │ │ ├── QuartzService.java │ │ │ │ └── impl │ │ │ │ │ └── QuartzServiceImpl.java │ │ │ ├── task │ │ │ │ ├── EmailVerifyCodeJob.java │ │ │ │ └── TaskJob.java │ │ │ └── web │ │ │ │ └── QuartzController.java │ │ │ ├── security │ │ │ ├── LoginEventService.java │ │ │ ├── SecurityUserDetails.java │ │ │ ├── SecurityUserDetailsService.java │ │ │ ├── WebConfiguration.java │ │ │ ├── WebSecurityConfigure.java │ │ │ ├── authentication │ │ │ │ ├── SecurityAccessDeniedHandler.java │ │ │ │ ├── SecurityAuthenticationEntryPoint.java │ │ │ │ ├── SecurityAuthenticationFailureHandler.java │ │ │ │ ├── SecurityAuthenticationSuccessHandler.java │ │ │ │ └── SecurityLogoutSuccessHandler.java │ │ │ ├── code │ │ │ │ ├── CodeAuthenticationFilter.java │ │ │ │ ├── CodeAuthenticationProvider.java │ │ │ │ ├── CodeAuthenticationToken.java │ │ │ │ └── CodeSecurityConfigurerAdapter.java │ │ │ ├── filter │ │ │ │ ├── CorsFilter.java │ │ │ │ ├── CorsInterceptor.java │ │ │ │ └── SecurityAuthenticationFilter.java │ │ │ ├── listener │ │ │ │ ├── AuthenticationFailureListener.java │ │ │ │ └── AuthenticationSuccessEventListener.java │ │ │ ├── permission │ │ │ │ └── CustomPermissionEvaluator.java │ │ │ ├── social │ │ │ │ ├── SocialAuthenticationFilter.java │ │ │ │ ├── SocialAuthenticationProvider.java │ │ │ │ ├── SocialAuthenticationToken.java │ │ │ │ └── SocialSecurityConfigurerAdapter.java │ │ │ └── token │ │ │ │ ├── SecurityTokenProvider.java │ │ │ │ ├── TokenConfigurer.java │ │ │ │ └── TokenFilter.java │ │ │ ├── store │ │ │ ├── local │ │ │ │ └── configure │ │ │ │ │ └── LocalProperties.java │ │ │ ├── minio │ │ │ │ ├── configure │ │ │ │ │ ├── MinioConfiguration.java │ │ │ │ │ └── MinioConfigurationProperties.java │ │ │ │ └── service │ │ │ │ │ ├── MinioService.java │ │ │ │ │ └── impl │ │ │ │ │ └── MinioServiceImpl.java │ │ │ ├── oss │ │ │ │ ├── configure │ │ │ │ │ ├── OssConfiguration.java │ │ │ │ │ └── OssConfigurationProperties.java │ │ │ │ └── service │ │ │ │ │ ├── OssService.java │ │ │ │ │ └── impl │ │ │ │ │ └── OssServiceImpl.java │ │ │ └── qiniu │ │ │ │ ├── configure │ │ │ │ ├── QiniuConfiguration.java │ │ │ │ └── QiniuConfigurationProperties.java │ │ │ │ └── service │ │ │ │ ├── QiniuService.java │ │ │ │ └── impl │ │ │ │ └── QiniuServiceImpl.java │ │ │ ├── system │ │ │ ├── account │ │ │ │ ├── convert │ │ │ │ │ └── AccountConverter.java │ │ │ │ ├── dto │ │ │ │ │ ├── AccountDto.java │ │ │ │ │ └── AccountQueryDto.java │ │ │ │ ├── model │ │ │ │ │ ├── Account.java │ │ │ │ │ └── AccountRole.java │ │ │ │ ├── repository │ │ │ │ │ ├── AccountRepository.java │ │ │ │ │ └── AccountRoleRepository.java │ │ │ │ ├── service │ │ │ │ │ ├── AccountService.java │ │ │ │ │ └── impl │ │ │ │ │ │ └── AccountServiceImpl.java │ │ │ │ └── web │ │ │ │ │ └── SystemAccountController.java │ │ │ ├── auth │ │ │ │ ├── dto │ │ │ │ │ ├── LoginDto.java │ │ │ │ │ ├── MobileLoginDto.java │ │ │ │ │ └── RegisterDto.java │ │ │ │ ├── model │ │ │ │ │ └── Social.java │ │ │ │ ├── repository │ │ │ │ │ └── SocialRepository.java │ │ │ │ └── web │ │ │ │ │ ├── AuthController.java │ │ │ │ │ └── OauthController.java │ │ │ ├── menu │ │ │ │ ├── convert │ │ │ │ │ └── MenuConverter.java │ │ │ │ ├── dto │ │ │ │ │ ├── MenuMeta.java │ │ │ │ │ ├── MenuRequest.java │ │ │ │ │ ├── MenuRouter.java │ │ │ │ │ └── MenuTree.java │ │ │ │ ├── model │ │ │ │ │ ├── Menu.java │ │ │ │ │ └── Permission.java │ │ │ │ ├── repository │ │ │ │ │ ├── MenuRepository.java │ │ │ │ │ └── PermissionRepository.java │ │ │ │ ├── service │ │ │ │ │ ├── MenuService.java │ │ │ │ │ └── impl │ │ │ │ │ │ └── MenuServiceImpl.java │ │ │ │ ├── vo │ │ │ │ │ └── MenuVo.java │ │ │ │ └── web │ │ │ │ │ └── SystemMenuController.java │ │ │ ├── role │ │ │ │ ├── model │ │ │ │ │ └── Role.java │ │ │ │ ├── repository │ │ │ │ │ └── RoleRepository.java │ │ │ │ ├── serivce │ │ │ │ │ ├── RoleService.java │ │ │ │ │ └── impl │ │ │ │ │ │ └── RoleServiceImpl.java │ │ │ │ └── web │ │ │ │ │ └── RoleAuthorizationController.java │ │ │ └── web │ │ │ │ ├── HotController.java │ │ │ │ ├── KeyDataController.java │ │ │ │ ├── PicturesController.java │ │ │ │ ├── SystemAdController.java │ │ │ │ ├── SystemArticleController.java │ │ │ │ ├── SystemDefaultController.java │ │ │ │ ├── SystemLabelController.java │ │ │ │ ├── SystemNavigationController.java │ │ │ │ ├── SystemNoticeController.java │ │ │ │ ├── SystemVisitController.java │ │ │ │ ├── UploadController.java │ │ │ │ ├── WechatController.java │ │ │ │ ├── WxFansController.java │ │ │ │ ├── WxMaterialController.java │ │ │ │ └── WxTagsController.java │ │ │ ├── verification │ │ │ ├── model │ │ │ │ └── VerifyCode.java │ │ │ ├── repository │ │ │ │ └── VerifyCodeRepository.java │ │ │ └── service │ │ │ │ └── VerifyCodeService.java │ │ │ ├── visit │ │ │ ├── model │ │ │ │ └── VisitLog.java │ │ │ ├── repository │ │ │ │ └── VisitLogRepository.java │ │ │ └── service │ │ │ │ ├── VisitLogService.java │ │ │ │ └── impl │ │ │ │ └── VisitLogServiceImpl.java │ │ │ ├── vo │ │ │ ├── AccountVo.java │ │ │ ├── ChartData.java │ │ │ ├── LabelVo.java │ │ │ ├── UserInfoVo.java │ │ │ └── VisitStatistics.java │ │ │ └── wechat │ │ │ ├── builder │ │ │ ├── AbstractBuilder.java │ │ │ ├── ImageBuilder.java │ │ │ └── TextBuilder.java │ │ │ ├── convert │ │ │ ├── WxAccountFansConverter.java │ │ │ └── WxTagsConverter.java │ │ │ ├── dto │ │ │ ├── WxAccessToken.java │ │ │ ├── WxAccountFansDto.java │ │ │ ├── WxArticleDto.java │ │ │ ├── WxArticleTemplateDto.java │ │ │ ├── WxArticleTemplateQueryDto.java │ │ │ ├── WxConfigStorage.java │ │ │ ├── WxCustomMessage.java │ │ │ ├── WxFansTagRequest.java │ │ │ ├── WxMediaArticle.java │ │ │ ├── WxMediaUploadResult.java │ │ │ ├── WxMessage.java │ │ │ ├── WxMessagePreview.java │ │ │ ├── WxMessageResult.java │ │ │ ├── WxMessageTag.java │ │ │ ├── WxMpError.java │ │ │ ├── WxOpenIdResult.java │ │ │ ├── WxTagging.java │ │ │ ├── WxTagsCreate.java │ │ │ ├── WxTagsRequest.java │ │ │ ├── WxTagsResult.java │ │ │ ├── WxUserResult.java │ │ │ └── WxXmlMessage.java │ │ │ ├── handler │ │ │ ├── AbstractHandler.java │ │ │ ├── MessageHandler.java │ │ │ ├── ScanHandler.java │ │ │ └── SubscribeHandler.java │ │ │ ├── model │ │ │ ├── WxAccountFans.java │ │ │ ├── WxArticle.java │ │ │ ├── WxArticleTemplate.java │ │ │ ├── WxFansTag.java │ │ │ └── WxTags.java │ │ │ ├── repository │ │ │ ├── WxArticleRepository.java │ │ │ ├── WxArticleTemplateRepository.java │ │ │ ├── WxFansRepository.java │ │ │ ├── WxFansTagRepository.java │ │ │ └── WxTagsRepository.java │ │ │ └── service │ │ │ ├── WechatService.java │ │ │ ├── WxAccountFansService.java │ │ │ ├── WxArticleTemplateService.java │ │ │ ├── WxTagsService.java │ │ │ └── impl │ │ │ ├── WechatServiceImpl.java │ │ │ ├── WxAccountFansServiceImpl.java │ │ │ ├── WxArticleTemplateServiceImpl.java │ │ │ └── WxTagsServiceImpl.java │ └── resources │ │ ├── .DS_Store │ │ ├── ValidationMessages.properties │ │ ├── ValidationMessages_zh_CN.properties │ │ ├── config │ │ ├── application-prod.yml │ │ └── application.yml │ │ ├── db │ │ └── migration │ │ │ ├── V1.0.10.0__notice.sql │ │ │ ├── V1.0.10.1__notice_enabled.sql │ │ │ ├── V1.0.3.0__init_system.sql │ │ │ ├── V1.0.3.1__init_system_data.sql │ │ │ ├── V1.0.3.2__init_qrtz.sql │ │ │ ├── V1.0.3.3__init_qrtz_data.sql │ │ │ ├── V1.0.3.4__init_cms.sql │ │ │ ├── V1.0.3.5__init_cms_data.sql │ │ │ ├── V1.0.3.6__init_wx.sql │ │ │ ├── V1.0.4.0__system_menu_data.sql │ │ │ ├── V1.0.4.1__cms_article_hot.sql │ │ │ ├── V1.0.4.2__cms_article_recommend.sql │ │ │ ├── V1.0.4.3__system_menu_data.sql │ │ │ ├── V1.0.5.0__system_pictures.sql │ │ │ ├── V1.0.8.0__visit_log.sql │ │ │ ├── V1.0.9.0__social.sql │ │ │ ├── data-system_data.sql │ │ │ ├── data-system_menu_permission.sql │ │ │ ├── data.sql │ │ │ └── schema.sql │ │ ├── jwt.jks │ │ ├── log4jdbc.log4j2.properties │ │ ├── logback-spring.xml │ │ ├── message │ │ ├── messages.properties │ │ ├── messages_zh.properties │ │ └── messages_zh_CN.properties │ │ ├── public │ │ ├── assets │ │ │ ├── .DS_Store │ │ │ ├── css │ │ │ │ ├── animate.min.css │ │ │ │ ├── bootstrap.min.css │ │ │ │ ├── bootstrap.min14ed.css │ │ │ │ ├── demo │ │ │ │ │ └── webuploader-demo.min.css │ │ │ │ ├── font-awesome.min93e3.css │ │ │ │ ├── login.min.css │ │ │ │ ├── patterns │ │ │ │ │ ├── header-profile-skin-1.png │ │ │ │ │ ├── header-profile-skin-3.png │ │ │ │ │ ├── header-profile.png │ │ │ │ │ └── shattered.png │ │ │ │ ├── plugins │ │ │ │ │ ├── awesome-bootstrap-checkbox │ │ │ │ │ │ └── awesome-bootstrap-checkbox.css │ │ │ │ │ ├── blueimp │ │ │ │ │ │ ├── css │ │ │ │ │ │ │ └── blueimp-gallery.min.css │ │ │ │ │ │ └── img │ │ │ │ │ │ │ ├── error.png │ │ │ │ │ │ │ ├── error.svg │ │ │ │ │ │ │ ├── loading.gif │ │ │ │ │ │ │ ├── play-pause.png │ │ │ │ │ │ │ ├── play-pause.svg │ │ │ │ │ │ │ ├── video-play.png │ │ │ │ │ │ │ └── video-play.svg │ │ │ │ │ ├── bootstrap-table │ │ │ │ │ │ └── bootstrap-table.min.css │ │ │ │ │ ├── chosen │ │ │ │ │ │ ├── chosen-sprite.png │ │ │ │ │ │ ├── chosen-sprite@2x.png │ │ │ │ │ │ └── chosen.css │ │ │ │ │ ├── clockpicker │ │ │ │ │ │ └── clockpicker.css │ │ │ │ │ ├── codemirror │ │ │ │ │ │ ├── ambiance.css │ │ │ │ │ │ └── codemirror.css │ │ │ │ │ ├── colorpicker │ │ │ │ │ │ ├── css │ │ │ │ │ │ │ └── bootstrap-colorpicker.min.css │ │ │ │ │ │ └── img │ │ │ │ │ │ │ └── bootstrap-colorpicker │ │ │ │ │ │ │ ├── alpha-horizontal.png │ │ │ │ │ │ │ ├── alpha.png │ │ │ │ │ │ │ ├── hue-horizontal.png │ │ │ │ │ │ │ ├── hue.png │ │ │ │ │ │ │ └── saturation.png │ │ │ │ │ ├── cropper │ │ │ │ │ │ └── cropper.min.css │ │ │ │ │ ├── dataTables │ │ │ │ │ │ └── dataTables.bootstrap.css │ │ │ │ │ ├── datapicker │ │ │ │ │ │ └── datepicker3.css │ │ │ │ │ ├── dropzone │ │ │ │ │ │ ├── basic.css │ │ │ │ │ │ └── dropzone.css │ │ │ │ │ ├── footable │ │ │ │ │ │ ├── fonts │ │ │ │ │ │ │ ├── footable.eot │ │ │ │ │ │ │ ├── footable.svg │ │ │ │ │ │ │ ├── footable.ttf │ │ │ │ │ │ │ ├── footable.woff │ │ │ │ │ │ │ └── footabled41d.eot │ │ │ │ │ │ └── footable.core.css │ │ │ │ │ ├── fullcalendar │ │ │ │ │ │ ├── fullcalendar.css │ │ │ │ │ │ └── fullcalendar.print.css │ │ │ │ │ ├── iCheck │ │ │ │ │ │ ├── custom.css │ │ │ │ │ │ ├── green.png │ │ │ │ │ │ └── green@2x.png │ │ │ │ │ ├── images │ │ │ │ │ │ ├── sort_asc.png │ │ │ │ │ │ ├── sort_desc.png │ │ │ │ │ │ ├── sprite-skin-flat.png │ │ │ │ │ │ ├── spritemap.png │ │ │ │ │ │ └── spritemap@2x.png │ │ │ │ │ ├── ionRangeSlider │ │ │ │ │ │ ├── ion.rangeSlider.css │ │ │ │ │ │ └── ion.rangeSlider.skinFlat.css │ │ │ │ │ ├── jasny │ │ │ │ │ │ └── jasny-bootstrap.min.css │ │ │ │ │ ├── jqgrid │ │ │ │ │ │ └── ui.jqgridffe4.css │ │ │ │ │ ├── jsTree │ │ │ │ │ │ └── style.min.css │ │ │ │ │ ├── markdown │ │ │ │ │ │ └── bootstrap-markdown.min.css │ │ │ │ │ ├── morris │ │ │ │ │ │ └── morris-0.4.3.min.css │ │ │ │ │ ├── nouslider │ │ │ │ │ │ └── jquery.nouislider.css │ │ │ │ │ ├── plyr │ │ │ │ │ │ ├── plyr.css │ │ │ │ │ │ └── sprite.svg │ │ │ │ │ ├── simditor │ │ │ │ │ │ └── simditor.css │ │ │ │ │ ├── steps │ │ │ │ │ │ └── jquery.steps.css │ │ │ │ │ ├── summernote │ │ │ │ │ │ ├── summernote-bs3.css │ │ │ │ │ │ └── summernote.css │ │ │ │ │ ├── sweetalert │ │ │ │ │ │ └── sweetalert.css │ │ │ │ │ ├── switchery │ │ │ │ │ │ └── switchery.css │ │ │ │ │ ├── toastr │ │ │ │ │ │ └── toastr.min.css │ │ │ │ │ ├── treeview │ │ │ │ │ │ └── bootstrap-treeview.css │ │ │ │ │ └── webuploader │ │ │ │ │ │ └── webuploader.css │ │ │ │ ├── style.css │ │ │ │ └── style.min.css │ │ │ ├── fonts │ │ │ │ ├── fontawesome-webfont93e3.eot │ │ │ │ ├── fontawesome-webfont93e3.svg │ │ │ │ ├── fontawesome-webfont93e3.ttf │ │ │ │ ├── fontawesome-webfont93e3.woff │ │ │ │ ├── fontawesome-webfont93e3.woff2 │ │ │ │ ├── fontawesome-webfontd41d.eot │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ ├── glyphicons-halflings-regular.woff2 │ │ │ │ └── glyphicons-halflings-regulard41d.eot │ │ │ └── img │ │ │ │ ├── .DS_Store │ │ │ │ ├── avatar-default-S.gif │ │ │ │ ├── avatar-default.jpg │ │ │ │ ├── avatar.png │ │ │ │ ├── bg.png │ │ │ │ ├── icons.png │ │ │ │ ├── loading-upload.gif │ │ │ │ ├── locked.png │ │ │ │ ├── login-background.jpg │ │ │ │ ├── p1.jpg │ │ │ │ ├── p2.jpg │ │ │ │ ├── p3.jpg │ │ │ │ ├── p_big1.jpg │ │ │ │ ├── p_big2.jpg │ │ │ │ ├── p_big3.jpg │ │ │ │ ├── profile.jpg │ │ │ │ ├── profile_big.jpg │ │ │ │ ├── progress.png │ │ │ │ ├── success.png │ │ │ │ └── user.png │ │ ├── default │ │ │ └── index.html │ │ ├── dist │ │ │ └── .DS_Store │ │ ├── extra_word.dic │ │ ├── favicon.ico │ │ ├── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ │ ├── image │ │ │ ├── banner_01.png │ │ │ ├── banner_02.png │ │ │ ├── banner_03.png │ │ │ ├── logo.png │ │ │ ├── news.png │ │ │ └── news1.png │ │ ├── img │ │ │ ├── .DS_Store │ │ │ ├── 1-15.jpg │ │ │ ├── android.png │ │ │ ├── app-3.png │ │ │ ├── app1-1.png │ │ │ ├── app1.png │ │ │ ├── app2-2.png │ │ │ ├── app2.png │ │ │ ├── app3-3.png │ │ │ ├── app3.png │ │ │ ├── app4-4.png │ │ │ ├── app4.png │ │ │ ├── app5-5.png │ │ │ ├── app5.png │ │ │ ├── app6-6.png │ │ │ ├── app6.png │ │ │ ├── app7-7.png │ │ │ ├── app7.png │ │ │ ├── app8-8.png │ │ │ ├── app8.png │ │ │ ├── bg-pic.png │ │ │ ├── bg-pic2.png │ │ │ ├── bg-pic3.png │ │ │ ├── case1.png │ │ │ ├── hw_bg.png │ │ │ ├── hw_bg2.png │ │ │ ├── hw_bg3.png │ │ │ ├── inform.png │ │ │ ├── ios.png │ │ │ ├── logo-word.png │ │ │ ├── logo.png │ │ │ ├── map.png │ │ │ ├── mwebsite.png │ │ │ ├── news.png │ │ │ ├── news1.png │ │ │ ├── news2.png │ │ │ ├── not-img.gif │ │ │ ├── product1.png │ │ │ ├── product2.png │ │ │ ├── ptn4.png │ │ │ ├── ptn5.png │ │ │ ├── ptn6.png │ │ │ ├── ptn7.png │ │ │ ├── ptn8.png │ │ │ ├── space-1.png │ │ │ ├── space-2.png │ │ │ ├── space-3.png │ │ │ ├── space-4.png │ │ │ ├── space-5.png │ │ │ ├── webservice.png │ │ │ ├── website.png │ │ │ ├── wechat.png │ │ │ ├── zhaoping1.png │ │ │ └── zhaoping2.png │ │ └── logo.png │ │ ├── quartz.properties │ │ └── templates │ │ └── email │ │ ├── binder_validator.html │ │ ├── reset_email.html │ │ └── reset_password.html │ └── test │ └── java │ └── com │ └── xzjie │ └── cms │ ├── DateTest.java │ ├── Key.java │ ├── WebApplicationTests.java │ ├── demo │ └── DemoServiceTest.java │ ├── persistence │ └── SpecSearchCriteriaTest.java │ ├── quartz │ └── service │ │ └── QuartzServiceTest.java │ └── service │ └── impl │ ├── ArticleServiceImplTest.java │ ├── MenuServiceImplTest.java │ └── VerifyCodeServiceImplTest.java ├── docs ├── git 基本使用.docx ├── image │ ├── 16462965296660.png │ ├── gh_955550ad6334_258.jpg │ ├── gh_bc4d7a4152a3_258.jpg │ └── share │ │ ├── 1.png │ │ ├── 10.png │ │ ├── 11.png │ │ ├── 12.png │ │ ├── 2.1.png │ │ ├── 2.png │ │ ├── 3.png │ │ ├── 4.png │ │ ├── 5.png │ │ ├── 6.png │ │ ├── 7.png │ │ ├── 8.png │ │ └── 9.png ├── index.html ├── pd │ ├── EnterpriseArchitectureModel_1.eam │ ├── service.oob │ └── service.oom ├── static │ ├── configuration.json │ ├── css │ │ ├── app.6cc042c6bc2d86916031a692b938b16d.css │ │ └── app.6cc042c6bc2d86916031a692b938b16d.css.map │ ├── fonts │ │ ├── element-icons.6f0a763.ttf │ │ ├── fontello.068ca2b.ttf │ │ └── fontello.e73a064.eot │ ├── img │ │ ├── deploy0.aaa30ac.png │ │ ├── deploy1.75fd811.png │ │ ├── deploy2.6d80b32.png │ │ ├── fontello.9354499.svg │ │ ├── use0.61c0f0e.png │ │ ├── use1.18f36b8.png │ │ └── use2.449ac15.png │ └── js │ │ ├── app.5a183627be618bd86a2b.js │ │ ├── app.5a183627be618bd86a2b.js.map │ │ ├── manifest.3ad1d5771e9b13dbdad2.js │ │ ├── manifest.3ad1d5771e9b13dbdad2.js.map │ │ ├── vendor.d5ced11d648e0dba51c8.js │ │ └── vendor.d5ced11d648e0dba51c8.js.map └── we7 │ └── Dockerfile ├── help ├── img_1.png └── 服务文档.md ├── lib └── install.bat ├── pom.xml ├── run.bat ├── version.bat └── version.sh /.gitattributes: -------------------------------------------------------------------------------- 1 | *.css linguist-language=java 2 | *.js linguist-language=java 3 | *.html linguist-language=java 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .classpath 2 | .project 3 | .settings 4 | .vscode 5 | .DS_Store 6 | 7 | ### IntelliJ IDEA ### 8 | .idea 9 | *.iws 10 | *.iml 11 | *.ipr 12 | *.versionsBackup 13 | 14 | data 15 | target 16 | logs 17 | upload 18 | 19 | compile.bat 20 | 21 | ### NetBeans ### 22 | /nbproject/private/ 23 | /nbbuild/ 24 | /dist/ 25 | /nbdist/ 26 | /.nb-gradle/ 27 | /config/ 28 | build/ 29 | 30 | 31 | ### VS Code ### 32 | 33 | 34 | upload.sh 35 | docker-compose-*.yml 36 | /hbase/ 37 | /pinpoint-docker/ 38 | docs/*.sql 39 | docs/*.md 40 | /pinpoint-docker-master.zip 41 | 42 | HELP.md 43 | !.mvn/wrapper/maven-wrapper.jar 44 | !**/src/main/** 45 | !**/src/test/** 46 | 47 | /docs/config/application-prod.yml 48 | /docs/docker-compose.yml 49 | -------------------------------------------------------------------------------- /build.bat: -------------------------------------------------------------------------------- 1 | mvn clean package -Dmaven.test.skip=true 2 | -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | mvn clean package -Dmaven.test.skip=true 2 | -------------------------------------------------------------------------------- /cms-boot-web/.mvn/build.sh: -------------------------------------------------------------------------------- 1 | mvn clean package -Dmaven.test.skip=true 2 | -------------------------------------------------------------------------------- /cms-boot-web/.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myxzjie/cms/9f2ff021896fe350768b787cb4d1824dad24e4f2/cms-boot-web/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /cms-boot-web/.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip 2 | wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar 3 | -------------------------------------------------------------------------------- /cms-boot-web/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:11.0.15-jre 2 | 3 | MAINTAINER Vito 513961835@qq.com 4 | 5 | RUN mkdir -p /cms-boot-web 6 | 7 | WORKDIR /cms-boot-web 8 | VOLUME /tmp 9 | 10 | ENV TZ=Asia/Shanghai 11 | RUN ln -sf /usr/share/zoneinfo/{TZ} /etc/localtime && echo "{TZ}" > /etc/timezone 12 | 13 | COPY ./target/cms-boot-web.jar /cms-boot-web/app.jar 14 | #ADD agent/ /agent 15 | CMD ["java", "-version"] 16 | ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/cms-boot-web/app.jar"] 17 | #ENTRYPOINT ["java", "-javaagent:/agent/skywalking-agent.jar", "-Dskywalking.agent.service_name=febs-gateway", "-Dskywalking.collector.backend_service=${skywalking.url}:11800", "-jar", "/febs/febs-gateway-1.4-RELEASE.jar"] 18 | -------------------------------------------------------------------------------- /cms-boot-web/build.sh: -------------------------------------------------------------------------------- 1 | mvn clean package -Dmaven.test.skip=true 2 | -------------------------------------------------------------------------------- /cms-boot-web/docker-build.sh: -------------------------------------------------------------------------------- 1 | mvn clean package docker:build -Dmaven.test.skip=true 2 | -------------------------------------------------------------------------------- /cms-boot-web/docker/cms-admin/config.js: -------------------------------------------------------------------------------- 1 | window.g = { 2 | baseURL: 'http://localhost:8091/api' 3 | } -------------------------------------------------------------------------------- /cms-boot-web/docker/cms-web/config.js: -------------------------------------------------------------------------------- 1 | window.g = { 2 | baseURL: 'http://localhost:8092/app' 3 | } -------------------------------------------------------------------------------- /cms-boot-web/docker/mysql/conf/my.cnf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myxzjie/cms/9f2ff021896fe350768b787cb4d1824dad24e4f2/cms-boot-web/docker/mysql/conf/my.cnf -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/WebApplication.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.data.jpa.repository.config.EnableJpaAuditing; 6 | 7 | @EnableJpaAuditing 8 | @SpringBootApplication 9 | public class WebApplication { 10 | 11 | public static void main(String[] args) { 12 | SpringApplication.run(WebApplication.class, args); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/ad/convert/AdConverter.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.ad.convert; 2 | 3 | import com.xzjie.cms.ad.model.Ad; 4 | import com.xzjie.cms.ad.vo.AdVo; 5 | import com.xzjie.cms.core.convert.Converter; 6 | import org.mapstruct.Mapper; 7 | import org.mapstruct.ReportingPolicy; 8 | import org.mapstruct.factory.Mappers; 9 | 10 | @Mapper(componentModel = Converter.componentModel, uses = {}, unmappedTargetPolicy = ReportingPolicy.IGNORE) 11 | public interface AdConverter extends Converter { 12 | AdConverter INSTANCE = Mappers.getMapper(AdConverter.class); 13 | } 14 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/ad/model/AdSense.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.ad.model; 2 | 3 | import lombok.Data; 4 | 5 | import javax.persistence.Entity; 6 | import javax.persistence.Table; 7 | import java.io.Serializable; 8 | 9 | @Data 10 | //@Entity 11 | //@Table(name = "sys_account_role") 12 | public class AdSense implements Serializable { 13 | private Long id; 14 | 15 | private Long fromAd; 16 | 17 | private String referer; 18 | 19 | private Integer clicks; 20 | 21 | public Long getId() { 22 | return id; 23 | } 24 | 25 | public void setId(Long id) { 26 | this.id = id; 27 | } 28 | 29 | public Long getFromAd() { 30 | return fromAd; 31 | } 32 | 33 | public void setFromAd(Long fromAd) { 34 | this.fromAd = fromAd; 35 | } 36 | 37 | public String getReferer() { 38 | return referer; 39 | } 40 | 41 | public void setReferer(String referer) { 42 | this.referer = referer == null ? null : referer.trim(); 43 | } 44 | 45 | public Integer getClicks() { 46 | return clicks; 47 | } 48 | 49 | public void setClicks(Integer clicks) { 50 | this.clicks = clicks; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/ad/repository/AdPositionRepository.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.ad.repository; 2 | 3 | import com.xzjie.cms.ad.model.AdPosition; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.data.jpa.repository.JpaSpecificationExecutor; 6 | 7 | public interface AdPositionRepository extends JpaRepository, JpaSpecificationExecutor { 8 | AdPosition findAdPositionByPositionCode(String positionCode); 9 | } 10 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/ad/repository/AdRepository.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.ad.repository; 2 | 3 | import com.xzjie.cms.ad.model.Ad; 4 | import com.xzjie.cms.core.repository.BaseRepository; 5 | import org.springframework.data.jpa.repository.JpaRepository; 6 | import org.springframework.data.jpa.repository.JpaSpecificationExecutor; 7 | 8 | import java.util.List; 9 | 10 | public interface AdRepository extends BaseRepository { 11 | 12 | List findAdByPositionIdAndEnabled(Long positionId, boolean enabled); 13 | 14 | default List findAdByPositionId(Long positionId) { 15 | return findAdByPositionIdAndEnabled(positionId, true); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/ad/service/AdService.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.ad.service; 2 | 3 | import com.xzjie.cms.ad.dto.AdDto; 4 | import com.xzjie.cms.ad.model.Ad; 5 | import com.xzjie.cms.ad.vo.AdVo; 6 | import com.xzjie.cms.core.PageResult; 7 | import com.xzjie.cms.core.service.BaseService; 8 | import com.xzjie.cms.ad.dto.AdPositionDto; 9 | 10 | import com.xzjie.cms.ad.model.AdPosition; 11 | import org.springframework.data.domain.Page; 12 | 13 | import java.util.List; 14 | 15 | /** 16 | * Created by xzjie on 2017/7/2. 17 | */ 18 | public interface AdService extends BaseService { 19 | 20 | PageResult getAdPage(AdDto request); 21 | 22 | /** 23 | * 分页获得广告位置 24 | * 25 | * @param query 26 | * @return 27 | */ 28 | Page getPosition(AdPositionDto query); 29 | 30 | /** 31 | * 通过广告位置ID获得广告数据 32 | * 33 | * @param positionCode 34 | * @return 35 | */ 36 | List getAdByPositionCode(String positionCode); 37 | 38 | boolean savePosition(AdPosition position); 39 | 40 | boolean updatePosition(AdPosition position); 41 | 42 | boolean deletePosition(Long id); 43 | 44 | 45 | List getPositionData(); 46 | } 47 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/ad/vo/AdVo.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.ad.vo; 2 | 3 | import com.xzjie.cms.ad.model.Ad; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | 7 | /** 8 | * @author vito 9 | * @date : 2022/9/22 11:21 AM 10 | */ 11 | @Data 12 | public class AdVo extends Ad { 13 | @ApiModelProperty("广告位名称") 14 | private String positionCode; 15 | @ApiModelProperty("广告位名称") 16 | private String positionName; 17 | } 18 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/article/convert/CategoryConverter.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.article.convert; 2 | 3 | import com.xzjie.cms.article.dto.CateDto; 4 | import com.xzjie.cms.article.vo.CaseVo; 5 | import com.xzjie.cms.core.convert.Converter; 6 | import com.xzjie.cms.article.model.Category; 7 | import org.mapstruct.Mapper; 8 | import org.mapstruct.ReportingPolicy; 9 | import org.mapstruct.factory.Mappers; 10 | 11 | @Mapper(componentModel = Converter.componentModel, uses = {}, unmappedTargetPolicy = ReportingPolicy.IGNORE) 12 | public interface CategoryConverter extends Converter { 13 | //静态方法 14 | CategoryConverter INSTANCE = Mappers.getMapper(CategoryConverter.class); 15 | 16 | Category convert(CateDto source); 17 | } 18 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/article/dto/ArticleDto.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.article.dto; 2 | 3 | import com.xzjie.cms.dto.BasePageDto; 4 | import com.xzjie.cms.enums.Sorting; 5 | import com.xzjie.cms.article.model.Article; 6 | import lombok.Data; 7 | import org.springframework.beans.BeanUtils; 8 | 9 | import javax.validation.constraints.NotBlank; 10 | import javax.validation.constraints.NotNull; 11 | import java.util.List; 12 | 13 | @Data 14 | public class ArticleDto extends BasePageDto { 15 | 16 | @NotBlank(message = "标题不能为空") 17 | private String title; 18 | @NotNull(message = "类型不能为空") 19 | private Long categoryId; 20 | 21 | private String author; 22 | 23 | private String image; 24 | 25 | private String keywords; 26 | 27 | private String description; 28 | 29 | private Integer recommendStat; 30 | 31 | private Integer showState; 32 | @NotNull(message = "内容不能为空") 33 | private String content; 34 | 35 | private Sorting sorting; 36 | @NotNull(message = "标签不能为空") 37 | private List labels; 38 | 39 | public Article toArticle() { 40 | Article article = new Article(); 41 | BeanUtils.copyProperties(this, article); 42 | return article; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/article/dto/ArticleQueryDto.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.article.dto; 2 | 3 | import com.xzjie.cms.core.persistence.annotation.QueryCondition; 4 | import com.xzjie.cms.dto.BasePageDto; 5 | import lombok.Data; 6 | 7 | import java.util.List; 8 | 9 | @Data 10 | public class ArticleQueryDto extends BasePageDto { 11 | 12 | @QueryCondition(blurry = {"title", "keywords", "description"}) 13 | private String title; 14 | @QueryCondition 15 | private Long categoryId; 16 | 17 | @QueryCondition 18 | private Integer recommendStat; 19 | 20 | private List labelIds; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/article/dto/ArticleRecommendStatResult.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.article.dto; 2 | 3 | import com.fasterxml.jackson.annotation.JsonFormat; 4 | import com.fasterxml.jackson.databind.annotation.JsonSerialize; 5 | import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; 6 | import lombok.AllArgsConstructor; 7 | import lombok.Data; 8 | import lombok.NoArgsConstructor; 9 | 10 | import java.io.Serializable; 11 | import java.time.LocalDateTime; 12 | 13 | /** 14 | * @author Vito 15 | * @since 2022/1/10 3:24 下午 16 | */ 17 | @Data 18 | @NoArgsConstructor 19 | @AllArgsConstructor 20 | public class ArticleRecommendStatResult implements Serializable { 21 | private Long id; 22 | private Long articleId; 23 | private String title; 24 | private Integer sort; 25 | 26 | @JsonSerialize(using = LocalDateTimeSerializer.class) 27 | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS") 28 | private LocalDateTime createDate; 29 | } 30 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/article/dto/CateDto.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.article.dto; 2 | 3 | import com.xzjie.cms.article.model.Category; 4 | import com.xzjie.cms.dto.BasePageDto; 5 | import lombok.Data; 6 | import org.springframework.beans.BeanUtils; 7 | 8 | import javax.validation.constraints.NotBlank; 9 | 10 | @Data 11 | public class CateDto extends BasePageDto { 12 | 13 | private Long pid; 14 | 15 | @NotBlank 16 | private String categoryName; 17 | 18 | private String image; 19 | 20 | private String url; 21 | 22 | private String target; 23 | 24 | private String keywords; 25 | 26 | private String description; 27 | 28 | private Integer sort; 29 | 30 | private Integer showState; 31 | 32 | public Category toCategory() { 33 | Category category = new Category(); 34 | BeanUtils.copyProperties(this, category); 35 | return category; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/article/dto/CategoryTree.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.article.dto; 2 | 3 | import com.xzjie.cms.dto.TreeNode; 4 | import lombok.Data; 5 | 6 | @Data 7 | public class CategoryTree extends TreeNode { 8 | 9 | private String categoryName; 10 | } 11 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/article/dto/SearchDto.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.article.dto; 2 | 3 | import com.xzjie.cms.dto.BasePageDto; 4 | import com.xzjie.cms.core.persistence.annotation.QueryCondition; 5 | import lombok.Data; 6 | 7 | /** 8 | * @author Vito 9 | * @since 2022/3/22 9:54 下午 10 | */ 11 | @Data 12 | public class SearchDto extends BasePageDto { 13 | @QueryCondition(blurry = {"title", "keywords", "description"}) 14 | private String wk; 15 | } 16 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/article/model/ArticleLabel.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.article.model; 2 | 3 | import lombok.Data; 4 | import org.hibernate.annotations.SQLDelete; 5 | import org.hibernate.annotations.Where; 6 | 7 | import javax.persistence.*; 8 | 9 | @Data 10 | @Entity 11 | @Table(name = "cms_article_label") 12 | @Where(clause = "state = 1") 13 | @SQLDelete(sql = "update cms_article_label set state = 0 where id = ?") 14 | public class ArticleLabel { 15 | 16 | @Id 17 | @GeneratedValue(strategy = GenerationType.IDENTITY) 18 | private Long id; 19 | 20 | private Long articleId; 21 | 22 | private Long labelId; 23 | } 24 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/article/model/Topic.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.article.model; 2 | 3 | import com.xzjie.cms.core.entity.BaseEntity; 4 | import lombok.Data; 5 | import org.hibernate.annotations.SQLDelete; 6 | import org.hibernate.annotations.Where; 7 | 8 | import javax.persistence.*; 9 | import java.time.LocalDateTime; 10 | 11 | @Data 12 | @Entity 13 | @Table(name = "cms_topic") 14 | @Where(clause = "state = 1") 15 | @SQLDelete(sql = "update cms_topic set state = 0 where id = ?") 16 | public class Topic extends BaseEntity { 17 | 18 | // @Id 19 | // @GeneratedValue(strategy = GenerationType.IDENTITY) 20 | // private Long id; 21 | 22 | private String topic; 23 | 24 | private String description; 25 | 26 | private String coverUrl; 27 | 28 | private Integer sort; 29 | 30 | private Integer recommendStat; 31 | 32 | private Integer state; 33 | 34 | private LocalDateTime createDate; 35 | 36 | private LocalDateTime updateDate; 37 | 38 | @Override 39 | public void copy(Topic obj) { 40 | 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/article/repository/ArticleLabelRepository.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.article.repository; 2 | 3 | import com.xzjie.cms.article.model.Article; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.data.jpa.repository.JpaSpecificationExecutor; 6 | import org.springframework.data.jpa.repository.Query; 7 | 8 | public interface ArticleLabelRepository extends JpaRepository, JpaSpecificationExecutor
{ 9 | 10 | @Query(nativeQuery = true, value = "select * from cms_article a where a.id < :#{#id} and category_id = :#{#categoryId} order by id desc limit 0,1") 11 | Article findByIdLessThanAndCategoryId(Long id, Long categoryId); 12 | 13 | @Query(nativeQuery = true, value = "select * from cms_article a where a.id > :#{#id} and category_id = :#{#categoryId} order by id desc limit 0,1") 14 | Article findByIdGreaterThanAndCategoryId(Long id, Long categoryId); 15 | } 16 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/article/repository/ArticleRecommendStatRepository.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.article.repository; 2 | 3 | import com.xzjie.cms.article.dto.ArticleRecommendStatResult; 4 | import com.xzjie.cms.article.model.ArticleHot; 5 | import com.xzjie.cms.article.model.ArticleRecommendStat; 6 | import org.springframework.data.domain.Page; 7 | import org.springframework.data.domain.Pageable; 8 | import org.springframework.data.jpa.repository.JpaRepository; 9 | import org.springframework.data.jpa.repository.JpaSpecificationExecutor; 10 | import org.springframework.data.jpa.repository.Query; 11 | 12 | 13 | public interface ArticleRecommendStatRepository extends JpaRepository, JpaSpecificationExecutor { 14 | 15 | @Query(value = "SELECT new com.xzjie.cms.article.dto.ArticleRecommendStatResult(b.id,b.articleId,a.title,b.sort,b.createDate) FROM ArticleRecommendStat b, Article a where a.id = b.articleId") 16 | Page findArticleRecommendStat(Pageable pageable); 17 | 18 | // ArticleHot findByArticleId(Long ArticleId); 19 | 20 | boolean existsByArticleId(Long articleId); 21 | } 22 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/article/repository/CategoryRepository.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.article.repository; 2 | 3 | import com.xzjie.cms.article.model.Category; 4 | import org.springframework.data.domain.Page; 5 | import org.springframework.data.domain.Pageable; 6 | import org.springframework.data.jpa.repository.JpaRepository; 7 | import org.springframework.data.jpa.repository.JpaSpecificationExecutor; 8 | 9 | import java.util.List; 10 | 11 | public interface CategoryRepository extends JpaRepository, JpaSpecificationExecutor { 12 | 13 | List findCategoriesByPid(Long pid); 14 | 15 | default List findCategoriesByPidOrderBySort(Long pid) { 16 | return findCategoriesByPidAndShowStateOrderBySort(pid, 1); 17 | } 18 | 19 | List findCategoriesByPidAndShowStateOrderBySort(Long pid, Integer showState); 20 | 21 | Page findCategoriesByPid(Long pid, Pageable pageable); 22 | 23 | // List findCategoryById(Long id); 24 | } 25 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/article/vo/ArticleCateVo.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.article.vo; 2 | 3 | import com.xzjie.cms.article.model.Article; 4 | import com.xzjie.cms.article.model.Category; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Builder; 7 | import lombok.Data; 8 | import lombok.NoArgsConstructor; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * @author vito(xiaozijie) 14 | * @since 2023/8/17 12:55 PM 15 | */ 16 | @Data 17 | @Builder 18 | @NoArgsConstructor 19 | @AllArgsConstructor 20 | public class ArticleCateVo { 21 | private Category category; 22 | private List fathers; 23 | private List
articles; 24 | private Long total; 25 | } 26 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/article/vo/ArticleDetailVo.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.article.vo; 2 | 3 | import com.xzjie.cms.article.model.Article; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | @Data 9 | @NoArgsConstructor 10 | @AllArgsConstructor 11 | public class ArticleDetailVo { 12 | private Article article; 13 | private Article prev; 14 | private Article next; 15 | 16 | public static ArticleDetailVo create(Article article, Article prev, Article next) { 17 | return new ArticleDetailVo(article, prev, next); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/article/vo/CaseVo.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.article.vo; 2 | 3 | import com.xzjie.cms.article.model.Article; 4 | import lombok.Data; 5 | 6 | import java.time.LocalDateTime; 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | 10 | @Data 11 | public class CaseVo { 12 | private Long id; 13 | 14 | private Long pid; 15 | 16 | private String categoryName; 17 | 18 | private String image; 19 | 20 | private String url; 21 | 22 | private String target; 23 | 24 | private String keywords; 25 | 26 | private String description; 27 | 28 | private Integer sort; 29 | 30 | private Integer state; 31 | 32 | private LocalDateTime createDate; 33 | 34 | private LocalDateTime updateDate; 35 | 36 | private Integer showState; 37 | 38 | private List
articles = new ArrayList<>(); 39 | } 40 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/article/vo/CateFatherVo.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.article.vo; 2 | 3 | import com.xzjie.cms.article.model.Category; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Builder; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * @author vito(xiaozijie) 13 | * @since 2023/8/18 8:28 AM 14 | */ 15 | @Data 16 | @Builder 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | public class CateFatherVo { 20 | private Category father; 21 | private List categories; 22 | } 23 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/article/vo/CategoriesVo.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.article.vo; 2 | 3 | import com.xzjie.cms.article.model.Category; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Builder; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * @author vito(xiaozijie) 13 | * @since 2023/8/17 1:04 PM 14 | */ 15 | @Data 16 | @Builder 17 | @NoArgsConstructor 18 | @AllArgsConstructor 19 | public class CategoriesVo { 20 | private Category cate; 21 | private List categories; 22 | } 23 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/client/web/AppAdController.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.client.web; 2 | 3 | import com.xzjie.cms.ad.model.Ad; 4 | import com.xzjie.cms.ad.service.AdService; 5 | import com.xzjie.cms.core.Result; 6 | import io.swagger.annotations.Api; 7 | import io.swagger.annotations.ApiOperation; 8 | import io.swagger.annotations.ApiParam; 9 | import org.springframework.beans.factory.annotation.Autowired; 10 | import org.springframework.web.bind.annotation.GetMapping; 11 | import org.springframework.web.bind.annotation.PathVariable; 12 | import org.springframework.web.bind.annotation.RequestMapping; 13 | import org.springframework.web.bind.annotation.RestController; 14 | 15 | import java.util.List; 16 | 17 | @Api(value = "前端-广告管理", tags = "前端-广告管理") 18 | @RestController 19 | @RequestMapping("/app/ad") 20 | public class AppAdController { 21 | 22 | @Autowired 23 | private AdService adService; 24 | 25 | @ApiOperation(value = "前端-广告位的数据列表", notes = "查询广告位的相关数据列表", response = Ad.class) 26 | @GetMapping("/data/{positionCode}") 27 | public Result> getAdPositionData(@PathVariable @ApiParam("广告位code") String positionCode) { 28 | List ads = adService.getAdByPositionCode(positionCode); 29 | return Result.data(ads); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/client/web/AppNoticeController.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.client.web; 2 | 3 | import com.xzjie.cms.core.Result; 4 | import com.xzjie.cms.notice.model.Notice; 5 | import com.xzjie.cms.notice.service.NoticeService; 6 | import io.swagger.annotations.Api; 7 | import io.swagger.annotations.ApiOperation; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.web.bind.annotation.GetMapping; 10 | import org.springframework.web.bind.annotation.RequestMapping; 11 | import org.springframework.web.bind.annotation.RestController; 12 | 13 | import java.util.List; 14 | 15 | /** 16 | * @author vito 17 | * @date : 2022/9/23 2:23 PM 18 | */ 19 | @Api(value = "前端-通知管理", tags = "前端-通知管理") 20 | @RestController 21 | @RequestMapping("/app/notice") 22 | public class AppNoticeController { 23 | 24 | @Autowired 25 | private NoticeService noticeService; 26 | 27 | @ApiOperation("获得通知数据") 28 | @GetMapping("/data") 29 | public Result> getNoticeList() { 30 | return Result.data(noticeService.getNotices()); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/configure/AsyncProperties.java: -------------------------------------------------------------------------------- 1 | //package com.xzjie.cms.configure; 2 | // 3 | //import lombok.Data; 4 | //import org.springframework.boot.context.properties.ConfigurationProperties; 5 | //import org.springframework.context.annotation.Configuration; 6 | //import org.springframework.scheduling.annotation.EnableAsync; 7 | // 8 | //@Data 9 | //@EnableAsync 10 | //@Configuration 11 | //@ConfigurationProperties(prefix = "async.executor.thread") 12 | //public class AsyncProperties { 13 | // 14 | // // 配置核心线程数 15 | // private int corePoolSize; 16 | // // 配置最大线程数 17 | // private int maxPoolSize; 18 | // // 配置队列大小 19 | // private int queueCapacity; 20 | // // 配置线程池中的线程的名称前缀 21 | // private String namePrefix; 22 | //} 23 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/configure/CmsProperties.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.configure; 2 | 3 | import io.jsonwebtoken.SignatureAlgorithm; 4 | import lombok.Data; 5 | import org.springframework.boot.context.properties.ConfigurationProperties; 6 | import org.springframework.context.annotation.Configuration; 7 | 8 | @Data 9 | @Configuration 10 | @ConfigurationProperties(prefix = CmsProperties.PREFIX) 11 | public class CmsProperties { 12 | public static final String PREFIX = "cms.host"; 13 | 14 | private String url; 15 | private String systemUrl; 16 | private Integer webUrl; 17 | } 18 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/configure/MultipartConfigure.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.configure; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.beans.factory.annotation.Value; 5 | import org.springframework.boot.web.servlet.MultipartConfigFactory; 6 | import org.springframework.context.annotation.Bean; 7 | import org.springframework.context.annotation.Configuration; 8 | 9 | import javax.servlet.MultipartConfigElement; 10 | import java.io.File; 11 | 12 | @Configuration 13 | public class MultipartConfigure { 14 | @Autowired 15 | private LocationProperties properties; 16 | 17 | /** 18 | * 文件上传临时路径 19 | */ 20 | @Bean 21 | MultipartConfigElement multipartConfigElement() { 22 | MultipartConfigFactory factory = new MultipartConfigFactory(); 23 | String location = properties.getLocationDirectory(); 24 | File tmpFile = new File(location); 25 | if (!tmpFile.exists()) { 26 | tmpFile.mkdirs(); 27 | } 28 | factory.setLocation(location); 29 | return factory.createMultipartConfig(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/configure/SecurityProperties.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.configure; 2 | 3 | import io.jsonwebtoken.SignatureAlgorithm; 4 | import lombok.Data; 5 | import org.springframework.boot.context.properties.ConfigurationProperties; 6 | import org.springframework.context.annotation.Configuration; 7 | 8 | @Data 9 | @Configuration 10 | @ConfigurationProperties(prefix = SecurityProperties.PREFIX) 11 | public class SecurityProperties { 12 | public static final String PREFIX = "auth.jwt"; 13 | 14 | private SignatureAlgorithm algorithm; 15 | private String secret; 16 | private Integer expired; 17 | private String keyAlias; 18 | private String keyStore; 19 | private String keyPassword; 20 | private String keyStorePassword; 21 | } 22 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/configure/UploadProperties.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.configure; 2 | 3 | import com.xzjie.cms.enums.UploadType; 4 | import lombok.Data; 5 | import org.springframework.boot.context.properties.ConfigurationProperties; 6 | import org.springframework.context.annotation.Configuration; 7 | 8 | @Data 9 | @Configuration 10 | @ConfigurationProperties(prefix = "upload") 11 | public class UploadProperties { 12 | 13 | private UploadType type; 14 | } 15 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/core/ObjectConvertUtils.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.core; 2 | 3 | import org.springframework.beans.BeanUtils; 4 | import org.springframework.beans.BeanWrapper; 5 | import org.springframework.beans.BeanWrapperImpl; 6 | 7 | import java.util.HashSet; 8 | import java.util.Set; 9 | 10 | /** 11 | * @author vito 12 | * @date : 2022/9/14 10:23 PM 13 | */ 14 | public class ObjectConvertUtils { 15 | 16 | public static void copy(Object source, Object target) { 17 | BeanUtils.copyProperties(source, target, getIgnoreProperty(source)); 18 | } 19 | 20 | private static String[] getIgnoreProperty(Object source) { 21 | final BeanWrapper src = new BeanWrapperImpl(source); 22 | java.beans.PropertyDescriptor[] pds = src.getPropertyDescriptors(); 23 | 24 | Set emptyNames = new HashSet(); 25 | for (java.beans.PropertyDescriptor pd : pds) { 26 | Object srcValue = src.getPropertyValue(pd.getName()); 27 | if (srcValue == null) emptyNames.add(pd.getName()); 28 | } 29 | String[] result = new String[emptyNames.size()]; 30 | return emptyNames.toArray(result); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/core/PageResult.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.core; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | import org.springframework.data.domain.Page; 8 | 9 | import java.util.LinkedHashMap; 10 | import java.util.List; 11 | import java.util.Map; 12 | 13 | /** 14 | * @author vito 15 | * @date : 2022/9/22 11:23 AM 16 | */ 17 | @Data 18 | @Builder 19 | @NoArgsConstructor 20 | @AllArgsConstructor 21 | public class PageResult { 22 | private List content; 23 | private Long total; 24 | 25 | public static PageResult toPage(List content, Long total) { 26 | return PageResult.builder() 27 | .content(content) 28 | .total(total).build(); 29 | } 30 | 31 | public static PageResult toPage(Page page) { 32 | return PageResult.builder() 33 | .content(page.getContent()) 34 | .total(page.getTotalElements()).build(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/core/SFunction.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.core; 2 | 3 | import java.io.Serializable; 4 | import java.util.function.Function; 5 | 6 | @FunctionalInterface 7 | public interface SFunction extends Function, Serializable { 8 | } 9 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/core/annotation/Log.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.core.annotation; 2 | 3 | import java.lang.annotation.*; 4 | 5 | //元注解,定义注解被保留策略,一般有三种策略 6 | //1、RetentionPolicy.SOURCE 注解只保留在源文件中,在编译成class文件的时候被遗弃 7 | //2、RetentionPolicy.CLASS 注解被保留在class中,但是在jvm加载的时候北欧抛弃,这个是默认的声明周期 8 | //3、RetentionPolicy.RUNTIME 注解在jvm加载的时候仍被保留 9 | @Retention(RetentionPolicy.RUNTIME) 10 | @Target({ElementType.METHOD}) //定义了注解声明在哪些元素之前 11 | @Documented 12 | public @interface Log { 13 | /** 14 | * 15 | * @return 16 | */ 17 | String value() default ""; 18 | 19 | /** 20 | * 21 | * @return 22 | */ 23 | String descrption() default ""; 24 | } 25 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/core/convert/Converter.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.core.convert; 2 | 3 | import java.util.List; 4 | 5 | public interface Converter { 6 | String componentModel = "spring"; 7 | 8 | T target(S source); 9 | 10 | S source(T target); 11 | 12 | List target(List source); 13 | 14 | List source(List target); 15 | } 16 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/core/event/SystemLogEvent.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.core.event; 2 | 3 | import org.springframework.context.ApplicationEvent; 4 | 5 | public class SystemLogEvent extends ApplicationEvent { 6 | public SystemLogEvent(Object source) { 7 | super(source); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/core/persistence/Criteria.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.core.persistence; 2 | 3 | import com.xzjie.cms.core.persistence.enums.ConditionType; 4 | import com.xzjie.cms.core.persistence.enums.SpecType; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Builder; 7 | import lombok.Data; 8 | import lombok.NoArgsConstructor; 9 | 10 | import javax.persistence.criteria.JoinType; 11 | 12 | /** 13 | * @author vito 14 | * @date : 2022/9/23 9:22 PM 15 | */ 16 | @Data 17 | @Builder 18 | @NoArgsConstructor 19 | @AllArgsConstructor 20 | public class Criteria { 21 | private String attribute; 22 | private Object value; 23 | 24 | private String[] blurry; 25 | 26 | private ConditionType connect = ConditionType.EQUAL; 27 | 28 | private SpecType specsType = SpecType.AND; 29 | 30 | /** 31 | * join查询 32 | * 33 | * @return 34 | */ 35 | private JoinType joinType = JoinType.INNER; 36 | 37 | /** 38 | * join表名对象 39 | * 40 | * @return 41 | */ 42 | private String table; 43 | } 44 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/core/persistence/Specifications.java: -------------------------------------------------------------------------------- 1 | //package com.xzjie.cms.core.persistence; 2 | // 3 | //import com.xzjie.cms.core.persistence.enums.SpecType; 4 | // 5 | ///** 6 | // * @author vito 7 | // * @date : 2022/9/26 12:57 AM 8 | // */ 9 | //public class Specifications { 10 | // public static SpecificationUtils and() { 11 | // return new SpecificationUtils<>(SpecType.AND); 12 | // } 13 | // 14 | // public static SpecificationUtils or() { 15 | // return new SpecificationUtils<>(SpecType.OR); 16 | // } 17 | //} 18 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/core/persistence/annotation/QueryCondition.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.core.persistence.annotation; 2 | 3 | import com.xzjie.cms.core.persistence.enums.ConditionType; 4 | import com.xzjie.cms.core.persistence.enums.Join; 5 | 6 | import javax.persistence.criteria.JoinType; 7 | import java.lang.annotation.ElementType; 8 | import java.lang.annotation.Retention; 9 | import java.lang.annotation.RetentionPolicy; 10 | import java.lang.annotation.Target; 11 | 12 | @Retention(RetentionPolicy.RUNTIME) 13 | @Target(ElementType.FIELD) 14 | public @interface QueryCondition { 15 | String value() default ""; 16 | 17 | String[] blurry() default {}; 18 | 19 | ConditionType connect() default ConditionType.EQUAL; 20 | 21 | // join 22 | 23 | /** 24 | * join查询 25 | * @return 26 | */ 27 | JoinType joinType() default JoinType.INNER; 28 | 29 | /** 30 | * join表名对象 31 | * @return 32 | */ 33 | String table() default ""; 34 | } 35 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/core/persistence/enums/ConditionType.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.core.persistence.enums; 2 | 3 | public enum ConditionType { 4 | EQUAL, 5 | // 下面四个用于Number类型的比较 6 | 7 | GT, 8 | 9 | GE, 10 | 11 | LT, 12 | 13 | LE, 14 | 15 | NOT_EQUAL, 16 | 17 | LIKE, 18 | 19 | NOT_LIKE, 20 | // 下面四个用于可比较类型(Comparable)的比较 21 | 22 | GREATER_THAN, 23 | 24 | GREATER_THAN_OR_EQUAL_TO, 25 | 26 | LESS_THAN, 27 | 28 | LESS_THAN_OR_EQUAL_TO 29 | } 30 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/core/persistence/enums/Join.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.core.persistence.enums; 2 | /** 3 | * @author vito 4 | * @since 2022/9/23 5:27 PM 5 | */ 6 | public enum Join { 7 | INNER, 8 | LEFT, 9 | RIGHT; 10 | } 11 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/core/persistence/enums/SpecType.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.core.persistence.enums; 2 | 3 | /** 4 | * @author vito 5 | * @date : 2022/9/24 11:13 AM 6 | */ 7 | public enum SpecType { 8 | /** 9 | * sql 链接属性 and 10 | */ 11 | AND, 12 | 13 | /** 14 | * sql 链接属性 or 15 | */ 16 | OR; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/core/repository/BaseRepository.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.core.repository; 2 | 3 | import com.xzjie.cms.core.entity.BaseEntity; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.data.jpa.repository.JpaSpecificationExecutor; 6 | import org.springframework.data.repository.NoRepositoryBean; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * @author vito 12 | * @date : 2022/9/23 12:26 PM 13 | */ 14 | @NoRepositoryBean 15 | public interface BaseRepository extends JpaRepository, JpaSpecificationExecutor { 16 | 17 | // Page> findPageMap(Pageable pageable); 18 | } 19 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/core/service/BaseService.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.core.service; 2 | 3 | import java.util.List; 4 | 5 | public interface BaseService { 6 | 7 | S save(S entity); 8 | 9 | S update(S entity); 10 | 11 | boolean delete(Long id); 12 | 13 | List getAll(); 14 | 15 | T getById(Long id); 16 | } 17 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/core/utils/I18Utils.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.core.utils; 2 | 3 | import org.springframework.context.MessageSource; 4 | import org.springframework.context.i18n.LocaleContextHolder; 5 | 6 | public class I18Utils { 7 | 8 | private static MessageSource source; 9 | 10 | public static MessageSource getSource() { 11 | return source; 12 | } 13 | 14 | public static void setMessageSource(MessageSource messageSource) { 15 | source = messageSource; 16 | } 17 | 18 | public static String getMessage(Integer code) { 19 | return source.getMessage(code.toString(), null, LocaleContextHolder.getLocale()); 20 | } 21 | 22 | public static String getMessage(Integer code, String... params) { 23 | return source.getMessage(code.toString(), params, LocaleContextHolder.getLocale()); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/core/utils/ResultCode.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.core.utils; 2 | 3 | public final class ResultCode { 4 | private Integer success = 0; 5 | private Integer error = 99999; 6 | } 7 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/dict/model/KeyData.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.dict.model; 2 | 3 | import com.xzjie.cms.core.entity.BaseEntity; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import org.hibernate.annotations.CreationTimestamp; 7 | import org.hibernate.annotations.UpdateTimestamp; 8 | 9 | import javax.persistence.*; 10 | import java.time.LocalDateTime; 11 | 12 | @Data 13 | @Entity 14 | @Table(name = "sys_key_data") 15 | @NoArgsConstructor 16 | public class KeyData extends BaseEntity { 17 | // @Id 18 | // @GeneratedValue(strategy = GenerationType.IDENTITY) 19 | // private Long id; 20 | 21 | @Column(name = "`key`") 22 | private String key; 23 | 24 | @Column(name = "`data`", columnDefinition = "json") 25 | private String data; 26 | 27 | @Column(name = "create_date") 28 | @CreationTimestamp 29 | private LocalDateTime createDate; 30 | 31 | @Column(name = "update_date") 32 | @UpdateTimestamp 33 | private LocalDateTime updateDate; 34 | 35 | @Override 36 | public void copy(KeyData obj) { 37 | copyProperties(obj, this); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/dict/repository/KeyDataRepository.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.dict.repository; 2 | 3 | import com.xzjie.cms.core.repository.BaseRepository; 4 | import com.xzjie.cms.dict.model.KeyData; 5 | 6 | public interface KeyDataRepository extends BaseRepository { 7 | 8 | KeyData findByKey(String key); 9 | 10 | boolean existsByKey(String key); 11 | } 12 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/dict/service/KeyDataService.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.dict.service; 2 | 3 | import com.xzjie.cms.core.service.BaseService; 4 | import com.xzjie.cms.dict.model.KeyData; 5 | 6 | public interface KeyDataService extends BaseService { 7 | 8 | KeyData getKeyDataByKey(String key); 9 | 10 | boolean existsByKey(String key); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/dto/AuthResponse.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.dto; 2 | 3 | import lombok.Data; 4 | import lombok.NoArgsConstructor; 5 | 6 | @Data 7 | @NoArgsConstructor 8 | public class AuthResponse { 9 | private String accessToken; 10 | private String tokenType = "Bearer"; 11 | 12 | public AuthResponse(String accessToken) { 13 | this.accessToken = accessToken; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/dto/BasePageDto.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.dto; 2 | 3 | import com.xzjie.cms.enums.Sorting; 4 | import lombok.Data; 5 | 6 | @Data 7 | public class BasePageDto extends Dto { 8 | private Integer page = 0; 9 | private Integer size = 15; 10 | private Sorting sorting; 11 | 12 | public void setPage(Integer page) { 13 | if (page > 0) this.page = page - 1; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/dto/BinderUserDto.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.dto; 2 | 3 | import lombok.Data; 4 | 5 | import javax.validation.constraints.NotBlank; 6 | 7 | /** 8 | * @author Vito 9 | * @since 2022/6/16 3:17 下午 10 | */ 11 | @Data 12 | public class BinderUserDto { 13 | @NotBlank 14 | private String code; 15 | @NotBlank 16 | private String name; 17 | @NotBlank 18 | private String email; 19 | } 20 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/dto/Dto.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.dto; 2 | 3 | /** 4 | * @author Vito 5 | * @since 2022/3/6 11:45 下午 6 | */ 7 | public class Dto { 8 | public @interface Create {} 9 | public @interface Update {} 10 | } 11 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/dto/EmailRequest.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.dto; 2 | 3 | import lombok.Data; 4 | 5 | import javax.validation.constraints.NotBlank; 6 | 7 | @Data 8 | public class EmailRequest { 9 | 10 | private String code; 11 | @NotBlank 12 | private String email; 13 | 14 | private String password; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/dto/NodeTree.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.dto; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | 10 | 11 | @Data 12 | @NoArgsConstructor 13 | @AllArgsConstructor 14 | public class NodeTree { 15 | 16 | private Long id; 17 | 18 | private String label; 19 | 20 | private List children = new ArrayList<>(); 21 | } 22 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/dto/PasswordRequest.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.dto; 2 | 3 | import io.swagger.annotations.ApiModelProperty; 4 | import lombok.Data; 5 | 6 | import javax.validation.constraints.NotBlank; 7 | 8 | @Data 9 | public class PasswordRequest { 10 | @NotBlank(message = "原密码不能为空") 11 | @ApiModelProperty("原密码") 12 | private String oldPassword; 13 | @NotBlank(message = "新密码不能为空") 14 | @ApiModelProperty("新密码") 15 | private String password; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/dto/ResetPasswordDto.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.dto; 2 | 3 | import io.swagger.annotations.ApiModelProperty; 4 | import lombok.Data; 5 | 6 | import javax.validation.constraints.NotBlank; 7 | import javax.validation.constraints.NotNull; 8 | 9 | @Data 10 | public class ResetPasswordDto { 11 | @NotNull(message = "用户ID不能为空") 12 | @ApiModelProperty("用户ID") 13 | private Long userId; 14 | } 15 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/dto/RoleRequest.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.dto; 2 | 3 | import com.xzjie.cms.system.role.model.Role; 4 | import lombok.Data; 5 | import org.springframework.beans.BeanUtils; 6 | 7 | import javax.validation.constraints.NotBlank; 8 | import java.util.List; 9 | 10 | @Data 11 | public class RoleRequest extends BasePageDto { 12 | private Long id; 13 | 14 | @NotBlank 15 | private String roleCode; 16 | 17 | @NotBlank 18 | private String roleName; 19 | 20 | private Integer roleLevel; 21 | 22 | private String roleDesc; 23 | 24 | private List menus; 25 | 26 | public Role toRole() { 27 | Role role = new Role(); 28 | BeanUtils.copyProperties(this, role); 29 | return role; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/dto/TreeNode.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.dto; 2 | 3 | import io.swagger.annotations.ApiModelProperty; 4 | import lombok.Data; 5 | 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | 9 | @Data 10 | public class TreeNode { 11 | @ApiModelProperty(value = "id", notes = "id") 12 | public Long id; 13 | 14 | @ApiModelProperty(value = "父ID", notes = "父ID") 15 | private Long parentId; 16 | 17 | @ApiModelProperty(value = "子节点", notes = "子节点") 18 | private List children = new ArrayList<>(); 19 | } 20 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/dto/ValidatorDto.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.dto; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author Vito 7 | * @since 2022/6/16 2:10 下午 8 | */ 9 | @Data 10 | public class ValidatorDto { 11 | private String name; 12 | } 13 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/enums/HttpProtocol.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.enums; 2 | 3 | 4 | import java.util.regex.Matcher; 5 | import java.util.regex.Pattern; 6 | 7 | public enum HttpProtocol { 8 | HTTP, HTTPS; 9 | 10 | public static HttpProtocol match(String url) { 11 | if (url == null || url == "") { 12 | return null; 13 | } 14 | Pattern pattern = Pattern.compile("(http|https):\\/\\/([\\w.]+\\/?)\\S*"); 15 | Matcher matcher = pattern.matcher(url); 16 | if (matcher.matches()) { 17 | if (url.startsWith("https:") || url.startsWith("HTTPS:")) { 18 | return HTTPS; 19 | } else if (url.startsWith("http:") || url.startsWith("http:")) { 20 | return HTTP; 21 | } 22 | } 23 | return null; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/enums/KeyDataKey.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.enums; 2 | 3 | import lombok.Getter; 4 | 5 | @Getter 6 | public enum KeyDataKey { 7 | wechat_menus, 8 | wechat_setting; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/enums/MassMsgType.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.enums; 2 | 3 | public enum MassMsgType { 4 | mpnews, 5 | text, 6 | voice, 7 | image, 8 | mpvideo, 9 | } 10 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/enums/MediaFileType.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.enums; 2 | 3 | public enum MediaFileType { 4 | // 图片 5 | image, 6 | // 语音 7 | voice, 8 | //视频 9 | video, 10 | // 和缩略图 11 | thumb 12 | } 13 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/enums/QiniuRegion.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.enums; 2 | 3 | import lombok.Getter; 4 | 5 | @Getter 6 | public enum QiniuRegion { 7 | auto("自由"), 8 | HUADONG("华东"), 9 | HUABEI("华北"), 10 | HUANAN("华南"), 11 | BEIMEI("北美"), 12 | XINJIAPO("东南亚"); 13 | 14 | private String name; 15 | 16 | QiniuRegion(String name) { 17 | this.name = name; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/enums/RoleType.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.enums; 2 | 3 | import lombok.Getter; 4 | 5 | /** 6 | * @author Vito 7 | * @since 2022/3/23 11:08 下午 8 | */ 9 | @Getter 10 | public enum RoleType { 11 | ADMINISTRATOR("administrator", "超级管理员"), 12 | ADMIN("admin", "管理员"), 13 | MEMBER("member", "普通会员"); 14 | 15 | private String code; 16 | private String name; 17 | 18 | RoleType(String code, String name) { 19 | this.code = code; 20 | this.name = name; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/enums/Sorting.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.enums; 2 | 3 | public enum Sorting { 4 | asc, 5 | desc 6 | } 7 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/enums/StateType.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.enums; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * @author Vito 8 | * @since 2022/3/6 11:55 下午 9 | */ 10 | @Getter 11 | @AllArgsConstructor 12 | public enum StateType { 13 | INVALID(0, "失效"), 14 | NORMAL(1, "正常"); 15 | 16 | private Integer code; 17 | private String name; 18 | } 19 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/enums/UploadType.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.enums; 2 | 3 | public enum UploadType { 4 | 5 | LOCAL, ALIYUN, QINIU, MINIO 6 | } 7 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/enums/VerifyCodeScenes.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.enums; 2 | 3 | import lombok.Getter; 4 | 5 | @Getter 6 | public enum VerifyCodeScenes { 7 | 8 | EMAIL_CHANGE("更换邮箱"), 9 | BINDER("绑定第三方登录验证"), 10 | 11 | RESET_PASSWORD("重置密码"); 12 | 13 | private String name; 14 | 15 | VerifyCodeScenes(String name) { 16 | this.name = name; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/enums/VerifyCodeType.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.enums; 2 | 3 | public enum VerifyCodeType { 4 | EMAIL, 5 | PHONE 6 | } 7 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/exception/BusinessException.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.exception; 2 | 3 | public class BusinessException extends RuntimeException { 4 | public BusinessException(){ 5 | super(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/exception/WxMpException.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.exception; 2 | 3 | import com.xzjie.cms.wechat.dto.WxMpError; 4 | import lombok.Getter; 5 | 6 | @Getter 7 | public class WxMpException extends RuntimeException { 8 | 9 | private WxMpError error; 10 | 11 | public WxMpException(WxMpError error) { 12 | super(error.toString()); 13 | this.error = error; 14 | } 15 | 16 | public WxMpException(WxMpError error, Throwable cause) { 17 | super(error.toString(), cause); 18 | this.error = error; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/label/dto/LabelQueryDto.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.label.dto; 2 | 3 | import com.xzjie.cms.core.persistence.annotation.QueryCondition; 4 | import com.xzjie.cms.core.persistence.enums.ConditionType; 5 | import com.xzjie.cms.dto.BasePageDto; 6 | import lombok.Data; 7 | 8 | @Data 9 | public class LabelQueryDto extends BasePageDto { 10 | @QueryCondition(connect = ConditionType.LIKE) 11 | private String name; 12 | } 13 | -------------------------------------------------------------------------------- /cms-boot-web/src/main/java/com/xzjie/cms/label/repository/LabelRepository.java: -------------------------------------------------------------------------------- 1 | package com.xzjie.cms.label.repository; 2 | 3 | import com.xzjie.cms.core.repository.BaseRepository; 4 | import com.xzjie.cms.label.model.Label; 5 | import com.xzjie.cms.vo.LabelVo; 6 | import org.springframework.data.jpa.repository.Query; 7 | 8 | import java.util.List; 9 | 10 | public interface LabelRepository extends BaseRepository { 11 | 12 | @Query(nativeQuery = true, value = "select * from cms_label a inner join cms_article_label b on a.id= b.label_id where b.article_id =#{#articleId}") 13 | List