├── .gitignore ├── LICENSE ├── README.md ├── image ├── 00.png ├── 01.png ├── 02.png ├── 03.png ├── 04.png ├── 05.png ├── 06.png ├── 07.png ├── 08.png ├── 09.png ├── 10.png ├── 11.png ├── 12.png ├── 13.png ├── deploy-01.png ├── mcp-01.png ├── mcp-02.png ├── mcp-03.png ├── mcp-04.png ├── qq-msg.png ├── qq.png ├── wx.png └── 教程搭建.png ├── pom.xml ├── ruoyi-admin ├── pom.xml └── src │ └── main │ ├── java │ └── org │ │ └── ruoyi │ │ ├── RuoYiAIApplication.java │ │ ├── RuoYiAIServletInitializer.java │ │ └── controller │ │ ├── AuthController.java │ │ ├── CaptchaController.java │ │ └── IndexController.java │ └── resources │ ├── application-dev.yml │ ├── application.yml │ ├── banner.txt │ ├── i18n │ ├── messages.properties │ ├── messages_en_US.properties │ └── messages_zh_CN.properties │ ├── ip2region.xdb │ ├── logback-plus.xml │ ├── mcp-server.json │ ├── spy.properties │ └── static │ └── favicon.ico ├── ruoyi-common ├── pom.xml ├── ruoyi-common-bom │ └── pom.xml ├── ruoyi-common-chat │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── ruoyi │ │ │ └── common │ │ │ └── chat │ │ │ ├── config │ │ │ ├── LocalCache.java │ │ │ ├── WebSocketConfig.java │ │ │ └── properties │ │ │ │ └── WebSocketProperties.java │ │ │ ├── constant │ │ │ ├── OpenAIConst.java │ │ │ └── WebSocketConstants.java │ │ │ ├── entity │ │ │ ├── Tts │ │ │ │ ├── TextToSpeech.java │ │ │ │ ├── TtsFormat.java │ │ │ │ └── TtsVoice.java │ │ │ ├── billing │ │ │ │ ├── BillingUsage.java │ │ │ │ ├── CreditGrantsResponse.java │ │ │ │ ├── DailyCost.java │ │ │ │ ├── Datum.java │ │ │ │ ├── Grants.java │ │ │ │ ├── KeyInfo.java │ │ │ │ ├── LineItem.java │ │ │ │ ├── Plan.java │ │ │ │ └── Subscription.java │ │ │ ├── chat │ │ │ │ ├── BaseChatCompletion.java │ │ │ │ ├── BaseMessage.java │ │ │ │ ├── ChatChoice.java │ │ │ │ ├── ChatCompletion.java │ │ │ │ ├── ChatCompletionResponse.java │ │ │ │ ├── ChatCompletionWithPicture.java │ │ │ │ ├── Content.java │ │ │ │ ├── FunctionCall.java │ │ │ │ ├── Functions.java │ │ │ │ ├── ImageUrl.java │ │ │ │ ├── Message.java │ │ │ │ ├── MessagePicture.java │ │ │ │ ├── Parameters.java │ │ │ │ ├── ResponseFormat.java │ │ │ │ └── tool │ │ │ │ │ ├── ToolCallFunction.java │ │ │ │ │ ├── ToolCalls.java │ │ │ │ │ ├── ToolChoice.java │ │ │ │ │ ├── ToolChoiceObj.java │ │ │ │ │ ├── ToolChoiceObjFunction.java │ │ │ │ │ ├── Tools.java │ │ │ │ │ └── ToolsFunction.java │ │ │ ├── common │ │ │ │ ├── Choice.java │ │ │ │ ├── DeleteResponse.java │ │ │ │ ├── OpenAiResponse.java │ │ │ │ └── Usage.java │ │ │ ├── completions │ │ │ │ ├── Completion.java │ │ │ │ └── CompletionResponse.java │ │ │ ├── dto │ │ │ │ └── WebSocketMessageDto.java │ │ │ ├── edits │ │ │ │ ├── Edit.java │ │ │ │ └── EditResponse.java │ │ │ ├── embeddings │ │ │ │ ├── Embedding.java │ │ │ │ ├── EmbeddingResponse.java │ │ │ │ └── Item.java │ │ │ ├── engines │ │ │ │ └── Engine.java │ │ │ ├── files │ │ │ │ ├── File.java │ │ │ │ └── UploadFileResponse.java │ │ │ ├── fineTune │ │ │ │ ├── Event.java │ │ │ │ ├── FineTune.java │ │ │ │ ├── FineTuneDeleteResponse.java │ │ │ │ ├── FineTuneResponse.java │ │ │ │ ├── HyperParam.java │ │ │ │ └── TrainingFile.java │ │ │ ├── images │ │ │ │ ├── Image.java │ │ │ │ ├── ImageEdit.java │ │ │ │ ├── ImageResponse.java │ │ │ │ ├── ImageVariations.java │ │ │ │ ├── Item.java │ │ │ │ ├── ResponseFormat.java │ │ │ │ └── SizeEnum.java │ │ │ ├── models │ │ │ │ ├── LocalModelsSearchRequest.java │ │ │ │ ├── LocalModelsSearchResponse.java │ │ │ │ ├── Model.java │ │ │ │ ├── ModelResponse.java │ │ │ │ └── Permission.java │ │ │ ├── moderations │ │ │ │ ├── Categories.java │ │ │ │ ├── CategoryScores.java │ │ │ │ ├── Moderation.java │ │ │ │ ├── ModerationResponse.java │ │ │ │ └── Result.java │ │ │ └── whisper │ │ │ │ ├── Transcriptions.java │ │ │ │ ├── Translations.java │ │ │ │ ├── Whisper.java │ │ │ │ └── WhisperResponse.java │ │ │ ├── handler │ │ │ └── PlusWebSocketHandler.java │ │ │ ├── holder │ │ │ └── WebSocketSessionHolder.java │ │ │ ├── interceptor │ │ │ └── PlusWebSocketInterceptor.java │ │ │ ├── listener │ │ │ ├── WebSocketEventListener.java │ │ │ └── WebSocketTopicListener.java │ │ │ ├── openai │ │ │ ├── OpenAiApi.java │ │ │ ├── OpenAiClient.java │ │ │ ├── OpenAiStreamClient.java │ │ │ ├── TestOpenAIAPI.java │ │ │ ├── exception │ │ │ │ ├── CommonError.java │ │ │ │ └── IError.java │ │ │ ├── function │ │ │ │ ├── KeyRandomStrategy.java │ │ │ │ └── KeyStrategyFunction.java │ │ │ ├── interceptor │ │ │ │ ├── DefaultOpenAiAuthInterceptor.java │ │ │ │ ├── DynamicKeyOpenAiAuthInterceptor.java │ │ │ │ ├── OpenAILogger.java │ │ │ │ ├── OpenAiAuthInterceptor.java │ │ │ │ └── OpenAiResponseInterceptor.java │ │ │ └── plugin │ │ │ │ ├── PluginAbstract.java │ │ │ │ └── PluginParam.java │ │ │ ├── request │ │ │ ├── ChatRequest.java │ │ │ └── Dall3Request.java │ │ │ ├── sse │ │ │ ├── ConsoleEventSourceListener.java │ │ │ ├── DefaultPluginListener.java │ │ │ └── PluginListener.java │ │ │ └── utils │ │ │ ├── TikTokensUtil.java │ │ │ └── WebSocketUtils.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── ruoyi-common-core │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── ruoyi │ │ │ └── common │ │ │ └── core │ │ │ ├── config │ │ │ ├── ApplicationConfig.java │ │ │ ├── AsyncConfig.java │ │ │ ├── RuoYiConfig.java │ │ │ ├── ThreadPoolConfig.java │ │ │ ├── ValidatorConfig.java │ │ │ └── properties │ │ │ │ └── ThreadPoolProperties.java │ │ │ ├── constant │ │ │ ├── CacheConstants.java │ │ │ ├── CacheNames.java │ │ │ ├── Constants.java │ │ │ ├── GlobalConstants.java │ │ │ ├── HttpStatus.java │ │ │ ├── RegexConstants.java │ │ │ ├── SystemConstants.java │ │ │ ├── TenantConstants.java │ │ │ └── UserConstants.java │ │ │ ├── domain │ │ │ ├── R.java │ │ │ ├── dto │ │ │ │ ├── RoleDTO.java │ │ │ │ └── UserOnlineDTO.java │ │ │ └── model │ │ │ │ ├── EmailLoginBody.java │ │ │ │ ├── LoginBody.java │ │ │ │ ├── LoginUser.java │ │ │ │ ├── RegisterBody.java │ │ │ │ ├── SmsLoginBody.java │ │ │ │ ├── VisitorLoginBody.java │ │ │ │ └── VisitorLoginUser.java │ │ │ ├── enums │ │ │ ├── DeviceType.java │ │ │ ├── LoginType.java │ │ │ ├── LoginUserType.java │ │ │ ├── TenantStatus.java │ │ │ ├── UserStatus.java │ │ │ └── UserType.java │ │ │ ├── event │ │ │ └── ConfigChangeEvent.java │ │ │ ├── exception │ │ │ ├── AuthException.java │ │ │ ├── DemoModeException.java │ │ │ ├── GlobalException.java │ │ │ ├── ServiceException.java │ │ │ ├── UtilException.java │ │ │ ├── base │ │ │ │ └── BaseException.java │ │ │ ├── file │ │ │ │ ├── FileException.java │ │ │ │ ├── FileNameLengthLimitExceededException.java │ │ │ │ └── FileSizeLimitExceededException.java │ │ │ └── user │ │ │ │ ├── CaptchaException.java │ │ │ │ ├── CaptchaExpireException.java │ │ │ │ ├── UserException.java │ │ │ │ ├── UserPasswordNotMatchException.java │ │ │ │ └── UserPasswordRetryLimitExceedException.java │ │ │ ├── factory │ │ │ ├── RegexPatternPoolFactory.java │ │ │ └── YmlPropertySourceFactory.java │ │ │ ├── manager │ │ │ └── ShutdownManager.java │ │ │ ├── service │ │ │ ├── ConfigService.java │ │ │ ├── DeptService.java │ │ │ ├── DictService.java │ │ │ ├── OssService.java │ │ │ └── UserService.java │ │ │ ├── utils │ │ │ ├── DateUtils.java │ │ │ ├── JsonUtils.java │ │ │ ├── MapstructUtils.java │ │ │ ├── MessageUtils.java │ │ │ ├── ObjectUtils.java │ │ │ ├── OkHttpUtil.java │ │ │ ├── ServletUtils.java │ │ │ ├── SpringUtils.java │ │ │ ├── StreamUtils.java │ │ │ ├── StringUtils.java │ │ │ ├── Threads.java │ │ │ ├── TreeBuildUtils.java │ │ │ ├── ValidatorUtils.java │ │ │ ├── file │ │ │ │ ├── FileUtils.java │ │ │ │ └── MimeTypeUtils.java │ │ │ ├── ip │ │ │ │ ├── AddressUtils.java │ │ │ │ └── RegionUtils.java │ │ │ ├── reflect │ │ │ │ └── ReflectUtils.java │ │ │ └── sql │ │ │ │ └── SqlUtil.java │ │ │ ├── validate │ │ │ ├── AddGroup.java │ │ │ ├── EditGroup.java │ │ │ └── QueryGroup.java │ │ │ └── xss │ │ │ ├── Xss.java │ │ │ └── XssValidator.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── ruoyi-common-doc │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── ruoyi │ │ │ └── common │ │ │ └── doc │ │ │ ├── config │ │ │ ├── SpringDocConfig.java │ │ │ └── properties │ │ │ │ └── SpringDocProperties.java │ │ │ └── handler │ │ │ └── OpenApiHandler.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── ruoyi-common-encrypt │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── ruoyi │ │ │ └── common │ │ │ └── encrypt │ │ │ ├── annotation │ │ │ └── EncryptField.java │ │ │ ├── config │ │ │ └── EncryptorAutoConfiguration.java │ │ │ ├── core │ │ │ ├── EncryptContext.java │ │ │ ├── EncryptorManager.java │ │ │ ├── IEncryptor.java │ │ │ └── encryptor │ │ │ │ ├── AbstractEncryptor.java │ │ │ │ ├── AesEncryptor.java │ │ │ │ ├── Base64Encryptor.java │ │ │ │ ├── RsaEncryptor.java │ │ │ │ ├── Sm2Encryptor.java │ │ │ │ └── Sm4Encryptor.java │ │ │ ├── enumd │ │ │ ├── AlgorithmType.java │ │ │ └── EncodeType.java │ │ │ ├── interceptor │ │ │ ├── MybatisDecryptInterceptor.java │ │ │ └── MybatisEncryptInterceptor.java │ │ │ ├── properties │ │ │ └── EncryptorProperties.java │ │ │ └── utils │ │ │ └── EncryptUtils.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── ruoyi-common-excel │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── ruoyi │ │ └── common │ │ └── excel │ │ ├── annotation │ │ ├── CellMerge.java │ │ ├── ExcelDictFormat.java │ │ └── ExcelEnumFormat.java │ │ ├── convert │ │ ├── ExcelBigNumberConvert.java │ │ ├── ExcelDictConvert.java │ │ └── ExcelEnumConvert.java │ │ ├── core │ │ ├── CellMergeStrategy.java │ │ ├── DefaultExcelListener.java │ │ ├── DefaultExcelResult.java │ │ ├── ExcelListener.java │ │ └── ExcelResult.java │ │ └── utils │ │ └── ExcelUtil.java ├── ruoyi-common-idempotent │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── ruoyi │ │ │ └── common │ │ │ └── idempotent │ │ │ ├── annotation │ │ │ └── RepeatSubmit.java │ │ │ ├── aspectj │ │ │ └── RepeatSubmitAspect.java │ │ │ └── config │ │ │ └── IdempotentConfig.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── ruoyi-common-json │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── ruoyi │ │ │ └── common │ │ │ └── json │ │ │ ├── config │ │ │ └── JacksonConfig.java │ │ │ ├── handler │ │ │ └── BigNumberSerializer.java │ │ │ └── utils │ │ │ └── JsonUtils.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── ruoyi-common-log │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── ruoyi │ │ │ └── common │ │ │ └── log │ │ │ ├── annotation │ │ │ └── Log.java │ │ │ ├── aspect │ │ │ └── LogAspect.java │ │ │ ├── enums │ │ │ ├── BusinessStatus.java │ │ │ ├── BusinessType.java │ │ │ └── OperatorType.java │ │ │ └── event │ │ │ ├── LogininforEvent.java │ │ │ └── OperLogEvent.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── ruoyi-common-mail │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── ruoyi │ │ │ └── common │ │ │ └── mail │ │ │ ├── config │ │ │ └── MailConfig.java │ │ │ ├── properties │ │ │ └── MailProperties.java │ │ │ └── utils │ │ │ ├── GlobalMailAccount.java │ │ │ ├── InternalMailUtil.java │ │ │ ├── Mail.java │ │ │ ├── MailAccount.java │ │ │ ├── MailException.java │ │ │ ├── MailUtils.java │ │ │ └── UserPassAuthenticator.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── ruoyi-common-mybatis │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── ruoyi │ │ │ ├── annotation │ │ │ ├── DataColumn.java │ │ │ └── DataPermission.java │ │ │ ├── aspect │ │ │ └── DataPermissionAspect.java │ │ │ ├── config │ │ │ └── MybatisPlusConfig.java │ │ │ ├── core │ │ │ ├── domain │ │ │ │ └── BaseEntity.java │ │ │ ├── mapper │ │ │ │ └── BaseMapperPlus.java │ │ │ └── page │ │ │ │ ├── PageQuery.java │ │ │ │ └── TableDataInfo.java │ │ │ ├── enums │ │ │ ├── DataBaseType.java │ │ │ └── DataScopeType.java │ │ │ ├── handler │ │ │ ├── InjectionMetaObjectHandler.java │ │ │ ├── MybatisExceptionHandler.java │ │ │ ├── PlusDataPermissionHandler.java │ │ │ └── PlusPostInitTableInfoHandler.java │ │ │ ├── helper │ │ │ ├── DataBaseHelper.java │ │ │ └── DataPermissionHelper.java │ │ │ └── interceptor │ │ │ └── PlusDataPermissionInterceptor.java │ │ └── resources │ │ ├── META-INF │ │ └── spring │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── common-mybatis.yml │ │ └── spy.properties ├── ruoyi-common-oss │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── ruoyi │ │ └── common │ │ └── oss │ │ ├── constant │ │ └── OssConstant.java │ │ ├── core │ │ └── OssClient.java │ │ ├── entity │ │ └── UploadResult.java │ │ ├── enumd │ │ ├── AccessPolicyType.java │ │ └── PolicyType.java │ │ ├── exception │ │ └── OssException.java │ │ ├── factory │ │ └── OssFactory.java │ │ └── properties │ │ └── OssProperties.java ├── ruoyi-common-pay │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── ruoyi │ │ └── common │ │ ├── config │ │ ├── PayConfig.java │ │ └── PayInit.java │ │ ├── response │ │ └── PayResponse.java │ │ ├── service │ │ ├── PayService.java │ │ └── impl │ │ │ └── PayServiceImpl.java │ │ └── utils │ │ └── MD5Util.java ├── ruoyi-common-ratelimiter │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── ruoyi │ │ │ └── common │ │ │ └── ratelimiter │ │ │ ├── annotation │ │ │ └── RateLimiter.java │ │ │ ├── aspectj │ │ │ └── RateLimiterAspect.java │ │ │ ├── config │ │ │ └── RateLimiterConfig.java │ │ │ └── enums │ │ │ └── LimitType.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── ruoyi-common-redis │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── ruoyi │ │ │ └── common │ │ │ └── redis │ │ │ ├── config │ │ │ ├── RedisConfig.java │ │ │ └── properties │ │ │ │ └── RedissonProperties.java │ │ │ ├── handler │ │ │ └── KeyPrefixHandler.java │ │ │ ├── manager │ │ │ └── PlusSpringCacheManager.java │ │ │ └── utils │ │ │ ├── CacheUtils.java │ │ │ ├── QueueUtils.java │ │ │ └── RedisUtils.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── ruoyi-common-satoken │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── ruoyi │ │ │ └── common │ │ │ └── satoken │ │ │ ├── config │ │ │ └── SaTokenConfig.java │ │ │ ├── core │ │ │ ├── dao │ │ │ │ └── PlusSaTokenDao.java │ │ │ └── service │ │ │ │ └── SaPermissionImpl.java │ │ │ ├── listener │ │ │ └── UserActionListener.java │ │ │ └── utils │ │ │ └── LoginHelper.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── ruoyi-common-security │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── ruoyi │ │ │ └── common │ │ │ └── security │ │ │ ├── config │ │ │ ├── SecurityConfig.java │ │ │ └── properties │ │ │ │ └── SecurityProperties.java │ │ │ └── handler │ │ │ ├── AllUrlHandler.java │ │ │ └── GlobalExceptionHandler.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── ruoyi-common-sensitive │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── ruoyi │ │ └── common │ │ └── sensitive │ │ ├── annotation │ │ └── Sensitive.java │ │ ├── core │ │ ├── SensitiveService.java │ │ └── SensitiveStrategy.java │ │ └── handler │ │ └── SensitiveHandler.java ├── ruoyi-common-sms │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── ruoyi │ │ │ └── common │ │ │ └── sms │ │ │ ├── config │ │ │ ├── SmsConfig.java │ │ │ └── properties │ │ │ │ └── SmsProperties.java │ │ │ ├── core │ │ │ ├── AliyunSmsTemplate.java │ │ │ ├── SmsTemplate.java │ │ │ └── TencentSmsTemplate.java │ │ │ ├── entity │ │ │ └── SmsResult.java │ │ │ └── exception │ │ │ └── SmsException.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── ruoyi-common-tenant │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── ruoyi │ │ │ └── common │ │ │ └── tenant │ │ │ ├── config │ │ │ └── TenantConfig.java │ │ │ ├── core │ │ │ ├── TenantEntity.java │ │ │ └── TenantSaTokenDao.java │ │ │ ├── exception │ │ │ └── TenantException.java │ │ │ ├── handle │ │ │ ├── PlusTenantLineHandler.java │ │ │ └── TenantKeyPrefixHandler.java │ │ │ ├── helper │ │ │ └── TenantHelper.java │ │ │ ├── manager │ │ │ └── TenantSpringCacheManager.java │ │ │ └── properties │ │ │ └── TenantProperties.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── ruoyi-common-translation │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── ruoyi │ │ │ └── common │ │ │ └── translation │ │ │ ├── annotation │ │ │ ├── Translation.java │ │ │ └── TranslationType.java │ │ │ ├── config │ │ │ └── TranslationConfig.java │ │ │ ├── constant │ │ │ └── TransConstant.java │ │ │ └── core │ │ │ ├── TranslationInterface.java │ │ │ ├── handler │ │ │ ├── TranslationBeanSerializerModifier.java │ │ │ └── TranslationHandler.java │ │ │ └── impl │ │ │ ├── DeptNameTranslationImpl.java │ │ │ ├── DictTypeTranslationImpl.java │ │ │ ├── OssUrlTranslationImpl.java │ │ │ └── UserNameTranslationImpl.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports └── ruoyi-common-web │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── org │ │ └── ruoyi │ │ └── common │ │ └── web │ │ ├── config │ │ ├── CaptchaConfig.java │ │ ├── FilterConfig.java │ │ ├── I18nConfig.java │ │ ├── ResourcesConfig.java │ │ ├── UndertowConfig.java │ │ └── properties │ │ │ ├── CaptchaProperties.java │ │ │ └── XssProperties.java │ │ ├── core │ │ ├── BaseController.java │ │ └── I18nLocaleResolver.java │ │ ├── enums │ │ ├── CaptchaCategory.java │ │ └── CaptchaType.java │ │ ├── filter │ │ ├── RepeatableFilter.java │ │ ├── RepeatedlyRequestWrapper.java │ │ ├── XssFilter.java │ │ └── XssHttpServletRequestWrapper.java │ │ ├── interceptor │ │ └── PlusWebInvokeTimeInterceptor.java │ │ └── utils │ │ └── UnsignedMathGenerator.java │ └── resources │ └── META-INF │ └── spring │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── ruoyi-extend ├── pom.xml └── ruoyi-mcp-server │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── org │ │ └── ruoyi │ │ └── mcpserve │ │ ├── RuoyiMcpServeApplication.java │ │ └── service │ │ └── ToolService.java │ └── resources │ └── application.yml ├── ruoyi-modules-api ├── pom.xml ├── ruoyi-chat-api │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── ruoyi │ │ │ ├── domain │ │ │ ├── ChatMessage.java │ │ │ ├── ChatModel.java │ │ │ ├── ChatPayOrder.java │ │ │ ├── ChatSession.java │ │ │ ├── ChatToken.java │ │ │ ├── ChatUsageToken.java │ │ │ ├── bo │ │ │ │ ├── ChatMessageBo.java │ │ │ │ ├── ChatModelBo.java │ │ │ │ ├── ChatPayOrderBo.java │ │ │ │ ├── ChatSessionBo.java │ │ │ │ └── ChatUsageTokenBo.java │ │ │ └── vo │ │ │ │ ├── ChatMessageVo.java │ │ │ │ ├── ChatModelVo.java │ │ │ │ ├── ChatPayOrderVo.java │ │ │ │ ├── ChatSessionVo.java │ │ │ │ └── ChatUsageTokenVo.java │ │ │ ├── mapper │ │ │ ├── ChatMessageMapper.java │ │ │ ├── ChatModelMapper.java │ │ │ ├── ChatPayOrderMapper.java │ │ │ ├── ChatSessionMapper.java │ │ │ └── ChatUsageTokenMapper.java │ │ │ └── service │ │ │ ├── IChatMessageService.java │ │ │ ├── IChatModelService.java │ │ │ ├── IChatPayOrderService.java │ │ │ ├── IChatSessionService.java │ │ │ ├── IChatTokenService.java │ │ │ ├── IChatUsageTokenService.java │ │ │ └── impl │ │ │ ├── ChatMessageServiceImpl.java │ │ │ ├── ChatModelServiceImpl.java │ │ │ ├── ChatPayOrderServiceImpl.java │ │ │ ├── ChatSessionServiceImpl.java │ │ │ ├── ChatTokenServiceImpl.java │ │ │ └── ChatUsageTokenServiceImpl.java │ │ └── resources │ │ └── mapper │ │ ├── ChatMessageMapper.xml │ │ ├── ChatModelMapper.xml │ │ └── ChatPayOrderMapper.xml ├── ruoyi-knowledge-api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── ruoyi │ │ ├── chain │ │ ├── loader │ │ │ ├── CodeFileLoader.java │ │ │ ├── CsvFileLoader.java │ │ │ ├── FolderLoader.java │ │ │ ├── GithubLoader.java │ │ │ ├── JsonFileLoader.java │ │ │ ├── MarkDownFileLoader.java │ │ │ ├── PdfFileLoader.java │ │ │ ├── ResourceLoader.java │ │ │ ├── ResourceLoaderFactory.java │ │ │ ├── TextFileLoader.java │ │ │ └── WordLoader.java │ │ └── split │ │ │ ├── CharacterTextSplitter.java │ │ │ ├── CodeTextSplitter.java │ │ │ ├── MarkdownTextSplitter.java │ │ │ ├── TextSplitter.java │ │ │ └── TokenTextSplitter.java │ │ ├── constant │ │ └── FileType.java │ │ ├── domain │ │ ├── KnowledgeAttach.java │ │ ├── KnowledgeFragment.java │ │ ├── KnowledgeInfo.java │ │ ├── bo │ │ │ ├── KnowledgeAttachBo.java │ │ │ ├── KnowledgeFragmentBo.java │ │ │ ├── KnowledgeInfoBo.java │ │ │ ├── KnowledgeInfoUploadBo.java │ │ │ ├── QueryVectorBo.java │ │ │ └── StoreEmbeddingBo.java │ │ └── vo │ │ │ ├── KnowledgeAttachVo.java │ │ │ ├── KnowledgeFragmentVo.java │ │ │ └── KnowledgeInfoVo.java │ │ ├── mapper │ │ ├── KnowledgeAttachMapper.java │ │ ├── KnowledgeFragmentMapper.java │ │ └── KnowledgeInfoMapper.java │ │ └── service │ │ ├── IKnowledgeAttachService.java │ │ ├── IKnowledgeFragmentService.java │ │ ├── IKnowledgeInfoService.java │ │ ├── VectorStoreService.java │ │ └── impl │ │ ├── KnowledgeAttachServiceImpl.java │ │ ├── KnowledgeFragmentServiceImpl.java │ │ └── VectorStoreServiceImpl.java └── ruoyi-system-api │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── org │ │ └── ruoyi │ │ └── system │ │ ├── domain │ │ ├── ChatConfig.java │ │ ├── SysCache.java │ │ ├── SysConfig.java │ │ ├── SysDept.java │ │ ├── SysDictData.java │ │ ├── SysDictType.java │ │ ├── SysLogininfor.java │ │ ├── SysMenu.java │ │ ├── SysNotice.java │ │ ├── SysNoticeState.java │ │ ├── SysOperLog.java │ │ ├── SysOss.java │ │ ├── SysOssConfig.java │ │ ├── SysPost.java │ │ ├── SysRole.java │ │ ├── SysRoleDept.java │ │ ├── SysRoleMenu.java │ │ ├── SysTenant.java │ │ ├── SysTenantPackage.java │ │ ├── SysUser.java │ │ ├── SysUserOnline.java │ │ ├── SysUserPost.java │ │ ├── SysUserRole.java │ │ ├── bo │ │ │ ├── ChatConfigBo.java │ │ │ ├── SysConfigBo.java │ │ │ ├── SysDeptBo.java │ │ │ ├── SysDictDataBo.java │ │ │ ├── SysDictTypeBo.java │ │ │ ├── SysLogininforBo.java │ │ │ ├── SysMenuBo.java │ │ │ ├── SysNoticeBo.java │ │ │ ├── SysNoticeStateBo.java │ │ │ ├── SysOperLogBo.java │ │ │ ├── SysOssBo.java │ │ │ ├── SysOssConfigBo.java │ │ │ ├── SysPostBo.java │ │ │ ├── SysRoleBo.java │ │ │ ├── SysTenantBo.java │ │ │ ├── SysTenantPackageBo.java │ │ │ ├── SysUserBo.java │ │ │ ├── SysUserPasswordBo.java │ │ │ └── SysUserProfileBo.java │ │ ├── request │ │ │ ├── EmailRequest.java │ │ │ ├── OrderRequest.java │ │ │ └── UserRequest.java │ │ └── vo │ │ │ ├── AvatarVo.java │ │ │ ├── CacheListInfoVo.java │ │ │ ├── CaptchaVo.java │ │ │ ├── ChatConfigVo.java │ │ │ ├── DeptTreeSelectVo.java │ │ │ ├── LoginTenantVo.java │ │ │ ├── LoginVo.java │ │ │ ├── MenuTreeSelectVo.java │ │ │ ├── MetaVo.java │ │ │ ├── ProfileVo.java │ │ │ ├── RouterVo.java │ │ │ ├── SysConfigVo.java │ │ │ ├── SysDeptVo.java │ │ │ ├── SysDictDataVo.java │ │ │ ├── SysDictTypeVo.java │ │ │ ├── SysLogininforVo.java │ │ │ ├── SysMenuVo.java │ │ │ ├── SysNoticeStateVo.java │ │ │ ├── SysNoticeVo.java │ │ │ ├── SysOperLogVo.java │ │ │ ├── SysOssConfigVo.java │ │ │ ├── SysOssUploadVo.java │ │ │ ├── SysOssVo.java │ │ │ ├── SysPostVo.java │ │ │ ├── SysRoleVo.java │ │ │ ├── SysTenantPackageVo.java │ │ │ ├── SysTenantVo.java │ │ │ ├── SysUserExportVo.java │ │ │ ├── SysUserImportVo.java │ │ │ ├── SysUserInfoVo.java │ │ │ ├── SysUserOptionVo.java │ │ │ ├── SysUserVo.java │ │ │ ├── TenantListVo.java │ │ │ └── UserInfoVo.java │ │ ├── mapper │ │ ├── ChatConfigMapper.java │ │ ├── SysConfigMapper.java │ │ ├── SysDeptMapper.java │ │ ├── SysDictDataMapper.java │ │ ├── SysDictTypeMapper.java │ │ ├── SysLogininforMapper.java │ │ ├── SysMenuMapper.java │ │ ├── SysNoticeMapper.java │ │ ├── SysNoticeStateMapper.java │ │ ├── SysOperLogMapper.java │ │ ├── SysOssConfigMapper.java │ │ ├── SysOssMapper.java │ │ ├── SysPostMapper.java │ │ ├── SysRoleDeptMapper.java │ │ ├── SysRoleMapper.java │ │ ├── SysRoleMenuMapper.java │ │ ├── SysTenantMapper.java │ │ ├── SysTenantPackageMapper.java │ │ ├── SysUserMapper.java │ │ ├── SysUserPostMapper.java │ │ └── SysUserRoleMapper.java │ │ └── service │ │ ├── IChatConfigService.java │ │ ├── ISysConfigService.java │ │ ├── ISysDataScopeService.java │ │ ├── ISysDeptService.java │ │ ├── ISysDictDataService.java │ │ ├── ISysDictTypeService.java │ │ ├── ISysLogininforService.java │ │ ├── ISysMenuService.java │ │ ├── ISysNoticeService.java │ │ ├── ISysNoticeStateService.java │ │ ├── ISysOperLogService.java │ │ ├── ISysOssConfigService.java │ │ ├── ISysOssService.java │ │ ├── ISysPermissionService.java │ │ ├── ISysPostService.java │ │ ├── ISysRoleService.java │ │ ├── ISysTenantPackageService.java │ │ ├── ISysTenantService.java │ │ ├── ISysUserService.java │ │ └── impl │ │ ├── ChatConfigServiceImpl.java │ │ ├── SysConfigServiceImpl.java │ │ ├── SysDataScopeServiceImpl.java │ │ ├── SysDeptServiceImpl.java │ │ ├── SysDictDataServiceImpl.java │ │ ├── SysDictTypeServiceImpl.java │ │ ├── SysLogininforServiceImpl.java │ │ ├── SysMenuServiceImpl.java │ │ ├── SysNoticeServiceImpl.java │ │ ├── SysNoticeStateServiceImpl.java │ │ ├── SysOperLogServiceImpl.java │ │ ├── SysOssConfigServiceImpl.java │ │ ├── SysOssServiceImpl.java │ │ ├── SysPermissionServiceImpl.java │ │ ├── SysPostServiceImpl.java │ │ ├── SysRoleServiceImpl.java │ │ ├── SysSensitiveServiceImpl.java │ │ ├── SysTenantPackageServiceImpl.java │ │ ├── SysTenantServiceImpl.java │ │ └── SysUserServiceImpl.java │ └── resources │ └── mapper │ ├── SysConfigMapper.xml │ ├── SysDeptMapper.xml │ ├── SysDictDataMapper.xml │ ├── SysDictTypeMapper.xml │ ├── SysMenuMapper.xml │ ├── SysNoticeMapper.xml │ ├── SysNoticeStateMapper.xml │ ├── SysOperLogMapper.xml │ ├── SysOssConfigMapper.xml │ ├── SysOssMapper.xml │ ├── SysPostMapper.xml │ ├── SysRoleDeptMapper.xml │ ├── SysRoleMapper.xml │ ├── SysRoleMenuMapper.xml │ ├── SysTenantMapper.xml │ ├── SysTenantPackageMapper.xml │ ├── SysUserMapper.xml │ ├── SysUserPostMapper.xml │ └── SysUserRoleMapper.xml ├── ruoyi-modules ├── pom.xml ├── ruoyi-chat │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── org │ │ └── ruoyi │ │ └── chat │ │ ├── config │ │ ├── ChatConfig.java │ │ └── OkHttpConfig.java │ │ ├── controller │ │ ├── chat │ │ │ ├── ChatConfigController.java │ │ │ ├── ChatController.java │ │ │ ├── ChatMessageController.java │ │ │ ├── ChatModelController.java │ │ │ ├── ChatPayOrderController.java │ │ │ └── ChatSessionController.java │ │ ├── knowledge │ │ │ └── KnowledgeController.java │ │ └── tripartite │ │ │ ├── FaceController.java │ │ │ ├── LumaController.java │ │ │ ├── SubmitController.java │ │ │ ├── SunoController.java │ │ │ └── TaskController.java │ │ ├── domain │ │ ├── DomainObject.java │ │ ├── InsightFace.java │ │ ├── bo │ │ │ ├── GenerateLuma.java │ │ │ ├── GenerateLyric.java │ │ │ └── GenerateSuno.java │ │ └── dto │ │ │ ├── BaseSubmitDTO.java │ │ │ ├── SubmitActionDTO.java │ │ │ ├── SubmitBlendDTO.java │ │ │ ├── SubmitChangeDTO.java │ │ │ ├── SubmitDescribeDTO.java │ │ │ ├── SubmitImagineDTO.java │ │ │ ├── SubmitModalDTO.java │ │ │ ├── SubmitShortenDTO.java │ │ │ ├── SubmitSimpleChangeDTO.java │ │ │ └── TaskConditionDTO.java │ │ ├── enums │ │ ├── ActionType.java │ │ ├── BillingType.java │ │ ├── BlendDimensions.java │ │ ├── ChatModeType.java │ │ ├── DisplayType.java │ │ ├── TaskAction.java │ │ └── UserGradeType.java │ │ ├── factory │ │ └── ChatServiceFactory.java │ │ ├── listener │ │ └── SSEEventSourceListener.java │ │ ├── service │ │ ├── chat │ │ │ ├── IChatCostService.java │ │ │ ├── IChatService.java │ │ │ ├── ISseService.java │ │ │ └── impl │ │ │ │ ├── ChatCostServiceImpl.java │ │ │ │ ├── CozeServiceImpl.java │ │ │ │ ├── DeepSeekChatImpl.java │ │ │ │ ├── DifyServiceImpl.java │ │ │ │ ├── OllamaServiceImpl.java │ │ │ │ ├── OpenAIServiceImpl.java │ │ │ │ ├── QianWenAiChatServiceImpl.java │ │ │ │ ├── SseServiceImpl.java │ │ │ │ └── ZhipuAiChatServiceImpl.java │ │ └── knowledge │ │ │ └── KnowledgeInfoServiceImpl.java │ │ └── util │ │ ├── IpUtil.java │ │ ├── MjOkHttpUtil.java │ │ └── SSEUtil.java ├── ruoyi-generator │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── ruoyi │ │ │ └── generator │ │ │ ├── config │ │ │ └── GenConfig.java │ │ │ ├── constant │ │ │ └── GenConstants.java │ │ │ ├── controller │ │ │ └── GenController.java │ │ │ ├── domain │ │ │ ├── GenTable.java │ │ │ └── GenTableColumn.java │ │ │ ├── mapper │ │ │ ├── GenTableColumnMapper.java │ │ │ └── GenTableMapper.java │ │ │ ├── service │ │ │ ├── GenTableServiceImpl.java │ │ │ └── IGenTableService.java │ │ │ └── util │ │ │ ├── GenUtils.java │ │ │ ├── VelocityInitializer.java │ │ │ └── VelocityUtils.java │ │ └── resources │ │ ├── generator.yml │ │ ├── mapper │ │ ├── generator │ │ │ ├── GenTableColumnMapper.xml │ │ │ └── GenTableMapper.xml │ │ └── package-info.md │ │ └── vm │ │ ├── java │ │ ├── bo.java.vm │ │ ├── controller.java.vm │ │ ├── domain.java.vm │ │ ├── mapper.java.vm │ │ ├── service.java.vm │ │ ├── serviceImpl.java.vm │ │ └── vo.java.vm │ │ ├── js │ │ └── api.js.vm │ │ ├── sql │ │ ├── oracle │ │ │ └── sql.vm │ │ ├── postgres │ │ │ └── sql.vm │ │ ├── sql.vm │ │ └── sqlserver │ │ │ └── sql.vm │ │ ├── ts │ │ ├── api.ts.vm │ │ └── types.ts.vm │ │ ├── vue │ │ ├── index-tree.vue.vm │ │ └── index.vue.vm │ │ └── xml │ │ └── mapper.xml.vm └── ruoyi-system │ ├── pom.xml │ └── src │ └── main │ └── java │ └── org │ └── ruoyi │ └── system │ ├── controller │ ├── monitor │ │ ├── CacheController.java │ │ ├── SysLogininforController.java │ │ ├── SysOperlogController.java │ │ └── SysUserOnlineController.java │ └── system │ │ ├── SysConfigController.java │ │ ├── SysDeptController.java │ │ ├── SysDictDataController.java │ │ ├── SysDictTypeController.java │ │ ├── SysMenuController.java │ │ ├── SysNoticeController.java │ │ ├── SysNoticeStateController.java │ │ ├── SysOssConfigController.java │ │ ├── SysOssController.java │ │ ├── SysPostController.java │ │ ├── SysProfileController.java │ │ ├── SysRoleController.java │ │ ├── SysTenantController.java │ │ ├── SysTenantPackageController.java │ │ └── SysUserController.java │ ├── listener │ ├── CustomerBigDecimalSerialize.java │ └── SysUserImportListener.java │ ├── runner │ └── SystemApplicationRunner.java │ └── service │ ├── SysLoginService.java │ └── SysRegisterService.java └── script ├── deploy ├── Ruoyi-AI平台容器化构建与部署手册.docx ├── build-docker-images │ ├── Dockerfile-Resources │ │ ├── ruoyi-ai-admin │ │ │ ├── Dockerfile │ │ │ └── nginx.conf │ │ ├── ruoyi-ai-backend │ │ │ └── Dockerfile │ │ └── ruoyi-ai-web │ │ │ ├── Dockerfile │ │ │ └── nginx.conf │ ├── modify-source-code │ │ ├── ruoyi-ai-admin │ │ │ ├── .env │ │ │ ├── .env.analyze │ │ │ ├── .env.development │ │ │ ├── .env.production │ │ │ ├── .env.test │ │ │ └── vite.config.mts │ │ └── ruoyi-ai-backend │ │ │ └── application-prod.yml │ └── scripts │ │ ├── build-ruoyi-admin-image.sh │ │ ├── build-ruoyi-backend-image.sh │ │ ├── build-ruoyi-web-image.sh │ │ └── remove-blank.sh ├── deploy │ ├── .env │ ├── copy-mysql-init-script.sh │ ├── docker-compose.yaml │ ├── mysql-init │ │ └── ruoyi-ai.sql │ └── update_ruoyi-qi-sql.sh ├── one-step-script │ ├── deploy-cn.sh │ ├── deploy-en.sh │ ├── mysql-init │ │ └── ruoyi-ai.sql │ └── template │ │ ├── .env.template │ │ ├── application-prod.yml.template │ │ ├── docker-compose.yaml.template │ │ ├── nginx.admin.conf.template │ │ └── nginx.web.conf.template └── source-code │ ├── fetch-admin-source-code.sh │ ├── fetch-backend-source-code.sh │ └── fetch-web-source-code.sh ├── docker └── weaviate │ └── docker-compose.yml └── sql └── ruoyi-ai.sql /.gitignore: -------------------------------------------------------------------------------- 1 | ###################################################################### 2 | # Build Tools 3 | 4 | 5 | 6 | 7 | .gradle 8 | /build/ 9 | !gradle/wrapper/gradle-wrapper.jar 10 | 11 | target/ 12 | !.mvn/wrapper/maven-wrapper.jar 13 | 14 | ruoyi-modules/ruoyi-generator/src/main/resources/vm/vben5 15 | 16 | README.md 17 | 18 | ###################################################################### 19 | # IDE 20 | 21 | ### STS ### 22 | .apt_generated 23 | .classpath 24 | .factorypath 25 | .project 26 | .settings 27 | .springBeans 28 | 29 | ### IntelliJ IDEA ### 30 | .idea 31 | *.iws 32 | *.iml 33 | *.ipr 34 | 35 | ### JRebel ### 36 | rebel.xml 37 | 38 | ### NetBeans ### 39 | nbproject/private/ 40 | build/* 41 | nbbuild/ 42 | nbdist/ 43 | .nb-gradle/ 44 | 45 | ###################################################################### 46 | # Others 47 | *.log 48 | *.xml.versionsBackup 49 | *.swp 50 | 51 | !*/build/*.java 52 | !*/build/*.html 53 | !*/build/*.xml 54 | 55 | .flattened-pom.xml 56 | -------------------------------------------------------------------------------- /image/00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/image/00.png -------------------------------------------------------------------------------- /image/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/image/01.png -------------------------------------------------------------------------------- /image/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/image/02.png -------------------------------------------------------------------------------- /image/03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/image/03.png -------------------------------------------------------------------------------- /image/04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/image/04.png -------------------------------------------------------------------------------- /image/05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/image/05.png -------------------------------------------------------------------------------- /image/06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/image/06.png -------------------------------------------------------------------------------- /image/07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/image/07.png -------------------------------------------------------------------------------- /image/08.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/image/08.png -------------------------------------------------------------------------------- /image/09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/image/09.png -------------------------------------------------------------------------------- /image/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/image/10.png -------------------------------------------------------------------------------- /image/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/image/11.png -------------------------------------------------------------------------------- /image/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/image/12.png -------------------------------------------------------------------------------- /image/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/image/13.png -------------------------------------------------------------------------------- /image/deploy-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/image/deploy-01.png -------------------------------------------------------------------------------- /image/mcp-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/image/mcp-01.png -------------------------------------------------------------------------------- /image/mcp-02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/image/mcp-02.png -------------------------------------------------------------------------------- /image/mcp-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/image/mcp-03.png -------------------------------------------------------------------------------- /image/mcp-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/image/mcp-04.png -------------------------------------------------------------------------------- /image/qq-msg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/image/qq-msg.png -------------------------------------------------------------------------------- /image/qq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/image/qq.png -------------------------------------------------------------------------------- /image/wx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/image/wx.png -------------------------------------------------------------------------------- /image/教程搭建.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/image/教程搭建.png -------------------------------------------------------------------------------- /ruoyi-admin/src/main/java/org/ruoyi/RuoYiAIApplication.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup; 6 | import org.springframework.scheduling.annotation.EnableAsync; 7 | import org.springframework.scheduling.annotation.EnableScheduling; 8 | 9 | /** 10 | * 启动程序 11 | * 12 | * @author Lion Li 13 | */ 14 | @SpringBootApplication 15 | @EnableScheduling 16 | @EnableAsync 17 | public class RuoYiAIApplication { 18 | 19 | public static void main(String[] args) { 20 | SpringApplication application = new SpringApplication(RuoYiAIApplication.class); 21 | application.setApplicationStartup(new BufferingApplicationStartup(2048)); 22 | application.run(args); 23 | System.out.println("(♥◠‿◠)ノ゙ RuoYiAI启动成功 ლ(´ڡ`ლ)゙"); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /ruoyi-admin/src/main/java/org/ruoyi/RuoYiAIServletInitializer.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi; 2 | 3 | import org.springframework.boot.builder.SpringApplicationBuilder; 4 | import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; 5 | 6 | /** 7 | * web容器中进行部署 8 | * 9 | * @author Lion Li 10 | */ 11 | public class RuoYiAIServletInitializer extends SpringBootServletInitializer { 12 | 13 | @Override 14 | protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 15 | return application.sources(RuoYiAIApplication.class); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /ruoyi-admin/src/main/java/org/ruoyi/controller/IndexController.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.controller; 2 | 3 | import cn.dev33.satoken.annotation.SaIgnore; 4 | import org.springframework.web.bind.annotation.GetMapping; 5 | import org.springframework.web.bind.annotation.RestController; 6 | 7 | /** 8 | * 首页 9 | * 10 | * @author Lion Li 11 | */ 12 | @SaIgnore 13 | @RestController 14 | public class IndexController { 15 | 16 | /** 17 | * 访问首页,提示语 18 | */ 19 | @GetMapping("/") 20 | public String index() { 21 | return "RuoYi AI启动成功!"; 22 | } 23 | 24 | 25 | 26 | } 27 | -------------------------------------------------------------------------------- /ruoyi-admin/src/main/resources/banner.txt: -------------------------------------------------------------------------------- 1 | Application Version: ${revision} 2 | Spring Boot Version: ${spring-boot.version} 3 | -------------------------------------------------------------------------------- /ruoyi-admin/src/main/resources/ip2region.xdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/ruoyi-admin/src/main/resources/ip2region.xdb -------------------------------------------------------------------------------- /ruoyi-admin/src/main/resources/mcp-server.json: -------------------------------------------------------------------------------- 1 | { 2 | "mcpServers": { 3 | "fileSystem": { 4 | "command": "C:\\Program Files\\nodejs\\npx.cmd", 5 | "args": [ 6 | "-y", 7 | "@modelcontextprotocol/server-filesystem", 8 | "D:\\" 9 | ] 10 | }, 11 | "search1api": { 12 | "command": "C:\\Program Files\\nodejs\\npx.cmd", 13 | "args": [ 14 | "-y", 15 | "search1api-mcp" 16 | ], 17 | "env": { 18 | "SEARCH1API_KEY": "xx" 19 | } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /ruoyi-admin/src/main/resources/spy.properties: -------------------------------------------------------------------------------- 1 | exclude=SELECT 1 2 | -------------------------------------------------------------------------------- /ruoyi-admin/src/main/resources/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/ruoyi-admin/src/main/resources/static/favicon.ico -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/config/LocalCache.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.config; 2 | 3 | import cn.hutool.cache.CacheUtil; 4 | import cn.hutool.cache.impl.TimedCache; 5 | import cn.hutool.core.date.DateUnit; 6 | import lombok.extern.slf4j.Slf4j; 7 | 8 | /** 9 | * 10 | * @author https:www.unfbx.com 11 | * @date 2023-03-10 12 | */ 13 | @Slf4j 14 | public class LocalCache { 15 | /** 16 | * 缓存时长 17 | */ 18 | public static final long TIMEOUT = 30 * DateUnit.MINUTE.getMillis(); 19 | /** 20 | * 清理间隔 21 | */ 22 | private static final long CLEAN_TIMEOUT = 30 * DateUnit.MINUTE.getMillis(); 23 | 24 | /** 25 | * 缓存对象 26 | */ 27 | public static final TimedCache CACHE = CacheUtil.newTimedCache(TIMEOUT); 28 | 29 | 30 | static { 31 | //启动定时任务 32 | CACHE.schedulePrune(CLEAN_TIMEOUT); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/config/properties/WebSocketProperties.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.config.properties; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | 6 | /** 7 | * WebSocket 配置项 8 | * 9 | * @author zendwang 10 | */ 11 | @ConfigurationProperties("websocket") 12 | @Data 13 | public class WebSocketProperties { 14 | 15 | /** 16 | * 是否开启 17 | */ 18 | private Boolean enabled; 19 | 20 | /** 21 | * 路径 22 | */ 23 | private String path; 24 | 25 | /** 26 | * 设置访问源地址 27 | */ 28 | private String allowedOrigins; 29 | } 30 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/constant/OpenAIConst.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.constant; 2 | 3 | /** 4 | * 5 | * @author https:www.unfbx.com 6 | * @since 2023-03-06 7 | */ 8 | public class OpenAIConst { 9 | 10 | public final static String OPENAI_HOST = "https://api.openai.com/"; 11 | 12 | public final static String apiUrl = "v1/chat/completions"; 13 | 14 | public final static int SUCCEED_CODE = 200; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/constant/WebSocketConstants.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.constant; 2 | 3 | /** 4 | * websocket的常量配置 5 | * 6 | * @author zendwang 7 | */ 8 | public interface WebSocketConstants { 9 | /** 10 | * websocketSession中的参数的key 11 | */ 12 | String LOGIN_USER_KEY = "loginUser"; 13 | 14 | /** 15 | * 订阅的频道 16 | */ 17 | String WEB_SOCKET_TOPIC = "global:websocket"; 18 | 19 | /** 20 | * 前端心跳检查的命令 21 | */ 22 | String PING = "ping"; 23 | 24 | /** 25 | * 服务端心跳恢复的字符串 26 | */ 27 | String PONG = "pong"; 28 | } 29 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/Tts/TtsFormat.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.Tts; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | @Getter 7 | @AllArgsConstructor 8 | public enum TtsFormat { 9 | MP3("mp3"), 10 | OPUS("opus"), 11 | AAC("aac"), 12 | FLAC("flac"), 13 | ; 14 | private final String name; 15 | } 16 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/Tts/TtsVoice.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.Tts; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 生成不同声音的音频 8 | *

具体语音效果参考:https://platform.openai.com/docs/guides/text-to-speech

9 | */ 10 | @Getter 11 | @AllArgsConstructor 12 | public enum TtsVoice { 13 | 14 | ALLOY("alloy"), 15 | ECHO("echo"), 16 | FABLE("fable"), 17 | ONYX("onyx"), 18 | NOVA("nova"), 19 | SHIMMER("shimmer"), 20 | ; 21 | 22 | private final String name; 23 | } 24 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/BillingUsage.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.billing; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import com.fasterxml.jackson.annotation.JsonProperty; 5 | import lombok.Data; 6 | 7 | import java.math.BigDecimal; 8 | import java.util.List; 9 | 10 | /** 11 | * 金额消耗信息 12 | * 13 | * @author https:www.unfbx.com 14 | * @since 2023-04-08 15 | */ 16 | @Data 17 | @JsonIgnoreProperties(ignoreUnknown = true) 18 | public class BillingUsage { 19 | 20 | @JsonProperty("object") 21 | private String object; 22 | /** 23 | * 账号金额消耗明细 24 | */ 25 | @JsonProperty("daily_costs") 26 | private List dailyCosts; 27 | /** 28 | * 总使用金额:美分 29 | */ 30 | @JsonProperty("total_usage") 31 | private BigDecimal totalUsage; 32 | 33 | } 34 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/DailyCost.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.billing; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import com.fasterxml.jackson.annotation.JsonProperty; 5 | import lombok.Data; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 金额消耗列表 11 | * 12 | * @author https:www.unfbx.com 13 | * @since 2023-04-08 14 | */ 15 | @Data 16 | @JsonIgnoreProperties(ignoreUnknown = true) 17 | public class DailyCost { 18 | /** 19 | * 时间戳 20 | */ 21 | @JsonProperty("timestamp") 22 | private long timestamp; 23 | /** 24 | * 模型消耗金额详情 25 | */ 26 | @JsonProperty("line_items") 27 | private List lineItems; 28 | } 29 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/Grants.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.billing; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import com.fasterxml.jackson.annotation.JsonProperty; 5 | import lombok.Data; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 11 | * @author https:www.unfbx.com 12 | * @since 2023-03-18 13 | */ 14 | @Data 15 | @JsonIgnoreProperties(ignoreUnknown = true) 16 | public class Grants { 17 | private String object; 18 | @JsonProperty("data") 19 | private List data; 20 | } 21 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/LineItem.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.billing; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import lombok.Data; 5 | 6 | import java.math.BigDecimal; 7 | 8 | /** 9 | * 金额消耗列表 10 | * 11 | * @author https:www.unfbx.com 12 | * @since 2023-04-08 13 | */ 14 | @Data 15 | @JsonIgnoreProperties(ignoreUnknown = true) 16 | public class LineItem { 17 | /** 18 | * 模型名称 19 | */ 20 | private String name; 21 | /** 22 | * 消耗金额 23 | */ 24 | private BigDecimal cost; 25 | } 26 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/billing/Plan.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.billing; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import lombok.Data; 5 | 6 | /** 7 | * 8 | * @author https:www.unfbx.com 9 | * @since 2023-04-08 10 | */ 11 | @Data 12 | @JsonIgnoreProperties(ignoreUnknown = true) 13 | public class Plan { 14 | private String title; 15 | private String id; 16 | } 17 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ChatChoice.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.chat; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import com.fasterxml.jackson.annotation.JsonProperty; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | 9 | /** 10 | * 11 | * @author https:www.unfbx.com 12 | * @since 2023-03-02 13 | */ 14 | @Data 15 | @JsonIgnoreProperties(ignoreUnknown = true) 16 | public class ChatChoice implements Serializable { 17 | private long index; 18 | /** 19 | * 请求参数stream为true返回是delta 20 | */ 21 | @JsonProperty("delta") 22 | private Message delta; 23 | /** 24 | * 请求参数stream为false返回是message 25 | */ 26 | @JsonProperty("message") 27 | private Message message; 28 | @JsonProperty("finish_reason") 29 | private String finishReason; 30 | } 31 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ChatCompletion.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.chat; 2 | 3 | import com.fasterxml.jackson.annotation.JsonInclude; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | import lombok.NonNull; 8 | import lombok.experimental.SuperBuilder; 9 | import lombok.extern.slf4j.Slf4j; 10 | 11 | import java.io.Serializable; 12 | import java.util.List; 13 | 14 | /** 15 | * chat模型参数 16 | * 17 | * @author https:www.unfbx.com 18 | * 2023-03-02 19 | */ 20 | @Data 21 | @SuperBuilder 22 | @Slf4j 23 | @JsonInclude(JsonInclude.Include.NON_NULL) 24 | @NoArgsConstructor 25 | @AllArgsConstructor 26 | public class ChatCompletion extends BaseChatCompletion implements Serializable { 27 | 28 | /** 29 | * 问题描述 30 | */ 31 | @NonNull 32 | private List messages; 33 | 34 | } 35 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ChatCompletionResponse.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.chat; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import lombok.Data; 5 | import org.ruoyi.common.chat.entity.common.Usage; 6 | 7 | import java.io.Serializable; 8 | import java.util.List; 9 | 10 | /** 11 | * chat答案类 12 | * 13 | * @author https:www.unfbx.com 14 | * 2023-03-02 15 | */ 16 | @Data 17 | @JsonIgnoreProperties(ignoreUnknown = true) 18 | public class ChatCompletionResponse implements Serializable { 19 | private String id; 20 | private String object; 21 | private long created; 22 | private String model; 23 | private List choices; 24 | private Usage usage; 25 | } 26 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ChatCompletionWithPicture.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.chat; 2 | 3 | import com.fasterxml.jackson.annotation.JsonInclude; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | import lombok.experimental.SuperBuilder; 8 | import lombok.extern.slf4j.Slf4j; 9 | 10 | import java.io.Serializable; 11 | import java.util.List; 12 | 13 | /** 14 | * : chat模型附带图片的参数 15 | * 16 | * @author https:www.unfbx.com 17 | * @since 1.1.2 18 | * 2023-11-10 19 | */ 20 | @Data 21 | @SuperBuilder 22 | @Slf4j 23 | @JsonInclude(JsonInclude.Include.NON_NULL) 24 | @NoArgsConstructor 25 | @AllArgsConstructor 26 | public class ChatCompletionWithPicture extends BaseChatCompletion implements Serializable { 27 | /** 28 | * 问题描述 29 | */ 30 | private List messages; 31 | 32 | } 33 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/FunctionCall.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.chat; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | /** 9 | * 函数调用返回值 10 | * 11 | * @author https://www.unfbx.com 12 | * @since 2023-06-14 13 | */ 14 | @Data 15 | @Builder 16 | @AllArgsConstructor 17 | @NoArgsConstructor 18 | public class FunctionCall { 19 | /** 20 | * 方法名 21 | */ 22 | private String name; 23 | /** 24 | * 方法参数 25 | */ 26 | private String arguments; 27 | } 28 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ImageUrl.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.chat; 2 | 3 | import com.fasterxml.jackson.annotation.JsonInclude; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Builder; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | import lombok.extern.slf4j.Slf4j; 9 | 10 | /** 11 | * 12 | * @author https://www.unfbx.com 13 | * 2023-11-10 14 | */ 15 | @Data 16 | @Builder 17 | @Slf4j 18 | @JsonInclude(JsonInclude.Include.NON_NULL) 19 | @NoArgsConstructor 20 | @AllArgsConstructor 21 | public class ImageUrl { 22 | /** 23 | * 图片地址,支持base64. eg: data:image/jpeg;base64,{base64_image} 24 | * https://platform.openai.com/docs/guides/vision 25 | */ 26 | private String url; 27 | } 28 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/ResponseFormat.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.chat; 2 | 3 | import lombok.*; 4 | 5 | /** 6 | * 指定模型必须输出的格式的对象。 7 | */ 8 | @Data 9 | @Builder 10 | @AllArgsConstructor 11 | @NoArgsConstructor 12 | public class ResponseFormat { 13 | /** 14 | * 默认:text 15 | * 16 | * @see Type 17 | */ 18 | private String type; 19 | 20 | @Getter 21 | @AllArgsConstructor 22 | public enum Type { 23 | JSON_OBJECT("json_object"), 24 | TEXT("text"), 25 | ; 26 | private final String name; 27 | 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/tool/ToolCallFunction.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.chat.tool; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * ToolCall 的 Function参数 12 | * The function that the model called. 13 | * 14 | * @author https:www.unfbx.com 15 | * @since 1.1.2 16 | * 2023-11-09 17 | */ 18 | @Data 19 | @Builder 20 | @AllArgsConstructor 21 | @NoArgsConstructor 22 | public class ToolCallFunction implements Serializable { 23 | /** 24 | * 方法名 25 | */ 26 | private String name; 27 | /** 28 | * 方法参数 29 | */ 30 | private String arguments; 31 | } 32 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/tool/ToolCalls.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.chat.tool; 2 | 3 | import lombok.*; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * The tool calls generated by the model, such as function calls. 9 | * 10 | * @author unfbx 11 | * @since 1.1.2 12 | * 2023-11-09 13 | */ 14 | @Data 15 | @Builder 16 | @AllArgsConstructor 17 | @NoArgsConstructor 18 | public class ToolCalls implements Serializable { 19 | /** 20 | * The ID of the tool call. 21 | */ 22 | private String id; 23 | /** 24 | * The type of the tool. Currently, only function is supported. 25 | */ 26 | private String type; 27 | 28 | private ToolCallFunction function; 29 | 30 | @Getter 31 | @AllArgsConstructor 32 | public enum Type { 33 | FUNCTION("function"), 34 | ; 35 | private final String name; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/tool/ToolChoice.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.chat.tool; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.Getter; 6 | 7 | import java.io.Serializable; 8 | 9 | /** 10 | * choice和object同时存在是以object为准 11 | * 12 | * @author unfbx 13 | * @since 1.1.2 14 | * 2023-11-09 15 | */ 16 | @Data 17 | public class ToolChoice implements Serializable { 18 | 19 | @Getter 20 | @AllArgsConstructor 21 | public enum Choice { 22 | NONE("none"), 23 | AUTO("auto"), 24 | ; 25 | private final String name; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/tool/ToolChoiceObj.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.chat.tool; 2 | 3 | import lombok.*; 4 | 5 | /** 6 | * @author unfbx 7 | * @since 1.1.2 8 | * 2023-11-09 9 | */ 10 | @Data 11 | @Builder 12 | @AllArgsConstructor 13 | @NoArgsConstructor 14 | public class ToolChoiceObj { 15 | /** 16 | * 需要调用的方法名称 17 | */ 18 | private ToolChoiceObjFunction function; 19 | /** 20 | * 工具的类型。目前仅支持函数。 21 | * 22 | * @see Type 23 | */ 24 | private String type; 25 | 26 | @Getter 27 | @AllArgsConstructor 28 | public enum Type { 29 | FUNCTION("function"), 30 | ; 31 | private final String name; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/tool/ToolChoiceObjFunction.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.chat.tool; 2 | 3 | 4 | import lombok.AllArgsConstructor; 5 | import lombok.Builder; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | 9 | /** 10 | * @author unfbx 11 | * @since 1.1.2 12 | * 2023-11-09 13 | */ 14 | @Data 15 | @Builder 16 | @AllArgsConstructor 17 | @NoArgsConstructor 18 | public class ToolChoiceObjFunction { 19 | 20 | private String name; 21 | } 22 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/tool/Tools.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.chat.tool; 2 | 3 | 4 | import lombok.*; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * @author unfbx 10 | * @since 1.1.2 11 | * 2023-11-09 12 | */ 13 | @Data 14 | @Builder 15 | @AllArgsConstructor 16 | @NoArgsConstructor 17 | public class Tools implements Serializable { 18 | 19 | /** 20 | * 目前只支持:function 21 | * 22 | * @see Type 23 | */ 24 | private String type; 25 | 26 | private ToolsFunction function; 27 | 28 | @Getter 29 | @AllArgsConstructor 30 | public enum Type { 31 | FUNCTION("function"), 32 | ; 33 | private final String name; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/chat/tool/ToolsFunction.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.chat.tool; 2 | 3 | 4 | import lombok.AllArgsConstructor; 5 | import lombok.Builder; 6 | import lombok.Data; 7 | import lombok.NoArgsConstructor; 8 | import org.ruoyi.common.chat.entity.chat.Parameters; 9 | 10 | import java.io.Serializable; 11 | 12 | /** 13 | * @author unfbx 14 | * @since 1.1.2 15 | * 2023-11-09 16 | */ 17 | @Data 18 | @Builder 19 | @AllArgsConstructor 20 | @NoArgsConstructor 21 | public class ToolsFunction implements Serializable { 22 | 23 | /** 24 | * 要调用的函数的名称。必须是 a-z、A-Z、0-9,或包含下划线和破折号,最大长度为 64 25 | */ 26 | private String name; 27 | /** 28 | * 对函数功能的描述,模型使用它来选择何时以及如何调用该函数。 29 | */ 30 | private String description; 31 | /** 32 | * 函数接受的参数,描述为 JSON Schema 对象 33 | * 扩展参数可以继承Parameters自己实现,json格式的数据 34 | */ 35 | private Parameters parameters; 36 | } 37 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/common/Choice.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.common; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import com.fasterxml.jackson.annotation.JsonProperty; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | 9 | /** 10 | * 11 | * @author https:www.unfbx.com 12 | * 2023-02-15 13 | */ 14 | @Data 15 | @JsonIgnoreProperties(ignoreUnknown = true) 16 | public class Choice implements Serializable { 17 | private String text; 18 | private long index; 19 | private Object logprobs; 20 | @JsonProperty("finish_reason") 21 | private String finishReason; 22 | } 23 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/common/DeleteResponse.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.common; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * 10 | * 11 | * @author https:www.unfbx.com 12 | * 2023-02-15 13 | */ 14 | @Data 15 | @JsonIgnoreProperties(ignoreUnknown = true) 16 | public class DeleteResponse implements Serializable { 17 | private String id; 18 | private String object; 19 | private boolean deleted; 20 | } 21 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/common/OpenAiResponse.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.common; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | import java.util.List; 8 | /** 9 | * 10 | * 11 | * @author https:www.unfbx.com 12 | * 2023-02-15 13 | */ 14 | @Data 15 | @JsonIgnoreProperties(ignoreUnknown = true) 16 | public class OpenAiResponse implements Serializable { 17 | private String object; 18 | private List data; 19 | private Error error; 20 | 21 | 22 | @Data 23 | @JsonIgnoreProperties(ignoreUnknown = true) 24 | public class Error { 25 | private String message; 26 | private String type; 27 | private String param; 28 | private String code; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/common/Usage.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.common; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import com.fasterxml.jackson.annotation.JsonProperty; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | 9 | /** 10 | * 11 | * 12 | * @author https:www.unfbx.com 13 | * 2023-02-15 14 | */ 15 | @Data 16 | @JsonIgnoreProperties(ignoreUnknown = true) 17 | public class Usage implements Serializable { 18 | @JsonProperty("prompt_tokens") 19 | private long promptTokens; 20 | @JsonProperty("completion_tokens") 21 | private long completionTokens; 22 | @JsonProperty("total_tokens") 23 | private long totalTokens; 24 | } 25 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/completions/CompletionResponse.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.completions; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import lombok.Data; 5 | import org.ruoyi.common.chat.entity.common.Choice; 6 | import org.ruoyi.common.chat.entity.common.OpenAiResponse; 7 | import org.ruoyi.common.chat.entity.common.Usage; 8 | 9 | import java.io.Serializable; 10 | 11 | /** 12 | * 答案类 13 | * 14 | * @author https:www.unfbx.com 15 | * 2023-02-11 16 | */ 17 | @Data 18 | @JsonIgnoreProperties(ignoreUnknown = true) 19 | public class CompletionResponse extends OpenAiResponse implements Serializable { 20 | private String id; 21 | private String object; 22 | private long created; 23 | private String model; 24 | private Choice[] choices; 25 | private Usage usage; 26 | } 27 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/dto/WebSocketMessageDto.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.dto; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serial; 6 | import java.io.Serializable; 7 | import java.util.List; 8 | 9 | /** 10 | * 消息的dto 11 | * 12 | * @author zendwang 13 | */ 14 | @Data 15 | public class WebSocketMessageDto implements Serializable { 16 | 17 | @Serial 18 | private static final long serialVersionUID = 1L; 19 | 20 | /** 21 | * 需要推送到的session key 列表 22 | */ 23 | private List sessionKeys; 24 | 25 | /** 26 | * 需要发送的消息 27 | */ 28 | private String message; 29 | } 30 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/edits/EditResponse.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.edits; 2 | 3 | 4 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 5 | import lombok.Data; 6 | import org.ruoyi.common.chat.entity.common.Choice; 7 | import org.ruoyi.common.chat.entity.common.Usage; 8 | 9 | import java.io.Serializable; 10 | 11 | /** 12 | * 13 | * 14 | * @author https:www.unfbx.com 15 | * 2023-02-15 16 | */ 17 | @Data 18 | @JsonIgnoreProperties(ignoreUnknown = true) 19 | public class EditResponse implements Serializable { 20 | private String id; 21 | private String object; 22 | private long created; 23 | private String model; 24 | private Choice[] choices; 25 | private Usage usage; 26 | } 27 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/embeddings/EmbeddingResponse.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.embeddings; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import lombok.Data; 5 | import org.ruoyi.common.chat.entity.common.Usage; 6 | 7 | import java.io.Serializable; 8 | import java.util.List; 9 | 10 | /** 11 | * 12 | * 13 | * @author https:www.unfbx.com 14 | * 2023-02-15 15 | */ 16 | @Data 17 | @JsonIgnoreProperties(ignoreUnknown = true) 18 | public class EmbeddingResponse implements Serializable { 19 | 20 | private String object; 21 | private List data; 22 | private String model; 23 | private Usage usage; 24 | } 25 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/embeddings/Item.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.embeddings; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | import java.math.BigDecimal; 8 | import java.util.List; 9 | 10 | @Data 11 | @JsonIgnoreProperties(ignoreUnknown = true) 12 | public class Item implements Serializable { 13 | private String object; 14 | private List embedding; 15 | private Integer index; 16 | } 17 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/engines/Engine.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.engines; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * 10 | * 11 | * @author https:www.unfbx.com 12 | * 2023-02-15 13 | */ 14 | @Data 15 | @JsonIgnoreProperties(ignoreUnknown = true) 16 | public class Engine implements Serializable { 17 | 18 | private String id; 19 | private String object; 20 | private String owner; 21 | private boolean ready; 22 | private Object permissions; 23 | private long created; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/files/File.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.files; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * 10 | * 11 | * @author https:www.unfbx.com 12 | * 2023-02-15 13 | */ 14 | @Data 15 | @JsonIgnoreProperties(ignoreUnknown = true) 16 | public class File implements Serializable { 17 | 18 | // private String id; 19 | // private String object; 20 | // private long bytes; 21 | // private long created_at; 22 | // private String filename; 23 | // private String purpose; 24 | // private String status; 25 | // @JsonProperty("status_details") 26 | // private String statusDetails; 27 | 28 | private long bytes; 29 | private long created_at; 30 | private String filename; 31 | private String id; 32 | private String object; 33 | private String url; 34 | } 35 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/files/UploadFileResponse.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.files; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * 10 | * 11 | * @author https:www.unfbx.com 12 | * 2023-02-15 13 | */ 14 | @Data 15 | @JsonIgnoreProperties(ignoreUnknown = true) 16 | public class UploadFileResponse extends File implements Serializable { 17 | } 18 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/fineTune/Event.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.fineTune; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import com.fasterxml.jackson.annotation.JsonProperty; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | 9 | @Data 10 | @JsonIgnoreProperties(ignoreUnknown = true) 11 | public class Event implements Serializable { 12 | private String object; 13 | @JsonProperty("created_at") 14 | private long createdAt; 15 | private String level; 16 | private String message; 17 | } 18 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/fineTune/FineTuneDeleteResponse.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.fineTune; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | @Data 9 | @JsonIgnoreProperties(ignoreUnknown = true) 10 | public class FineTuneDeleteResponse implements Serializable { 11 | 12 | private String id; 13 | 14 | private String object; 15 | 16 | private boolean deleted; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/fineTune/HyperParam.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.fineTune; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import com.fasterxml.jackson.annotation.JsonProperty; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | 9 | @Data 10 | @JsonIgnoreProperties(ignoreUnknown = true) 11 | public class HyperParam implements Serializable { 12 | 13 | @JsonProperty("batch_size") 14 | private Integer batchSize; 15 | @JsonProperty("learning_rate_multiplier") 16 | private Double learningRateMultiplier; 17 | @JsonProperty("n_epochs") 18 | private Integer nEpochs; 19 | @JsonProperty("prompt_loss_weight") 20 | private Double promptLossWeight; 21 | } 22 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/fineTune/TrainingFile.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.fineTune; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import com.fasterxml.jackson.annotation.JsonProperty; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | 9 | @Data 10 | @JsonIgnoreProperties(ignoreUnknown = true) 11 | public class TrainingFile implements Serializable { 12 | 13 | private String id; 14 | private String object; 15 | private long bytes; 16 | @JsonProperty("created_at") 17 | private long createdAt; 18 | private String filename; 19 | private String purpose; 20 | private String status; 21 | @JsonProperty("status_details") 22 | private String statusDetails; 23 | } 24 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/ImageResponse.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.images; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | import java.util.List; 8 | 9 | /** 10 | * 11 | * 12 | * @author https:www.unfbx.com 13 | * 2023-02-15 14 | */ 15 | @Data 16 | @JsonIgnoreProperties(ignoreUnknown = true) 17 | public class ImageResponse implements Serializable { 18 | private long created; 19 | private List data; 20 | } 21 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/Item.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.images; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import com.fasterxml.jackson.annotation.JsonProperty; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | 9 | /** 10 | * 11 | * 12 | * @author https:www.unfbx.com 13 | * 2023-02-15 14 | */ 15 | @Data 16 | @JsonIgnoreProperties(ignoreUnknown = true) 17 | public class Item implements Serializable { 18 | private String url; 19 | @JsonProperty("b64_json") 20 | private String b64Json; 21 | } 22 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/ResponseFormat.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.images; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * 10 | * 11 | * @author https:www.unfbx.com 12 | * 2023-02-15 13 | */ 14 | @AllArgsConstructor 15 | @Getter 16 | public enum ResponseFormat implements Serializable { 17 | URL("url"), 18 | B64_JSON("b64_json"), 19 | ; 20 | 21 | private String name; 22 | } 23 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/images/SizeEnum.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.images; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * 10 | * 11 | * @author https:www.unfbx.com 12 | * 2023-02-15 13 | */ 14 | @Getter 15 | @AllArgsConstructor 16 | public enum SizeEnum implements Serializable { 17 | size_1024_1792("1024x1792"), 18 | size_1792_1024("1792x1024"), 19 | size_1024("1024x1024"), 20 | size_512("512x512"), 21 | size_256("256x256"), 22 | 23 | ; 24 | private String name; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/models/LocalModelsSearchResponse.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.models; 2 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import lombok.Data; 5 | 6 | import java.util.List; 7 | 8 | @Data 9 | @JsonIgnoreProperties(ignoreUnknown = true) 10 | public class LocalModelsSearchResponse { 11 | @JsonProperty("topKEmbeddings") 12 | 13 | private List>> topKEmbeddings; // 处理三层嵌套数组 14 | 15 | // 默认构造函数 16 | public LocalModelsSearchResponse() {} 17 | 18 | 19 | 20 | } 21 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/models/Model.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.models; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import com.fasterxml.jackson.annotation.JsonProperty; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | import java.util.List; 9 | 10 | /** 11 | * 12 | * 13 | * @author https:www.unfbx.com 14 | * 2023-02-15 15 | */ 16 | @Data 17 | @JsonIgnoreProperties(ignoreUnknown = true) 18 | public class Model implements Serializable { 19 | 20 | private String id; 21 | private String object; 22 | private long created; 23 | @JsonProperty("owned_by") 24 | private String ownedBy; 25 | @JsonProperty("permission") 26 | private List permission; 27 | private String root; 28 | private Object parent; 29 | } 30 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/models/ModelResponse.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.models; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | import java.util.List; 8 | 9 | /** 10 | * 11 | * 12 | * @author https:www.unfbx.com 13 | * 2023-02-15 14 | */ 15 | @Data 16 | @JsonIgnoreProperties(ignoreUnknown = true) 17 | public class ModelResponse implements Serializable { 18 | private String object; 19 | private List data; 20 | } 21 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/moderations/CategoryScores.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.moderations; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import com.fasterxml.jackson.annotation.JsonProperty; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | import java.math.BigDecimal; 9 | 10 | /** 11 | * 12 | * 13 | * @author https:www.unfbx.com 14 | * 2023-02-15 15 | */ 16 | @Data 17 | @JsonIgnoreProperties(ignoreUnknown = true) 18 | public class CategoryScores implements Serializable { 19 | private BigDecimal hate; 20 | @JsonProperty("hate/threatening") 21 | private BigDecimal hateThreatening; 22 | @JsonProperty("self-harm") 23 | private BigDecimal selfHarm; 24 | private BigDecimal sexual; 25 | @JsonProperty("sexual/minors") 26 | private BigDecimal sexualMinors; 27 | private BigDecimal violence; 28 | @JsonProperty("violence/graphic") 29 | private BigDecimal violenceGraphic; 30 | 31 | } 32 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/moderations/ModerationResponse.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.moderations; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | import java.util.List; 8 | 9 | /** 10 | * 11 | * 12 | * @author https:www.unfbx.com 13 | * 2023-02-15 14 | */ 15 | @Data 16 | @JsonIgnoreProperties(ignoreUnknown = true) 17 | public class ModerationResponse implements Serializable { 18 | private String id; 19 | private String model; 20 | private List results; 21 | } 22 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/moderations/Result.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.moderations; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import com.fasterxml.jackson.annotation.JsonProperty; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | 9 | /** 10 | * 11 | * 12 | * @author https:www.unfbx.com 13 | * 2023-02-15 14 | */ 15 | @Data 16 | @JsonIgnoreProperties(ignoreUnknown = true) 17 | public class Result implements Serializable { 18 | private Categories categories; 19 | @JsonProperty("category_scores") 20 | private CategoryScores categoryScores; 21 | private boolean flagged; 22 | } 23 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/whisper/Whisper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.whisper; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.Getter; 6 | 7 | import java.io.Serializable; 8 | 9 | /** 10 | * 语音转文字 11 | * 12 | * @author https:www.unfbx.com 13 | * @since 2023-03-02 14 | */ 15 | @Data 16 | public class Whisper implements Serializable { 17 | 18 | 19 | @Getter 20 | @AllArgsConstructor 21 | public enum Model { 22 | WHISPER_1("whisper-1"), 23 | ; 24 | private String name; 25 | } 26 | 27 | @Getter 28 | @AllArgsConstructor 29 | public enum ResponseFormat { 30 | JSON("json"), 31 | TEXT("text"), 32 | SRT("srt"), 33 | VERBOSE_JSON("verbose_json"), 34 | VTT("vtt"), 35 | ; 36 | private String name; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/entity/whisper/WhisperResponse.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.entity.whisper; 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * 10 | * 11 | * @author https:www.unfbx.com 12 | * @since 2023-03-02 13 | */ 14 | @Data 15 | @JsonIgnoreProperties(ignoreUnknown = true) 16 | public class WhisperResponse implements Serializable { 17 | 18 | private String text; 19 | } 20 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/exception/IError.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.openai.exception; 2 | /** 3 | * 4 | * 5 | * @author https:www.unfbx.com 6 | * 2023-02-11 7 | */ 8 | public interface IError { 9 | String msg(); 10 | 11 | int code(); 12 | } 13 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/function/KeyRandomStrategy.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.openai.function; 2 | 3 | import cn.hutool.core.util.RandomUtil; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 随机策略 9 | * 10 | * @author https:www.unfbx.com 11 | * @since 2023-04-03 12 | */ 13 | public class KeyRandomStrategy implements KeyStrategyFunction, String> { 14 | 15 | @Override 16 | public String apply(List apiKeys) { 17 | return RandomUtil.randomEle(apiKeys); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/function/KeyStrategyFunction.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.openai.function; 2 | 3 | import java.util.function.Function; 4 | 5 | /** 6 | * key 的获取策略 7 | * jdk默认实现 8 | * @see Function 9 | * 10 | * @author https:www.unfbx.com 11 | * @since 2023-04-03 12 | */ 13 | @FunctionalInterface 14 | public interface KeyStrategyFunction { 15 | 16 | /** 17 | * Applies this function to the given argument. 18 | * 19 | * @param t the function argument 20 | * @return the function result 21 | */ 22 | R apply(T t); 23 | 24 | } 25 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/interceptor/OpenAILogger.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.openai.interceptor; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import okhttp3.logging.HttpLoggingInterceptor; 5 | 6 | /** 7 | * 日志 8 | * 9 | * @author https:www.unfbx.com 10 | * 2023-02-28 11 | */ 12 | @Slf4j 13 | public class OpenAILogger implements HttpLoggingInterceptor.Logger { 14 | @Override 15 | public void log(String message) { 16 | log.info("OkHttp-------->:{}", message); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/openai/plugin/PluginParam.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.openai.plugin; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class PluginParam { 7 | } 8 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/request/Dall3Request.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.request; 2 | 3 | import jakarta.validation.constraints.NotEmpty; 4 | import lombok.Data; 5 | 6 | /** 7 | * 8 | * 9 | * @author https:www.unfbx.com 10 | * @sine 2023-04-08 11 | */ 12 | @Data 13 | public class Dall3Request { 14 | 15 | @NotEmpty(message = "传入的模型不能为空") 16 | private String model; 17 | 18 | @NotEmpty(message = "提示词不能为空") 19 | private String prompt; 20 | 21 | /** 图片大小 */ 22 | @NotEmpty(message = "图片大小不能为空") 23 | private String size ; 24 | 25 | /** 图片质量 */ 26 | @NotEmpty(message = "图片质量不能为空") 27 | private String quality; 28 | 29 | /** 图片风格 */ 30 | @NotEmpty(message = "图片风格不能为空") 31 | private String style; 32 | 33 | } 34 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/java/org/ruoyi/common/chat/sse/DefaultPluginListener.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.chat.sse; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import okhttp3.sse.EventSourceListener; 5 | import org.ruoyi.common.chat.entity.chat.ChatCompletion; 6 | import org.ruoyi.common.chat.openai.OpenAiStreamClient; 7 | import org.ruoyi.common.chat.openai.plugin.PluginAbstract; 8 | 9 | /** 10 | * 插件开发返回信息收集sse监听器 11 | * 12 | * @author https:www.unfbx.com 13 | * 2023-08-18 14 | */ 15 | @Slf4j 16 | public class DefaultPluginListener extends PluginListener { 17 | 18 | public DefaultPluginListener(OpenAiStreamClient client, EventSourceListener eventSourceListener, PluginAbstract plugin, ChatCompletion chatCompletion) { 19 | super(client, eventSourceListener, plugin, chatCompletion); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-chat/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.ruoyi.common.chat.config.WebSocketConfig 2 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/config/ApplicationConfig.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.config; 2 | 3 | import org.springframework.boot.autoconfigure.AutoConfiguration; 4 | import org.springframework.context.annotation.EnableAspectJAutoProxy; 5 | 6 | /** 7 | * 程序注解配置 8 | * 9 | * @author Lion Li 10 | */ 11 | @AutoConfiguration 12 | // 表示通过aop框架暴露该代理对象,AopContext能够访问 13 | @EnableAspectJAutoProxy(exposeProxy = true) 14 | public class ApplicationConfig { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/config/properties/ThreadPoolProperties.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.config.properties; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | 6 | /** 7 | * 线程池 配置属性 8 | * 9 | * @author Lion Li 10 | */ 11 | @Data 12 | @ConfigurationProperties(prefix = "thread-pool") 13 | public class ThreadPoolProperties { 14 | 15 | /** 16 | * 是否开启线程池 17 | */ 18 | private boolean enabled; 19 | 20 | /** 21 | * 队列最大长度 22 | */ 23 | private int queueCapacity; 24 | 25 | /** 26 | * 线程池维护线程所允许的空闲时间 27 | */ 28 | private int keepAliveSeconds; 29 | 30 | } 31 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/constant/CacheConstants.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.constant; 2 | 3 | /** 4 | * 缓存的key 常量 5 | * 6 | * @author Lion Li 7 | */ 8 | public interface CacheConstants { 9 | 10 | /** 11 | * 在线用户 redis key 12 | */ 13 | String ONLINE_TOKEN_KEY = "online_tokens:"; 14 | 15 | /** 16 | * 参数管理 cache key 17 | */ 18 | String SYS_CONFIG_KEY = "sys_config:"; 19 | 20 | /** 21 | * 字典管理 cache key 22 | */ 23 | String SYS_DICT_KEY = "sys_dict:"; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/constant/GlobalConstants.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.constant; 2 | 3 | /** 4 | * 全局的key常量 (业务无关的key) 5 | * 6 | * @author Lion Li 7 | */ 8 | public interface GlobalConstants { 9 | 10 | /** 11 | * 全局 redis key (业务无关的key) 12 | */ 13 | String GLOBAL_REDIS_KEY = "global:"; 14 | 15 | /** 16 | * 验证码 redis key 17 | */ 18 | String CAPTCHA_CODE_KEY = GLOBAL_REDIS_KEY + "captcha_codes:"; 19 | 20 | /** 21 | * 防重提交 redis key 22 | */ 23 | String REPEAT_SUBMIT_KEY = GLOBAL_REDIS_KEY + "repeat_submit:"; 24 | 25 | /** 26 | * 限流 redis key 27 | */ 28 | String RATE_LIMIT_KEY = GLOBAL_REDIS_KEY + "rate_limit:"; 29 | 30 | /** 31 | * 登录账户密码错误次数 redis key 32 | */ 33 | String PWD_ERR_CNT_KEY = GLOBAL_REDIS_KEY + "pwd_err_cnt:"; 34 | } 35 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/constant/TenantConstants.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.constant; 2 | 3 | /** 4 | * 租户常量信息 5 | * 6 | * @author Lion Li 7 | */ 8 | public interface TenantConstants { 9 | 10 | /** 11 | * 租户正常状态 12 | */ 13 | String NORMAL = "0"; 14 | 15 | /** 16 | * 租户封禁状态 17 | */ 18 | String DISABLE = "1"; 19 | 20 | /** 21 | * 超级管理员ID 22 | */ 23 | Long SUPER_ADMIN_ID = 1L; 24 | 25 | /** 26 | * 超级管理员角色 roleKey 27 | */ 28 | String SUPER_ADMIN_ROLE_KEY = "superadmin"; 29 | 30 | /** 31 | * 租户管理员角色 roleKey 32 | */ 33 | String TENANT_ADMIN_ROLE_KEY = "admin"; 34 | 35 | /** 36 | * 租户管理员角色名称 37 | */ 38 | String TENANT_ADMIN_ROLE_NAME = "管理员"; 39 | 40 | /** 41 | * 默认租户ID 42 | */ 43 | String DEFAULT_TENANT_ID = "000000"; 44 | 45 | } 46 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/domain/dto/RoleDTO.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.domain.dto; 2 | 3 | import lombok.Data; 4 | import lombok.NoArgsConstructor; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * 角色 10 | * 11 | * @author Lion Li 12 | */ 13 | 14 | @Data 15 | @NoArgsConstructor 16 | public class RoleDTO implements Serializable { 17 | 18 | /** 19 | * 角色ID 20 | */ 21 | private Long roleId; 22 | 23 | /** 24 | * 角色名称 25 | */ 26 | private String roleName; 27 | 28 | /** 29 | * 角色权限 30 | */ 31 | private String roleKey; 32 | 33 | /** 34 | * 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限) 35 | */ 36 | private String dataScope; 37 | 38 | } 39 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/domain/model/EmailLoginBody.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.domain.model; 2 | 3 | import jakarta.validation.constraints.Email; 4 | import jakarta.validation.constraints.NotBlank; 5 | import lombok.Data; 6 | 7 | /** 8 | * 短信登录对象 9 | * 10 | * @author Lion Li 11 | */ 12 | 13 | @Data 14 | public class EmailLoginBody { 15 | 16 | /** 17 | * 租户ID 18 | */ 19 | @NotBlank(message = "{tenant.number.not.blank}") 20 | private String tenantId; 21 | 22 | /** 23 | * 邮箱 24 | */ 25 | @NotBlank(message = "{user.email.not.blank}") 26 | @Email(message = "{user.email.not.valid}") 27 | private String email; 28 | 29 | /** 30 | * 邮箱code 31 | */ 32 | @NotBlank(message = "{email.code.not.blank}") 33 | private String emailCode; 34 | 35 | } 36 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/domain/model/RegisterBody.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.domain.model; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | 6 | /** 7 | * 用户注册对象 8 | * 9 | * @author Lion Li 10 | */ 11 | @Data 12 | @EqualsAndHashCode(callSuper = true) 13 | public class RegisterBody extends LoginBody { 14 | 15 | private String userType; 16 | 17 | /** 18 | * 注册域名 19 | */ 20 | private String domainName; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/domain/model/SmsLoginBody.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.domain.model; 2 | 3 | import jakarta.validation.constraints.NotBlank; 4 | import lombok.Data; 5 | 6 | /** 7 | * 短信登录对象 8 | * 9 | * @author Lion Li 10 | */ 11 | 12 | @Data 13 | public class SmsLoginBody { 14 | 15 | /** 16 | * 租户ID 17 | */ 18 | @NotBlank(message = "{tenant.number.not.blank}") 19 | private String tenantId; 20 | 21 | /** 22 | * 手机号 23 | */ 24 | @NotBlank(message = "{user.phonenumber.not.blank}") 25 | private String phonenumber; 26 | 27 | /** 28 | * 短信code 29 | */ 30 | @NotBlank(message = "{sms.code.not.blank}") 31 | private String smsCode; 32 | 33 | } 34 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/domain/model/VisitorLoginBody.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.domain.model; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serial; 6 | 7 | /** 8 | * 游客登录用户身份权限 9 | * 10 | * @author Lion Li 11 | */ 12 | @Data 13 | public class VisitorLoginBody { 14 | 15 | @Serial 16 | private static final long serialVersionUID = 1L; 17 | 18 | private String code; 19 | 20 | /** 21 | * 登录类型(1.小程序访客 2.pc访客) 22 | */ 23 | private String type; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/domain/model/VisitorLoginUser.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.domain.model; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.NoArgsConstructor; 6 | 7 | import java.io.Serial; 8 | 9 | /** 10 | * 小程序登录用户身份权限 11 | * 12 | * @author Lion Li 13 | */ 14 | @Data 15 | @EqualsAndHashCode(callSuper = true) 16 | @NoArgsConstructor 17 | public class VisitorLoginUser extends LoginUser { 18 | 19 | @Serial 20 | private static final long serialVersionUID = 1L; 21 | 22 | /** 23 | * openid 24 | */ 25 | private String openid; 26 | 27 | 28 | } 29 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/enums/DeviceType.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.enums; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 设备类型 8 | * 针对一套 用户体系 9 | * 10 | * @author Lion Li 11 | */ 12 | @Getter 13 | @AllArgsConstructor 14 | public enum DeviceType { 15 | 16 | /** 17 | * pc端 18 | */ 19 | PC("pc"), 20 | 21 | /** 22 | * app端 23 | */ 24 | APP("app"), 25 | 26 | /** 27 | * 小程序端 28 | */ 29 | XCX("xcx"); 30 | 31 | private final String device; 32 | } 33 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/enums/LoginType.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.enums; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 登录类型 8 | * 9 | * @author Lion Li 10 | */ 11 | @Getter 12 | @AllArgsConstructor 13 | public enum LoginType { 14 | 15 | /** 16 | * 密码登录 17 | */ 18 | PASSWORD("user.password.retry.limit.exceed", "user.password.retry.limit.count"), 19 | 20 | /** 21 | * 短信登录 22 | */ 23 | SMS("sms.code.retry.limit.exceed", "sms.code.retry.limit.count"), 24 | 25 | /** 26 | * 邮箱登录 27 | */ 28 | EMAIL("email.code.retry.limit.exceed", "email.code.retry.limit.count"), 29 | 30 | /** 31 | * 小程序登录 32 | */ 33 | XCX("", ""); 34 | 35 | /** 36 | * 登录重试超出限制提示 37 | */ 38 | final String retryLimitExceed; 39 | 40 | /** 41 | * 登录重试限制计数提示 42 | */ 43 | final String retryLimitCount; 44 | } 45 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/enums/LoginUserType.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.enums; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 游客登录类型 8 | * 9 | * @author Lion Li 10 | */ 11 | @Getter 12 | @AllArgsConstructor 13 | public enum LoginUserType { 14 | 15 | PC("1", "PC端用户"), 16 | 17 | XCX("2", "小程序用户"); 18 | 19 | private final String code; 20 | private final String content; 21 | } 22 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/enums/TenantStatus.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.enums; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 用户状态 8 | * 9 | * @author LionLi 10 | */ 11 | @Getter 12 | @AllArgsConstructor 13 | public enum TenantStatus { 14 | /** 15 | * 正常 16 | */ 17 | OK("0", "正常"), 18 | /** 19 | * 停用 20 | */ 21 | DISABLE("1", "停用"), 22 | /** 23 | * 删除 24 | */ 25 | DELETED("2", "删除"); 26 | 27 | private final String code; 28 | private final String info; 29 | 30 | } 31 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/enums/UserStatus.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.enums; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 用户状态 8 | * 9 | * @author ruoyi 10 | */ 11 | @Getter 12 | @AllArgsConstructor 13 | public enum UserStatus { 14 | /** 15 | * 正常 16 | */ 17 | OK("0", "正常"), 18 | /** 19 | * 停用 20 | */ 21 | DISABLE("1", "停用"), 22 | /** 23 | * 删除 24 | */ 25 | DELETED("2", "删除"); 26 | 27 | private final String code; 28 | private final String info; 29 | 30 | } 31 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/enums/UserType.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.enums; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import org.ruoyi.common.core.utils.StringUtils; 6 | 7 | /** 8 | * 设备类型 9 | * 针对多套 用户体系 10 | * 11 | * @author Lion Li 12 | */ 13 | @Getter 14 | @AllArgsConstructor 15 | public enum UserType { 16 | 17 | /** 18 | * pc端 19 | */ 20 | SYS_USER("sys_user"), 21 | 22 | /** 23 | * app端 24 | */ 25 | APP_USER("app_user"); 26 | 27 | private final String userType; 28 | 29 | public static UserType getUserType(String str) { 30 | for (UserType value : values()) { 31 | if (StringUtils.contains(str, value.getUserType())) { 32 | return value; 33 | } 34 | } 35 | throw new RuntimeException("'UserType' not found By " + str); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/event/ConfigChangeEvent.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.event; 2 | 3 | import org.springframework.context.ApplicationEvent; 4 | 5 | /** 6 | * 定义一个事件类,用于通知配置变化 7 | * 8 | * @author ageerle@163.com 9 | * date 2024/5/19 10 | */ 11 | public class ConfigChangeEvent extends ApplicationEvent { 12 | public ConfigChangeEvent(Object source) { 13 | super(source); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/exception/AuthException.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.exception; 2 | 3 | public class AuthException extends RuntimeException{ 4 | 5 | private static final long serialVersionUID = 1L; 6 | 7 | public AuthException(String message) { 8 | super(message); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/exception/DemoModeException.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.exception; 2 | 3 | import java.io.Serial; 4 | 5 | /** 6 | * 演示模式异常 7 | * 8 | * @author ruoyi 9 | */ 10 | public class DemoModeException extends RuntimeException { 11 | 12 | @Serial 13 | private static final long serialVersionUID = 1L; 14 | 15 | public DemoModeException() { 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/exception/UtilException.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.exception; 2 | 3 | import java.io.Serial; 4 | 5 | /** 6 | * 工具类异常 7 | * 8 | * @author ruoyi 9 | */ 10 | public class UtilException extends RuntimeException { 11 | 12 | @Serial 13 | private static final long serialVersionUID = 8247610319171014183L; 14 | 15 | public UtilException(Throwable e) { 16 | super(e.getMessage(), e); 17 | } 18 | 19 | public UtilException(String message) { 20 | super(message); 21 | } 22 | 23 | public UtilException(String message, Throwable throwable) { 24 | super(message, throwable); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/exception/file/FileException.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.exception.file; 2 | 3 | import org.ruoyi.common.core.exception.base.BaseException; 4 | 5 | import java.io.Serial; 6 | 7 | /** 8 | * 文件信息异常类 9 | * 10 | * @author ruoyi 11 | */ 12 | public class FileException extends BaseException { 13 | 14 | @Serial 15 | private static final long serialVersionUID = 1L; 16 | 17 | public FileException(String code, Object[] args) { 18 | super("file", code, args, null); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/exception/file/FileNameLengthLimitExceededException.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.exception.file; 2 | 3 | import java.io.Serial; 4 | 5 | /** 6 | * 文件名称超长限制异常类 7 | * 8 | * @author ruoyi 9 | */ 10 | public class FileNameLengthLimitExceededException extends FileException { 11 | 12 | @Serial 13 | private static final long serialVersionUID = 1L; 14 | 15 | public FileNameLengthLimitExceededException(int defaultFileNameLength) { 16 | super("upload.filename.exceed.length", new Object[]{defaultFileNameLength}); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/exception/file/FileSizeLimitExceededException.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.exception.file; 2 | 3 | import java.io.Serial; 4 | 5 | /** 6 | * 文件名大小限制异常类 7 | * 8 | * @author ruoyi 9 | */ 10 | public class FileSizeLimitExceededException extends FileException { 11 | 12 | @Serial 13 | private static final long serialVersionUID = 1L; 14 | 15 | public FileSizeLimitExceededException(long defaultMaxSize) { 16 | super("upload.exceed.maxSize", new Object[]{defaultMaxSize}); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/exception/user/CaptchaException.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.exception.user; 2 | 3 | import java.io.Serial; 4 | 5 | /** 6 | * 验证码错误异常类 7 | * 8 | * @author ruoyi 9 | */ 10 | public class CaptchaException extends UserException { 11 | 12 | @Serial 13 | private static final long serialVersionUID = 1L; 14 | 15 | public CaptchaException() { 16 | super("user.jcaptcha.error"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/exception/user/CaptchaExpireException.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.exception.user; 2 | 3 | import java.io.Serial; 4 | 5 | /** 6 | * 验证码失效异常类 7 | * 8 | * @author ruoyi 9 | */ 10 | public class CaptchaExpireException extends UserException { 11 | 12 | @Serial 13 | private static final long serialVersionUID = 1L; 14 | 15 | public CaptchaExpireException() { 16 | super("user.jcaptcha.expire"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/exception/user/UserException.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.exception.user; 2 | 3 | import org.ruoyi.common.core.exception.base.BaseException; 4 | 5 | import java.io.Serial; 6 | 7 | /** 8 | * 用户信息异常类 9 | * 10 | * @author ruoyi 11 | */ 12 | public class UserException extends BaseException { 13 | 14 | @Serial 15 | private static final long serialVersionUID = 1L; 16 | 17 | public UserException(String code, Object... args) { 18 | super("user", code, args, null); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/exception/user/UserPasswordNotMatchException.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.exception.user; 2 | 3 | import java.io.Serial; 4 | 5 | /** 6 | * 用户密码不正确或不符合规范异常类 7 | * 8 | * @author ruoyi 9 | */ 10 | public class UserPasswordNotMatchException extends UserException { 11 | 12 | @Serial 13 | private static final long serialVersionUID = 1L; 14 | 15 | public UserPasswordNotMatchException() { 16 | super("user.password.not.match"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/exception/user/UserPasswordRetryLimitExceedException.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.exception.user; 2 | 3 | import java.io.Serial; 4 | 5 | /** 6 | * 用户错误最大次数异常类 7 | * 8 | * @author ruoyi 9 | */ 10 | public class UserPasswordRetryLimitExceedException extends UserException { 11 | 12 | @Serial 13 | private static final long serialVersionUID = 1L; 14 | 15 | public UserPasswordRetryLimitExceedException(int retryLimitCount, int lockTime) { 16 | super("user.password.retry.limit.exceed", retryLimitCount, lockTime); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/service/ConfigService.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.service; 2 | 3 | 4 | /** 5 | * 通用 参数配置服务 6 | */ 7 | public interface ConfigService { 8 | 9 | /** 10 | * 根据配置类型和配置key获取值 11 | * 12 | * @param category 13 | * @param configKey 14 | * @return 15 | */ 16 | String getConfigValue(String category,String configKey); 17 | 18 | 19 | 20 | } 21 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/service/DeptService.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.service; 2 | 3 | /** 4 | * 通用 部门服务 5 | * 6 | * @author Lion Li 7 | */ 8 | public interface DeptService { 9 | 10 | /** 11 | * 通过部门ID查询部门名称 12 | * 13 | * @param deptIds 部门ID串逗号分隔 14 | * @return 部门名称串逗号分隔 15 | */ 16 | String selectDeptNameByIds(String deptIds); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/service/OssService.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.service; 2 | 3 | /** 4 | * 通用 OSS服务 5 | * 6 | * @author Lion Li 7 | */ 8 | public interface OssService { 9 | 10 | /** 11 | * 通过ossId查询对应的url 12 | * 13 | * @param ossIds ossId串逗号分隔 14 | * @return url串逗号分隔 15 | */ 16 | String selectUrlByIds(String ossIds); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/service/UserService.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.service; 2 | 3 | /** 4 | * 通用 用户服务 5 | * 6 | * @author Lion Li 7 | */ 8 | public interface UserService { 9 | 10 | /** 11 | * 通过用户ID查询用户账户 12 | * 13 | * @param userId 用户ID 14 | * @return 用户账户 15 | */ 16 | String selectUserNameById(Long userId); 17 | 18 | /** 19 | * 通过用户名称查询余额 20 | * 21 | * @param userName 22 | * @return 23 | */ 24 | String selectUserByName(String userName); 25 | } 26 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/utils/JsonUtils.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.utils; 2 | 3 | import com.fasterxml.jackson.annotation.JsonInclude.Include; 4 | import com.fasterxml.jackson.core.JsonProcessingException; 5 | import com.fasterxml.jackson.databind.ObjectMapper; 6 | import com.fasterxml.jackson.databind.SerializationFeature; 7 | 8 | /** 9 | * @author Binary Wang 10 | */ 11 | public class JsonUtils { 12 | private static final ObjectMapper JSON = new ObjectMapper(); 13 | 14 | static { 15 | JSON.setSerializationInclusion(Include.NON_NULL); 16 | JSON.configure(SerializationFeature.INDENT_OUTPUT, Boolean.TRUE); 17 | } 18 | 19 | public static String toJson(Object obj) { 20 | try { 21 | return JSON.writeValueAsString(obj); 22 | } catch (JsonProcessingException e) { 23 | e.printStackTrace(); 24 | } 25 | 26 | return null; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/utils/MessageUtils.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.utils; 2 | 3 | import lombok.AccessLevel; 4 | import lombok.NoArgsConstructor; 5 | import org.springframework.context.MessageSource; 6 | import org.springframework.context.i18n.LocaleContextHolder; 7 | 8 | /** 9 | * 获取i18n资源文件 10 | * 11 | * @author Lion Li 12 | */ 13 | @NoArgsConstructor(access = AccessLevel.PRIVATE) 14 | public class MessageUtils { 15 | 16 | private static final MessageSource MESSAGE_SOURCE = SpringUtils.getBean(MessageSource.class); 17 | 18 | /** 19 | * 根据消息键和参数 获取消息 委托给spring messageSource 20 | * 21 | * @param code 消息键 22 | * @param args 参数 23 | * @return 获取国际化翻译值 24 | */ 25 | public static String message(String code, Object... args) { 26 | return MESSAGE_SOURCE.getMessage(code, args, LocaleContextHolder.getLocale()); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/utils/ValidatorUtils.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.utils; 2 | 3 | import jakarta.validation.ConstraintViolation; 4 | import jakarta.validation.ConstraintViolationException; 5 | import jakarta.validation.Validator; 6 | import lombok.AccessLevel; 7 | import lombok.NoArgsConstructor; 8 | 9 | import java.util.Set; 10 | 11 | /** 12 | * Validator 校验框架工具 13 | * 14 | * @author Lion Li 15 | */ 16 | @NoArgsConstructor(access = AccessLevel.PRIVATE) 17 | public class ValidatorUtils { 18 | 19 | private static final Validator VALID = SpringUtils.getBean(Validator.class); 20 | 21 | public static void validate(T object, Class... groups) { 22 | Set> validate = VALID.validate(object, groups); 23 | if (!validate.isEmpty()) { 24 | throw new ConstraintViolationException("参数校验异常", validate); 25 | } 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/utils/ip/AddressUtils.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.utils.ip; 2 | 3 | import cn.hutool.core.net.NetUtil; 4 | import cn.hutool.http.HtmlUtil; 5 | import lombok.AccessLevel; 6 | import lombok.NoArgsConstructor; 7 | import lombok.extern.slf4j.Slf4j; 8 | import org.ruoyi.common.core.utils.StringUtils; 9 | 10 | /** 11 | * 获取地址类 12 | * 13 | * @author Lion Li 14 | */ 15 | @Slf4j 16 | @NoArgsConstructor(access = AccessLevel.PRIVATE) 17 | public class AddressUtils { 18 | 19 | // 未知地址 20 | public static final String UNKNOWN = "XX XX"; 21 | 22 | public static String getRealAddressByIP(String ip) { 23 | if (StringUtils.isBlank(ip)) { 24 | return UNKNOWN; 25 | } 26 | // 内网不查询 27 | ip = "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : HtmlUtil.cleanHtmlTag(ip); 28 | if (NetUtil.isInnerIP(ip)) { 29 | return "内网IP"; 30 | } 31 | return RegionUtils.getCityInfo(ip); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/validate/AddGroup.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.validate; 2 | 3 | /** 4 | * 校验分组 add 5 | * 6 | * @author Lion Li 7 | */ 8 | public interface AddGroup { 9 | } 10 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/validate/EditGroup.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.validate; 2 | 3 | /** 4 | * 校验分组 edit 5 | * 6 | * @author Lion Li 7 | */ 8 | public interface EditGroup { 9 | } 10 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/validate/QueryGroup.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.validate; 2 | 3 | /** 4 | * 校验分组 query 5 | * 6 | * @author Lion Li 7 | */ 8 | public interface QueryGroup { 9 | } 10 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/xss/Xss.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.xss; 2 | 3 | import jakarta.validation.Constraint; 4 | import jakarta.validation.Payload; 5 | 6 | import java.lang.annotation.ElementType; 7 | import java.lang.annotation.Retention; 8 | import java.lang.annotation.RetentionPolicy; 9 | import java.lang.annotation.Target; 10 | 11 | /** 12 | * 自定义xss校验注解 13 | * 14 | * @author Lion Li 15 | */ 16 | @Retention(RetentionPolicy.RUNTIME) 17 | @Target(value = {ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.PARAMETER}) 18 | @Constraint(validatedBy = {XssValidator.class}) 19 | public @interface Xss { 20 | 21 | String message() default "不允许任何脚本运行"; 22 | 23 | Class[] groups() default {}; 24 | 25 | Class[] payload() default {}; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/java/org/ruoyi/common/core/xss/XssValidator.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.core.xss; 2 | 3 | import cn.hutool.core.util.ReUtil; 4 | import cn.hutool.http.HtmlUtil; 5 | import jakarta.validation.ConstraintValidator; 6 | import jakarta.validation.ConstraintValidatorContext; 7 | 8 | /** 9 | * 自定义xss校验注解实现 10 | * 11 | * @author Lion Li 12 | */ 13 | public class XssValidator implements ConstraintValidator { 14 | 15 | @Override 16 | public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) { 17 | return !ReUtil.contains(HtmlUtil.RE_HTML_MARK, value); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.ruoyi.common.core.config.ApplicationConfig 2 | org.ruoyi.common.core.config.AsyncConfig 3 | org.ruoyi.common.core.config.RuoYiConfig 4 | org.ruoyi.common.core.config.ThreadPoolConfig 5 | org.ruoyi.common.core.config.ValidatorConfig 6 | org.ruoyi.common.core.utils.SpringUtils 7 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-doc/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.ruoyi.common.doc.config.SpringDocConfig 2 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-encrypt/src/main/java/org/ruoyi/common/encrypt/core/EncryptContext.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.encrypt.core; 2 | 3 | import lombok.Data; 4 | import org.ruoyi.common.encrypt.enumd.AlgorithmType; 5 | import org.ruoyi.common.encrypt.enumd.EncodeType; 6 | 7 | /** 8 | * 加密上下文 用于encryptor传递必要的参数。 9 | * 10 | * @author 老马 11 | * @version 4.6.0 12 | */ 13 | @Data 14 | public class EncryptContext { 15 | 16 | /** 17 | * 默认算法 18 | */ 19 | private AlgorithmType algorithm; 20 | 21 | /** 22 | * 安全秘钥 23 | */ 24 | private String password; 25 | 26 | /** 27 | * 公钥 28 | */ 29 | private String publicKey; 30 | 31 | /** 32 | * 私钥 33 | */ 34 | private String privateKey; 35 | 36 | /** 37 | * 编码方式,base64/hex 38 | */ 39 | private EncodeType encode; 40 | 41 | } 42 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-encrypt/src/main/java/org/ruoyi/common/encrypt/core/IEncryptor.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.encrypt.core; 2 | 3 | import org.ruoyi.common.encrypt.enumd.AlgorithmType; 4 | import org.ruoyi.common.encrypt.enumd.EncodeType; 5 | 6 | /** 7 | * 加解者 8 | * 9 | * @author 老马 10 | * @version 4.6.0 11 | */ 12 | public interface IEncryptor { 13 | 14 | /** 15 | * 获得当前算法 16 | */ 17 | AlgorithmType algorithm(); 18 | 19 | /** 20 | * 加密 21 | * 22 | * @param value 待加密字符串 23 | * @param encodeType 加密后的编码格式 24 | * @return 加密后的字符串 25 | */ 26 | String encrypt(String value, EncodeType encodeType); 27 | 28 | /** 29 | * 解密 30 | * 31 | * @param value 待加密字符串 32 | * @return 解密后的字符串 33 | */ 34 | String decrypt(String value); 35 | } 36 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-encrypt/src/main/java/org/ruoyi/common/encrypt/core/encryptor/AbstractEncryptor.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.encrypt.core.encryptor; 2 | 3 | import org.ruoyi.common.encrypt.core.EncryptContext; 4 | import org.ruoyi.common.encrypt.core.IEncryptor; 5 | 6 | /** 7 | * 所有加密执行者的基类 8 | * 9 | * @author 老马 10 | * @version 4.6.0 11 | */ 12 | public abstract class AbstractEncryptor implements IEncryptor { 13 | 14 | public AbstractEncryptor(EncryptContext context) { 15 | // 用户配置校验与配置注入 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-encrypt/src/main/java/org/ruoyi/common/encrypt/enumd/AlgorithmType.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.encrypt.enumd; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import org.ruoyi.common.encrypt.core.encryptor.*; 6 | 7 | /** 8 | * 算法名称 9 | * 10 | * @author 老马 11 | * @version 4.6.0 12 | */ 13 | @Getter 14 | @AllArgsConstructor 15 | public enum AlgorithmType { 16 | 17 | /** 18 | * 默认走yml配置 19 | */ 20 | DEFAULT(null), 21 | 22 | /** 23 | * base64 24 | */ 25 | BASE64(Base64Encryptor.class), 26 | 27 | /** 28 | * aes 29 | */ 30 | AES(AesEncryptor.class), 31 | 32 | /** 33 | * rsa 34 | */ 35 | RSA(RsaEncryptor.class), 36 | 37 | /** 38 | * sm2 39 | */ 40 | SM2(Sm2Encryptor.class), 41 | 42 | /** 43 | * sm4 44 | */ 45 | SM4(Sm4Encryptor.class); 46 | 47 | private final Class clazz; 48 | } 49 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-encrypt/src/main/java/org/ruoyi/common/encrypt/enumd/EncodeType.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.encrypt.enumd; 2 | 3 | /** 4 | * 编码类型 5 | * 6 | * @author 老马 7 | * @version 4.6.0 8 | */ 9 | public enum EncodeType { 10 | 11 | /** 12 | * 默认使用yml配置 13 | */ 14 | DEFAULT, 15 | 16 | /** 17 | * base64编码 18 | */ 19 | BASE64, 20 | 21 | /** 22 | * 16进制编码 23 | */ 24 | HEX; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-encrypt/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.ruoyi.common.encrypt.config.EncryptorAutoConfiguration 2 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-excel/src/main/java/org/ruoyi/common/excel/annotation/CellMerge.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.excel.annotation; 2 | 3 | import org.ruoyi.common.excel.core.CellMergeStrategy; 4 | 5 | import java.lang.annotation.*; 6 | 7 | /** 8 | * excel 列单元格合并(合并列相同项) 9 | * 10 | * 需搭配 {@link CellMergeStrategy} 策略使用 11 | * 12 | * @author Lion Li 13 | */ 14 | @Target(ElementType.FIELD) 15 | @Retention(RetentionPolicy.RUNTIME) 16 | @Inherited 17 | public @interface CellMerge { 18 | 19 | /** 20 | * col index 21 | */ 22 | int index() default -1; 23 | 24 | } 25 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-excel/src/main/java/org/ruoyi/common/excel/annotation/ExcelDictFormat.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.excel.annotation; 2 | 3 | import org.ruoyi.common.core.utils.StringUtils; 4 | 5 | import java.lang.annotation.*; 6 | 7 | /** 8 | * 字典格式化 9 | * 10 | * @author Lion Li 11 | */ 12 | @Target({ElementType.FIELD}) 13 | @Retention(RetentionPolicy.RUNTIME) 14 | @Inherited 15 | public @interface ExcelDictFormat { 16 | 17 | /** 18 | * 如果是字典类型,请设置字典的type值 (如: sys_user_sex) 19 | */ 20 | String dictType() default ""; 21 | 22 | /** 23 | * 读取内容转表达式 (如: 0=男,1=女,2=未知) 24 | */ 25 | String readConverterExp() default ""; 26 | 27 | /** 28 | * 分隔符,读取字符串组内容 29 | */ 30 | String separator() default StringUtils.SEPARATOR; 31 | 32 | } 33 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-excel/src/main/java/org/ruoyi/common/excel/annotation/ExcelEnumFormat.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.excel.annotation; 2 | 3 | import java.lang.annotation.*; 4 | 5 | /** 6 | * 枚举格式化 7 | * 8 | * @author Liang 9 | */ 10 | @Target({ElementType.FIELD}) 11 | @Retention(RetentionPolicy.RUNTIME) 12 | @Inherited 13 | public @interface ExcelEnumFormat { 14 | 15 | /** 16 | * 字典枚举类型 17 | */ 18 | Class> enumClass(); 19 | 20 | /** 21 | * 字典枚举类中对应的code属性名称,默认为code 22 | */ 23 | String codeField() default "code"; 24 | 25 | /** 26 | * 字典枚举类中对应的text属性名称,默认为text 27 | */ 28 | String textField() default "text"; 29 | 30 | } 31 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-excel/src/main/java/org/ruoyi/common/excel/core/ExcelListener.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.excel.core; 2 | 3 | import com.alibaba.excel.read.listener.ReadListener; 4 | 5 | /** 6 | * Excel 导入监听 7 | * 8 | * @author Lion Li 9 | */ 10 | public interface ExcelListener extends ReadListener { 11 | 12 | ExcelResult getExcelResult(); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-excel/src/main/java/org/ruoyi/common/excel/core/ExcelResult.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.excel.core; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * excel返回对象 7 | * 8 | * @author Lion Li 9 | */ 10 | public interface ExcelResult { 11 | 12 | /** 13 | * 对象列表 14 | */ 15 | List getList(); 16 | 17 | /** 18 | * 错误列表 19 | */ 20 | List getErrorList(); 21 | 22 | /** 23 | * 导入回执 24 | */ 25 | String getAnalysis(); 26 | } 27 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-idempotent/src/main/java/org/ruoyi/common/idempotent/annotation/RepeatSubmit.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.idempotent.annotation; 2 | 3 | import java.lang.annotation.*; 4 | import java.util.concurrent.TimeUnit; 5 | 6 | /** 7 | * 自定义注解防止表单重复提交 8 | * 9 | * @author Lion Li 10 | */ 11 | @Inherited 12 | @Target(ElementType.METHOD) 13 | @Retention(RetentionPolicy.RUNTIME) 14 | @Documented 15 | public @interface RepeatSubmit { 16 | 17 | /** 18 | * 间隔时间(ms),小于此时间视为重复提交 19 | */ 20 | int interval() default 5000; 21 | 22 | TimeUnit timeUnit() default TimeUnit.MILLISECONDS; 23 | 24 | /** 25 | * 提示消息 支持国际化 格式为 {code} 26 | */ 27 | String message() default "{repeat.submit.message}"; 28 | 29 | } 30 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-idempotent/src/main/java/org/ruoyi/common/idempotent/config/IdempotentConfig.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.idempotent.config; 2 | 3 | import org.ruoyi.common.idempotent.aspectj.RepeatSubmitAspect; 4 | import org.springframework.boot.autoconfigure.AutoConfiguration; 5 | import org.springframework.context.annotation.Bean; 6 | import org.springframework.data.redis.connection.RedisConfiguration; 7 | 8 | /** 9 | * 幂等功能配置 10 | * 11 | * @author Lion Li 12 | */ 13 | @AutoConfiguration(after = RedisConfiguration.class) 14 | public class IdempotentConfig { 15 | 16 | @Bean 17 | public RepeatSubmitAspect repeatSubmitAspect() { 18 | return new RepeatSubmitAspect(); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-idempotent/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.ruoyi.common.idempotent.config.IdempotentConfig 2 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-json/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.ruoyi.common.json.config.JacksonConfig 2 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-log/src/main/java/org/ruoyi/common/log/enums/BusinessStatus.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.log.enums; 2 | 3 | /** 4 | * 操作状态 5 | * 6 | * @author ruoyi 7 | */ 8 | public enum BusinessStatus { 9 | /** 10 | * 成功 11 | */ 12 | SUCCESS, 13 | 14 | /** 15 | * 失败 16 | */ 17 | FAIL, 18 | } 19 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-log/src/main/java/org/ruoyi/common/log/enums/BusinessType.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.log.enums; 2 | 3 | /** 4 | * 业务操作类型 5 | * 6 | * @author ruoyi 7 | */ 8 | public enum BusinessType { 9 | /** 10 | * 其它 11 | */ 12 | OTHER, 13 | 14 | /** 15 | * 新增 16 | */ 17 | INSERT, 18 | 19 | /** 20 | * 修改 21 | */ 22 | UPDATE, 23 | 24 | /** 25 | * 删除 26 | */ 27 | DELETE, 28 | 29 | /** 30 | * 授权 31 | */ 32 | GRANT, 33 | 34 | /** 35 | * 导出 36 | */ 37 | EXPORT, 38 | 39 | /** 40 | * 导入 41 | */ 42 | IMPORT, 43 | 44 | /** 45 | * 强退 46 | */ 47 | FORCE, 48 | 49 | /** 50 | * 生成代码 51 | */ 52 | GENCODE, 53 | 54 | /** 55 | * 清空数据 56 | */ 57 | CLEAN, 58 | } 59 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-log/src/main/java/org/ruoyi/common/log/enums/OperatorType.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.log.enums; 2 | 3 | /** 4 | * 操作人类别 5 | * 6 | * @author ruoyi 7 | */ 8 | public enum OperatorType { 9 | /** 10 | * 其它 11 | */ 12 | OTHER, 13 | 14 | /** 15 | * 后台用户 16 | */ 17 | MANAGE, 18 | 19 | /** 20 | * 手机端用户 21 | */ 22 | MOBILE 23 | } 24 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-log/src/main/java/org/ruoyi/common/log/event/LogininforEvent.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.log.event; 2 | 3 | import jakarta.servlet.http.HttpServletRequest; 4 | import lombok.Data; 5 | 6 | import java.io.Serial; 7 | import java.io.Serializable; 8 | 9 | /** 10 | * 登录事件 11 | * 12 | * @author Lion Li 13 | */ 14 | 15 | @Data 16 | public class LogininforEvent implements Serializable { 17 | 18 | @Serial 19 | private static final long serialVersionUID = 1L; 20 | 21 | /** 22 | * 租户ID 23 | */ 24 | private String tenantId; 25 | 26 | /** 27 | * 用户账号 28 | */ 29 | private String username; 30 | 31 | /** 32 | * 登录状态 0成功 1失败 33 | */ 34 | private String status; 35 | 36 | /** 37 | * 提示消息 38 | */ 39 | private String message; 40 | 41 | /** 42 | * 请求体 43 | */ 44 | private HttpServletRequest request; 45 | 46 | /** 47 | * 其他参数 48 | */ 49 | private Object[] args; 50 | 51 | } 52 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-log/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.ruoyi.common.log.aspect.LogAspect 2 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-mail/src/main/java/org/ruoyi/common/mail/utils/UserPassAuthenticator.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.mail.utils; 2 | 3 | import jakarta.mail.Authenticator; 4 | import jakarta.mail.PasswordAuthentication; 5 | 6 | /** 7 | * 用户名密码验证器 8 | * 9 | * @author looly 10 | * @since 3.1.2 11 | */ 12 | public class UserPassAuthenticator extends Authenticator { 13 | 14 | private final String user; 15 | private final String pass; 16 | 17 | /** 18 | * 构造 19 | * 20 | * @param user 用户名 21 | * @param pass 密码 22 | */ 23 | public UserPassAuthenticator(String user, String pass) { 24 | this.user = user; 25 | this.pass = pass; 26 | } 27 | 28 | @Override 29 | protected PasswordAuthentication getPasswordAuthentication() { 30 | return new PasswordAuthentication(this.user, this.pass); 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-mail/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.ruoyi.common.mail.config.MailConfig 2 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-mybatis/src/main/java/org/ruoyi/annotation/DataColumn.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.annotation; 2 | 3 | import java.lang.annotation.*; 4 | 5 | /** 6 | * 数据权限注解,用于标记数据权限的占位符关键字和替换值 7 | *

8 | * 一个注解只能对应一个模板 9 | *

10 | * 11 | * @author Lion Li 12 | * @version 3.5.0 13 | */ 14 | @Target(ElementType.METHOD) 15 | @Retention(RetentionPolicy.RUNTIME) 16 | @Documented 17 | public @interface DataColumn { 18 | 19 | /** 20 | * 数据权限模板的占位符关键字,默认为 "deptName" 21 | * 22 | * @return 占位符关键字数组 23 | */ 24 | String[] key() default "deptName"; 25 | 26 | /** 27 | * 数据权限模板的占位符替换值,默认为 "dept_id" 28 | * 29 | * @return 占位符替换值数组 30 | */ 31 | String[] value() default "dept_id"; 32 | 33 | /** 34 | * 权限标识符 用于通过菜单权限标识符来获取数据权限 35 | * 拥有此标识符的角色 将不会拼接此角色的数据过滤sql 36 | * 37 | * @return 权限标识符 38 | */ 39 | String permission() default ""; 40 | } 41 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-mybatis/src/main/java/org/ruoyi/annotation/DataPermission.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.annotation; 2 | 3 | import java.lang.annotation.*; 4 | 5 | /** 6 | * 数据权限组注解,用于标记数据权限配置数组 7 | * 8 | * @author Lion Li 9 | * @version 3.5.0 10 | */ 11 | @Target({ElementType.METHOD, ElementType.TYPE}) 12 | @Retention(RetentionPolicy.RUNTIME) 13 | @Documented 14 | public @interface DataPermission { 15 | 16 | /** 17 | * 数据权限配置数组,用于指定数据权限的占位符关键字和替换值 18 | * 19 | * @return 数据权限配置数组 20 | */ 21 | DataColumn[] value(); 22 | 23 | /** 24 | * 权限拼接标识符(用于指定连接语句的sql符号) 25 | * 如不填 默认 select 用 OR 其他语句用 AND 26 | * 内容 OR 或者 AND 27 | */ 28 | String joinStr() default ""; 29 | 30 | } 31 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.ruoyi.config.MybatisPlusConfig 2 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-mybatis/src/main/resources/spy.properties: -------------------------------------------------------------------------------- 1 | # p6spy 性能分析插件配置文件 2 | modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory 3 | # 自定义日志打印 4 | logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger 5 | #日志输出到控制台 6 | appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger 7 | # 使用日志系统记录 sql 8 | #appender=com.p6spy.engine.spy.appender.Slf4JLogger 9 | # 取消JDBC URL前缀 10 | useprefix=true 11 | # 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset. 12 | excludecategories=info,debug,result,commit,resultset 13 | # 日期格式 14 | dateformat=yyyy-MM-dd HH:mm:ss 15 | # SQL语句打印时间格式 16 | databaseDialectTimestampFormat=yyyy-MM-dd HH:mm:ss 17 | # 是否过滤 Log 18 | filter=true 19 | # 过滤 Log 时所排除的 sql 关键字,以逗号分隔 20 | exclude= 21 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-oss/src/main/java/org/ruoyi/common/oss/constant/OssConstant.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.oss.constant; 2 | 3 | import java.util.Arrays; 4 | import java.util.List; 5 | 6 | /** 7 | * 对象存储常量 8 | * 9 | * @author Lion Li 10 | */ 11 | public interface OssConstant { 12 | 13 | /** 14 | * 默认配置KEY 15 | */ 16 | String DEFAULT_CONFIG_KEY = "sys_oss:default_config"; 17 | 18 | /** 19 | * 预览列表资源开关Key 20 | */ 21 | String PEREVIEW_LIST_RESOURCE_KEY = "sys.oss.previewListResource"; 22 | 23 | /** 24 | * 系统数据ids 25 | */ 26 | List SYSTEM_DATA_IDS = Arrays.asList(1L, 2L, 3L, 4L); 27 | 28 | /** 29 | * 云服务商 30 | */ 31 | String[] CLOUD_SERVICE = new String[] {"aliyun", "qcloud", "qiniu", "obs"}; 32 | 33 | /** 34 | * https 状态 35 | */ 36 | String IS_HTTPS = "Y"; 37 | 38 | } 39 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-oss/src/main/java/org/ruoyi/common/oss/entity/UploadResult.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.oss.entity; 2 | 3 | import lombok.Builder; 4 | import lombok.Data; 5 | 6 | /** 7 | * 上传返回体 8 | * 9 | * @author Lion Li 10 | */ 11 | @Data 12 | @Builder 13 | public class UploadResult { 14 | 15 | /** 16 | * 文件路径 17 | */ 18 | private String url; 19 | 20 | /** 21 | * 文件名 22 | */ 23 | private String filename; 24 | } 25 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-oss/src/main/java/org/ruoyi/common/oss/enumd/PolicyType.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.oss.enumd; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * minio策略配置 8 | * 9 | * @author Lion Li 10 | */ 11 | @Getter 12 | @AllArgsConstructor 13 | public enum PolicyType { 14 | 15 | /** 16 | * 只读 17 | */ 18 | READ("read-only"), 19 | 20 | /** 21 | * 只写 22 | */ 23 | WRITE("write-only"), 24 | 25 | /** 26 | * 读写 27 | */ 28 | READ_WRITE("read-write"); 29 | 30 | /** 31 | * 类型 32 | */ 33 | private final String type; 34 | 35 | } 36 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-oss/src/main/java/org/ruoyi/common/oss/exception/OssException.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.oss.exception; 2 | 3 | import java.io.Serial; 4 | 5 | /** 6 | * OSS异常类 7 | * 8 | * @author Lion Li 9 | */ 10 | public class OssException extends RuntimeException { 11 | 12 | @Serial 13 | private static final long serialVersionUID = 1L; 14 | 15 | public OssException(String msg) { 16 | super(msg); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-pay/src/main/java/org/ruoyi/common/config/PayConfig.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.config; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 支付配置信息 7 | * 8 | * @author Admin 9 | */ 10 | @Data 11 | public class PayConfig { 12 | 13 | /** 14 | * 商户ID 15 | */ 16 | private String pid; 17 | 18 | /** 19 | * 接口地址 20 | */ 21 | private String payUrl; 22 | 23 | /** 24 | * 私钥 25 | */ 26 | private String key ; 27 | 28 | /** 29 | * 服务器异步通知地址 30 | */ 31 | private String notify_url; 32 | 33 | /** 34 | * 页面跳转通知地址 35 | */ 36 | private String return_url; 37 | 38 | /** 39 | * 支付方式 40 | */ 41 | private String type; 42 | 43 | /** 44 | * 设备类型 45 | */ 46 | private String device; 47 | 48 | /** 49 | * 加密方式默认MD5 50 | */ 51 | private String sign_type; 52 | 53 | } 54 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-pay/src/main/java/org/ruoyi/common/service/PayService.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.service; 2 | 3 | /** 4 | * 支付服务 5 | * 6 | * @author: wangle 7 | * @date: 2023/7/3 8 | */ 9 | public interface PayService { 10 | 11 | /** 12 | * 获取支付地址 13 | * 14 | * @Date 2023/7/3 15 | * @param orderNo 16 | * @param name 17 | * @param money 18 | * @param clientIp 19 | * @return String 20 | **/ 21 | String getPayUrl(String orderNo, String name, double money, String clientIp); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-ratelimiter/src/main/java/org/ruoyi/common/ratelimiter/annotation/RateLimiter.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.ratelimiter.annotation; 2 | 3 | import org.ruoyi.common.ratelimiter.enums.LimitType; 4 | 5 | import java.lang.annotation.*; 6 | 7 | /** 8 | * 限流注解 9 | * 10 | * @author Lion Li 11 | */ 12 | @Target(ElementType.METHOD) 13 | @Retention(RetentionPolicy.RUNTIME) 14 | @Documented 15 | public @interface RateLimiter { 16 | /** 17 | * 限流key,支持使用Spring el表达式来动态获取方法上的参数值 18 | * 格式类似于 #code.id #{#code} 19 | */ 20 | String key() default ""; 21 | 22 | /** 23 | * 限流时间,单位秒 24 | */ 25 | int time() default 60; 26 | 27 | /** 28 | * 限流次数 29 | */ 30 | int count() default 100; 31 | 32 | /** 33 | * 限流类型 34 | */ 35 | LimitType limitType() default LimitType.DEFAULT; 36 | 37 | /** 38 | * 提示消息 支持国际化 格式为 {code} 39 | */ 40 | String message() default "{rate.limiter.message}"; 41 | } 42 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-ratelimiter/src/main/java/org/ruoyi/common/ratelimiter/config/RateLimiterConfig.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.ratelimiter.config; 2 | 3 | import org.ruoyi.common.ratelimiter.aspectj.RateLimiterAspect; 4 | import org.springframework.boot.autoconfigure.AutoConfiguration; 5 | import org.springframework.context.annotation.Bean; 6 | import org.springframework.data.redis.connection.RedisConfiguration; 7 | 8 | /** 9 | * @author guangxin 10 | * @date 2023/1/18 11 | */ 12 | @AutoConfiguration(after = RedisConfiguration.class) 13 | public class RateLimiterConfig { 14 | 15 | @Bean 16 | public RateLimiterAspect rateLimiterAspect() { 17 | return new RateLimiterAspect(); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-ratelimiter/src/main/java/org/ruoyi/common/ratelimiter/enums/LimitType.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.ratelimiter.enums; 2 | 3 | /** 4 | * 限流类型 5 | * 6 | * @author ruoyi 7 | */ 8 | 9 | public enum LimitType { 10 | /** 11 | * 默认策略全局限流 12 | */ 13 | DEFAULT, 14 | 15 | /** 16 | * 根据请求者IP进行限流 17 | */ 18 | IP, 19 | 20 | /** 21 | * 实例限流(集群多后端实例) 22 | */ 23 | CLUSTER 24 | } 25 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-ratelimiter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.ruoyi.common.ratelimiter.config.RateLimiterConfig 2 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.ruoyi.common.redis.config.RedisConfig 2 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-satoken/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.ruoyi.common.satoken.config.SaTokenConfig 2 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-security/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | org.ruoyi 7 | ruoyi-common 8 | ${revision} 9 | ../pom.xml 10 | 11 | 4.0.0 12 | 13 | ruoyi-common-security 14 | 15 | 16 | ruoyi-common-security 安全模块 17 | 18 | 19 | 20 | 21 | org.ruoyi 22 | ruoyi-common-satoken 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-security/src/main/java/org/ruoyi/common/security/config/properties/SecurityProperties.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.security.config.properties; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | 6 | /** 7 | * Security 配置属性 8 | * 9 | * @author Lion Li 10 | */ 11 | @Data 12 | @ConfigurationProperties(prefix = "security") 13 | public class SecurityProperties { 14 | 15 | /** 16 | * 排除路径 17 | */ 18 | private String[] excludes; 19 | 20 | 21 | } 22 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.ruoyi.common.security.handler.GlobalExceptionHandler 2 | org.ruoyi.common.security.handler.AllUrlHandler 3 | org.ruoyi.common.security.config.SecurityConfig 4 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-sensitive/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | org.ruoyi 7 | ruoyi-common 8 | ${revision} 9 | ../pom.xml 10 | 11 | 4.0.0 12 | 13 | ruoyi-common-sensitive 14 | 15 | 16 | ruoyi-common-sensitive 脱敏模块 17 | 18 | 19 | 20 | 21 | org.ruoyi 22 | ruoyi-common-json 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-sensitive/src/main/java/org/ruoyi/common/sensitive/annotation/Sensitive.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.sensitive.annotation; 2 | 3 | import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; 4 | import com.fasterxml.jackson.databind.annotation.JsonSerialize; 5 | import org.ruoyi.common.sensitive.core.SensitiveStrategy; 6 | import org.ruoyi.common.sensitive.handler.SensitiveHandler; 7 | 8 | import java.lang.annotation.ElementType; 9 | import java.lang.annotation.Retention; 10 | import java.lang.annotation.RetentionPolicy; 11 | import java.lang.annotation.Target; 12 | 13 | /** 14 | * 数据脱敏注解 15 | * 16 | * @author zhujie 17 | */ 18 | @Retention(RetentionPolicy.RUNTIME) 19 | @Target(ElementType.FIELD) 20 | @JacksonAnnotationsInside 21 | @JsonSerialize(using = SensitiveHandler.class) 22 | public @interface Sensitive { 23 | SensitiveStrategy strategy(); 24 | } 25 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-sensitive/src/main/java/org/ruoyi/common/sensitive/core/SensitiveService.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.sensitive.core; 2 | 3 | /** 4 | * 脱敏服务 5 | * 默认管理员不过滤 6 | * 需自行根据业务重写实现 7 | * 8 | * @author Lion Li 9 | * @version 3.6.0 10 | */ 11 | public interface SensitiveService { 12 | 13 | /** 14 | * 是否脱敏 15 | */ 16 | boolean isSensitive(); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-sms/src/main/java/org/ruoyi/common/sms/config/properties/SmsProperties.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.sms.config.properties; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | 6 | /** 7 | * SMS短信 配置属性 8 | * 9 | * @author Lion Li 10 | * @version 4.2.0 11 | */ 12 | @Data 13 | @ConfigurationProperties(prefix = "sms") 14 | public class SmsProperties { 15 | 16 | private Boolean enabled; 17 | 18 | /** 19 | * 配置节点 20 | * 阿里云 dysmsapi.aliyuncs.com 21 | * 腾讯云 sms.tencentcloudapi.com 22 | */ 23 | private String endpoint; 24 | 25 | /** 26 | * key 27 | */ 28 | private String accessKeyId; 29 | 30 | /** 31 | * 密匙 32 | */ 33 | private String accessKeySecret; 34 | 35 | /* 36 | * 短信签名 37 | */ 38 | private String signName; 39 | 40 | /** 41 | * 短信应用ID (腾讯专属) 42 | */ 43 | private String sdkAppId; 44 | 45 | } 46 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-sms/src/main/java/org/ruoyi/common/sms/core/SmsTemplate.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.sms.core; 2 | 3 | import org.ruoyi.common.sms.entity.SmsResult; 4 | 5 | import java.util.Map; 6 | 7 | /** 8 | * 短信模板 9 | * 10 | * @author Lion Li 11 | * @version 4.2.0 12 | */ 13 | public interface SmsTemplate { 14 | 15 | /** 16 | * 发送短信 17 | * 18 | * @param phones 电话号(多个逗号分割) 19 | * @param templateId 模板id 20 | * @param param 模板对应参数 21 | * 阿里 需使用 模板变量名称对应内容 例如: code=1234 22 | * 腾讯 需使用 模板变量顺序对应内容 例如: 1=1234, 1为模板内第一个参数 23 | */ 24 | SmsResult send(String phones, String templateId, Map param); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-sms/src/main/java/org/ruoyi/common/sms/entity/SmsResult.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.sms.entity; 2 | 3 | import lombok.Builder; 4 | import lombok.Data; 5 | 6 | /** 7 | * 上传返回体 8 | * 9 | * @author Lion Li 10 | */ 11 | @Data 12 | @Builder 13 | public class SmsResult { 14 | 15 | /** 16 | * 是否成功 17 | */ 18 | private boolean isSuccess; 19 | 20 | /** 21 | * 响应消息 22 | */ 23 | private String message; 24 | 25 | /** 26 | * 实际响应体 27 | *

28 | * 可自行转换为 SDK 对应的 SendSmsResponse 29 | */ 30 | private String response; 31 | } 32 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-sms/src/main/java/org/ruoyi/common/sms/exception/SmsException.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.sms.exception; 2 | 3 | import java.io.Serial; 4 | 5 | /** 6 | * Sms异常类 7 | * 8 | * @author Lion Li 9 | */ 10 | public class SmsException extends RuntimeException { 11 | 12 | @Serial 13 | private static final long serialVersionUID = 1L; 14 | 15 | public SmsException(String msg) { 16 | super(msg); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-sms/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.ruoyi.common.sms.config.SmsConfig 2 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-tenant/src/main/java/org/ruoyi/common/tenant/core/TenantEntity.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.tenant.core; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.ruoyi.core.domain.BaseEntity; 6 | 7 | 8 | /** 9 | * 租户基类 10 | * 11 | * @author Michelle.Chung 12 | */ 13 | @Data 14 | @EqualsAndHashCode(callSuper = true) 15 | public class TenantEntity extends BaseEntity { 16 | 17 | /** 18 | * 租户编号 19 | */ 20 | private String tenantId; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-tenant/src/main/java/org/ruoyi/common/tenant/exception/TenantException.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.tenant.exception; 2 | 3 | import org.ruoyi.common.core.exception.base.BaseException; 4 | 5 | import java.io.Serial; 6 | 7 | /** 8 | * 租户异常类 9 | * 10 | * @author Lion Li 11 | */ 12 | public class TenantException extends BaseException { 13 | 14 | @Serial 15 | private static final long serialVersionUID = 1L; 16 | 17 | public TenantException(String code, Object... args) { 18 | super("tenant", code, args, null); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-tenant/src/main/java/org/ruoyi/common/tenant/properties/TenantProperties.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.tenant.properties; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 租户 配置属性 10 | * 11 | * @author Lion Li 12 | */ 13 | @Data 14 | @ConfigurationProperties(prefix = "tenant") 15 | public class TenantProperties { 16 | 17 | /** 18 | * 是否启用 19 | */ 20 | private Boolean enable; 21 | 22 | /** 23 | * 排除表 24 | */ 25 | private List excludes; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-tenant/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.ruoyi.common.tenant.config.TenantConfig 2 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-translation/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | org.ruoyi 7 | ruoyi-common 8 | ${revision} 9 | ../pom.xml 10 | 11 | 4.0.0 12 | 13 | ruoyi-common-translation 14 | 15 | 16 | ruoyi-common-translation 通用翻译功能 17 | 18 | 19 | 20 | 21 | 22 | org.ruoyi 23 | ruoyi-common-json 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-translation/src/main/java/org/ruoyi/common/translation/annotation/TranslationType.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.translation.annotation; 2 | 3 | import org.ruoyi.common.translation.core.TranslationInterface; 4 | 5 | import java.lang.annotation.*; 6 | 7 | /** 8 | * 翻译类型注解 (标注到{@link TranslationInterface} 的实现类) 9 | * 10 | * @author Lion Li 11 | */ 12 | @Inherited 13 | @Retention(RetentionPolicy.RUNTIME) 14 | @Target({ElementType.TYPE}) 15 | @Documented 16 | public @interface TranslationType { 17 | 18 | /** 19 | * 类型 20 | */ 21 | String type(); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-translation/src/main/java/org/ruoyi/common/translation/constant/TransConstant.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.translation.constant; 2 | 3 | /** 4 | * 翻译常量 5 | * 6 | * @author Lion Li 7 | */ 8 | public interface TransConstant { 9 | 10 | /** 11 | * 用户id转账号 12 | */ 13 | String USER_ID_TO_NAME = "user_id_to_name"; 14 | 15 | /** 16 | * 部门id转名称 17 | */ 18 | String DEPT_ID_TO_NAME = "dept_id_to_name"; 19 | 20 | /** 21 | * 字典type转label 22 | */ 23 | String DICT_TYPE_TO_LABEL = "dict_type_to_label"; 24 | 25 | /** 26 | * ossId转url 27 | */ 28 | String OSS_ID_TO_URL = "oss_id_to_url"; 29 | 30 | } 31 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-translation/src/main/java/org/ruoyi/common/translation/core/TranslationInterface.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.translation.core; 2 | 3 | import org.ruoyi.common.translation.annotation.TranslationType; 4 | 5 | /** 6 | * 翻译接口 (实现类需标注 {@link TranslationType} 注解标明翻译类型) 7 | * 8 | * @author Lion Li 9 | */ 10 | public interface TranslationInterface { 11 | 12 | /** 13 | * 翻译 14 | * 15 | * @param key 需要被翻译的键(不为空) 16 | * @param other 其他参数 17 | * @return 返回键对应的值 18 | */ 19 | T translation(Object key, String other); 20 | } 21 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-translation/src/main/java/org/ruoyi/common/translation/core/impl/UserNameTranslationImpl.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.translation.core.impl; 2 | 3 | import lombok.AllArgsConstructor; 4 | import org.ruoyi.common.core.service.UserService; 5 | import org.ruoyi.common.translation.annotation.TranslationType; 6 | import org.ruoyi.common.translation.constant.TransConstant; 7 | import org.ruoyi.common.translation.core.TranslationInterface; 8 | 9 | /** 10 | * 用户名翻译实现 11 | * 12 | * @author Lion Li 13 | */ 14 | @AllArgsConstructor 15 | @TranslationType(type = TransConstant.USER_ID_TO_NAME) 16 | public class UserNameTranslationImpl implements TranslationInterface { 17 | 18 | private final UserService userService; 19 | 20 | @Override 21 | public String translation(Object key, String other) { 22 | if (key instanceof Long id) { 23 | return userService.selectUserNameById(id); 24 | } 25 | return null; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.ruoyi.common.translation.config.TranslationConfig 2 | org.ruoyi.common.translation.core.impl.DeptNameTranslationImpl 3 | org.ruoyi.common.translation.core.impl.DictTypeTranslationImpl 4 | org.ruoyi.common.translation.core.impl.OssUrlTranslationImpl 5 | org.ruoyi.common.translation.core.impl.UserNameTranslationImpl 6 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-web/src/main/java/org/ruoyi/common/web/config/I18nConfig.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.web.config; 2 | 3 | import org.ruoyi.common.web.core.I18nLocaleResolver; 4 | import org.springframework.boot.autoconfigure.AutoConfiguration; 5 | import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration; 6 | import org.springframework.context.annotation.Bean; 7 | import org.springframework.web.servlet.LocaleResolver; 8 | 9 | /** 10 | * 国际化配置 11 | * 12 | * @author Lion Li 13 | */ 14 | @AutoConfiguration(before = WebMvcAutoConfiguration.class) 15 | public class I18nConfig { 16 | 17 | @Bean 18 | public LocaleResolver localeResolver() { 19 | return new I18nLocaleResolver(); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-web/src/main/java/org/ruoyi/common/web/config/properties/CaptchaProperties.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.web.config.properties; 2 | 3 | import lombok.Data; 4 | import org.ruoyi.common.web.enums.CaptchaCategory; 5 | import org.ruoyi.common.web.enums.CaptchaType; 6 | import org.springframework.boot.context.properties.ConfigurationProperties; 7 | 8 | /** 9 | * 验证码 配置属性 10 | * 11 | * @author Lion Li 12 | */ 13 | @Data 14 | @ConfigurationProperties(prefix = "captcha") 15 | public class CaptchaProperties { 16 | 17 | private Boolean enable; 18 | 19 | /** 20 | * 验证码类型 21 | */ 22 | private CaptchaType type; 23 | 24 | /** 25 | * 验证码类别 26 | */ 27 | private CaptchaCategory category; 28 | 29 | /** 30 | * 数字验证码位数 31 | */ 32 | private Integer numberLength; 33 | 34 | /** 35 | * 字符验证码长度 36 | */ 37 | private Integer charLength; 38 | } 39 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-web/src/main/java/org/ruoyi/common/web/config/properties/XssProperties.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.web.config.properties; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | 6 | /** 7 | * xss过滤 配置属性 8 | * 9 | * @author Lion Li 10 | */ 11 | @Data 12 | @ConfigurationProperties(prefix = "xss") 13 | public class XssProperties { 14 | 15 | /** 16 | * 过滤开关 17 | */ 18 | private String enabled; 19 | 20 | /** 21 | * 排除链接(多个用逗号分隔) 22 | */ 23 | private String excludes; 24 | 25 | /** 26 | * 匹配链接 27 | */ 28 | private String urlPatterns; 29 | 30 | } 31 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-web/src/main/java/org/ruoyi/common/web/core/BaseController.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.web.core; 2 | 3 | import org.ruoyi.common.core.domain.R; 4 | import org.ruoyi.common.core.utils.StringUtils; 5 | 6 | /** 7 | * web层通用数据处理 8 | * 9 | * @author Lion Li 10 | */ 11 | public class BaseController { 12 | 13 | /** 14 | * 响应返回结果 15 | * 16 | * @param rows 影响行数 17 | * @return 操作结果 18 | */ 19 | protected R toAjax(int rows) { 20 | return rows > 0 ? R.ok() : R.fail(); 21 | } 22 | 23 | /** 24 | * 响应返回结果 25 | * 26 | * @param result 结果 27 | * @return 操作结果 28 | */ 29 | protected R toAjax(boolean result) { 30 | return result ? R.ok() : R.fail(); 31 | } 32 | 33 | /** 34 | * 页面跳转 35 | */ 36 | public String redirect(String url) { 37 | return StringUtils.format("redirect:{}", url); 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-web/src/main/java/org/ruoyi/common/web/enums/CaptchaCategory.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.web.enums; 2 | 3 | import cn.hutool.captcha.AbstractCaptcha; 4 | import cn.hutool.captcha.CircleCaptcha; 5 | import cn.hutool.captcha.LineCaptcha; 6 | import cn.hutool.captcha.ShearCaptcha; 7 | import lombok.AllArgsConstructor; 8 | import lombok.Getter; 9 | 10 | /** 11 | * 验证码类别 12 | * 13 | * @author Lion Li 14 | */ 15 | @Getter 16 | @AllArgsConstructor 17 | public enum CaptchaCategory { 18 | 19 | /** 20 | * 线段干扰 21 | */ 22 | LINE(LineCaptcha.class), 23 | 24 | /** 25 | * 圆圈干扰 26 | */ 27 | CIRCLE(CircleCaptcha.class), 28 | 29 | /** 30 | * 扭曲干扰 31 | */ 32 | SHEAR(ShearCaptcha.class); 33 | 34 | private final Class clazz; 35 | } 36 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-web/src/main/java/org/ruoyi/common/web/enums/CaptchaType.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.common.web.enums; 2 | 3 | import cn.hutool.captcha.generator.CodeGenerator; 4 | import cn.hutool.captcha.generator.RandomGenerator; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Getter; 7 | import org.ruoyi.common.web.utils.UnsignedMathGenerator; 8 | 9 | /** 10 | * 验证码类型 11 | * 12 | * @author Lion Li 13 | */ 14 | @Getter 15 | @AllArgsConstructor 16 | public enum CaptchaType { 17 | 18 | /** 19 | * 数字 20 | */ 21 | MATH(UnsignedMathGenerator.class), 22 | 23 | /** 24 | * 字符 25 | */ 26 | CHAR(RandomGenerator.class); 27 | 28 | private final Class clazz; 29 | } 30 | -------------------------------------------------------------------------------- /ruoyi-common/ruoyi-common-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | org.ruoyi.common.web.config.CaptchaConfig 2 | org.ruoyi.common.web.config.FilterConfig 3 | org.ruoyi.common.web.config.I18nConfig 4 | org.ruoyi.common.web.config.ResourcesConfig 5 | org.ruoyi.common.web.config.UndertowConfig 6 | -------------------------------------------------------------------------------- /ruoyi-extend/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | ruoyi-ai 8 | org.ruoyi 9 | ${revision} 10 | ../pom.xml 11 | 12 | 13 | ruoyi-extend 14 | pom 15 | 16 | 17 | ruoyi-mcp-server 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /ruoyi-extend/ruoyi-mcp-server/src/main/java/org/ruoyi/mcpserve/RuoyiMcpServeApplication.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.mcpserve; 2 | 3 | import org.ruoyi.mcpserve.service.ToolService; 4 | import org.springframework.ai.tool.ToolCallbackProvider; 5 | import org.springframework.ai.tool.method.MethodToolCallbackProvider; 6 | import org.springframework.boot.SpringApplication; 7 | import org.springframework.boot.autoconfigure.SpringBootApplication; 8 | import org.springframework.context.annotation.Bean; 9 | 10 | /** 11 | * @author ageer 12 | */ 13 | @SpringBootApplication 14 | public class RuoyiMcpServeApplication { 15 | 16 | public static void main(String[] args) { 17 | SpringApplication.run(RuoyiMcpServeApplication.class, args); 18 | } 19 | 20 | @Bean 21 | public ToolCallbackProvider systemTools(ToolService toolService) { 22 | return MethodToolCallbackProvider.builder().toolObjects(toolService).build(); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /ruoyi-extend/ruoyi-mcp-server/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8081 3 | spring: 4 | ai: 5 | mcp: 6 | server: 7 | name: ruoyi-mcp-serve 8 | version: 1.0.0 9 | 10 | 11 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatMessageMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.mapper; 2 | 3 | 4 | import org.ruoyi.core.mapper.BaseMapperPlus; 5 | import org.ruoyi.domain.ChatMessage; 6 | import org.ruoyi.domain.vo.ChatMessageVo; 7 | 8 | /** 9 | * 聊天消息Mapper接口 10 | * 11 | * @author ageerle 12 | * @date 2025-04-08 13 | */ 14 | public interface ChatMessageMapper extends BaseMapperPlus { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatModelMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.mapper; 2 | 3 | import org.ruoyi.core.mapper.BaseMapperPlus; 4 | import org.ruoyi.domain.ChatModel; 5 | import org.ruoyi.domain.vo.ChatModelVo; 6 | 7 | /** 8 | * 聊天模型Mapper接口 9 | * 10 | * @author ageerle 11 | * @date 2025-04-08 12 | */ 13 | public interface ChatModelMapper extends BaseMapperPlus { 14 | 15 | } 16 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatPayOrderMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.mapper; 2 | 3 | 4 | import org.ruoyi.core.mapper.BaseMapperPlus; 5 | import org.ruoyi.domain.ChatPayOrder; 6 | import org.ruoyi.domain.vo.ChatPayOrderVo; 7 | 8 | /** 9 | * 支付订单Mapper接口 10 | * 11 | * @author ageerle 12 | * @date 2025-04-08 13 | */ 14 | public interface ChatPayOrderMapper extends BaseMapperPlus { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatSessionMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.mapper; 2 | 3 | import org.ruoyi.core.mapper.BaseMapperPlus; 4 | import org.ruoyi.domain.ChatSession; 5 | import org.ruoyi.domain.vo.ChatSessionVo; 6 | 7 | /** 8 | * 会话管理Mapper接口 9 | * 10 | * @author ageerle 11 | * @date 2025-05-03 12 | */ 13 | public interface ChatSessionMapper extends BaseMapperPlus { 14 | 15 | } 16 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatUsageTokenMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.mapper; 2 | 3 | 4 | import org.ruoyi.core.mapper.BaseMapperPlus; 5 | import org.ruoyi.domain.ChatUsageToken; 6 | import org.ruoyi.domain.vo.ChatUsageTokenVo; 7 | 8 | /** 9 | * 用户token使用详情Mapper接口 10 | * 11 | * @author ageerle 12 | * @date 2025-04-08 13 | */ 14 | public interface ChatUsageTokenMapper extends BaseMapperPlus { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatTokenService.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.service; 2 | 3 | import org.ruoyi.domain.ChatUsageToken; 4 | 5 | /** 6 | * 聊天消息Service接口 7 | * 8 | * @author ageerle 9 | * @date 2025-04-08 10 | */ 11 | public interface IChatTokenService { 12 | 13 | /** 14 | * 查询用户token 15 | */ 16 | ChatUsageToken queryByUserId(Long userId, String modelName); 17 | 18 | /** 19 | * 清空用户token 20 | */ 21 | void resetToken(Long userId,String modelName); 22 | 23 | /** 24 | * 修改用户token 25 | */ 26 | void editToken(ChatUsageToken chatToken); 27 | 28 | } 29 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-chat-api/src/main/resources/mapper/ChatMessageMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-chat-api/src/main/resources/mapper/ChatModelMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-chat-api/src/main/resources/mapper/ChatPayOrderMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/CsvFileLoader.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chain.loader; 2 | 3 | import java.io.InputStream; 4 | import java.util.List; 5 | 6 | public class CsvFileLoader implements ResourceLoader { 7 | @Override 8 | public String getContent(InputStream inputStream) { 9 | return null; 10 | } 11 | 12 | @Override 13 | public List getChunkList(String content, String kid) { 14 | return null; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/FolderLoader.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chain.loader; 2 | 3 | import java.io.InputStream; 4 | import java.util.List; 5 | 6 | public class FolderLoader implements ResourceLoader{ 7 | @Override 8 | public String getContent(InputStream inputStream) { 9 | return null; 10 | } 11 | 12 | @Override 13 | public List getChunkList(String content, String kid) { 14 | return null; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/GithubLoader.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chain.loader; 2 | 3 | import java.io.InputStream; 4 | import java.util.List; 5 | 6 | public class GithubLoader implements ResourceLoader { 7 | @Override 8 | public String getContent(InputStream inputStream) { 9 | return null; 10 | } 11 | 12 | @Override 13 | public List getChunkList(String content, String kid) { 14 | return null; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/JsonFileLoader.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chain.loader; 2 | 3 | import java.io.InputStream; 4 | import java.util.List; 5 | 6 | public class JsonFileLoader implements ResourceLoader { 7 | @Override 8 | public String getContent(InputStream inputStream) { 9 | return null; 10 | } 11 | 12 | @Override 13 | public List getChunkList(String content, String kid) { 14 | return null; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/ResourceLoader.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chain.loader; 2 | 3 | import java.io.InputStream; 4 | import java.util.List; 5 | 6 | /** 7 | * 资源载入 8 | */ 9 | public interface ResourceLoader { 10 | 11 | String getContent(InputStream inputStream); 12 | 13 | List getChunkList(String content, String kid); 14 | } 15 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/CodeTextSplitter.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chain.split; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.extern.slf4j.Slf4j; 5 | import org.springframework.stereotype.Component; 6 | 7 | import java.util.List; 8 | 9 | @Component 10 | @AllArgsConstructor 11 | @Slf4j 12 | public class CodeTextSplitter implements TextSplitter { 13 | @Override 14 | public List split(String content, String kid) { 15 | return null; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/MarkdownTextSplitter.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chain.split; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.extern.slf4j.Slf4j; 5 | import org.springframework.stereotype.Component; 6 | 7 | import java.util.List; 8 | 9 | @Component 10 | @AllArgsConstructor 11 | @Slf4j 12 | public class MarkdownTextSplitter implements TextSplitter{ 13 | @Override 14 | public List split(String content, String kid) { 15 | return null; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/TextSplitter.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chain.split; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 文本切分 7 | */ 8 | public interface TextSplitter { 9 | 10 | /** 11 | * 文本切分 12 | * 13 | * @param content 文本内容 14 | * @param kid 知识库id 15 | * @return 切分后的文本列表 16 | */ 17 | List split(String content, String kid); 18 | } 19 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/TokenTextSplitter.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chain.split; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.extern.slf4j.Slf4j; 5 | import org.springframework.stereotype.Component; 6 | 7 | import java.util.List; 8 | 9 | @Component 10 | @AllArgsConstructor 11 | @Slf4j 12 | public class TokenTextSplitter implements TextSplitter { 13 | @Override 14 | public List split(String content, String kid) { 15 | return null; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/KnowledgeInfoUploadBo.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.domain.bo; 2 | 3 | import lombok.Data; 4 | import org.springframework.web.multipart.MultipartFile; 5 | 6 | /** 7 | * @author ageer 8 | */ 9 | @Data 10 | public class KnowledgeInfoUploadBo { 11 | 12 | private String kid; 13 | 14 | private MultipartFile file; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/QueryVectorBo.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.domain.bo; 2 | 3 | 4 | import lombok.Data; 5 | 6 | /** 7 | * 查询向量所需参数 8 | * @author ageer 9 | */ 10 | @Data 11 | public class QueryVectorBo { 12 | 13 | /** 14 | * 查询内容 15 | */ 16 | private String query; 17 | 18 | /** 19 | * 知识库kid 20 | */ 21 | private String kid; 22 | 23 | /** 24 | * 查询向量返回条数 25 | */ 26 | private Integer maxResults; 27 | 28 | /** 29 | * 向量库模型名称 30 | */ 31 | private String vectorModelName; 32 | 33 | /** 34 | * 向量化模型名称 35 | */ 36 | private String embeddingModelName; 37 | 38 | /** 39 | * 请求key 40 | */ 41 | private String apiKey; 42 | 43 | /** 44 | * 请求地址 45 | */ 46 | private String baseUrl; 47 | 48 | } 49 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/StoreEmbeddingBo.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.domain.bo; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 保存向量所需参数 9 | * @author ageer 10 | */ 11 | @Data 12 | public class StoreEmbeddingBo { 13 | 14 | /** 15 | * 切分文本块列表 16 | */ 17 | private List chunkList; 18 | 19 | /** 20 | * 知识库kid 21 | */ 22 | private String kid; 23 | 24 | /** 25 | * 文档id 26 | */ 27 | private String docId; 28 | 29 | /** 30 | * 知识块id列表 31 | */ 32 | private List fids; 33 | 34 | /** 35 | * 向量库模型名称 36 | */ 37 | private String vectorModelName; 38 | 39 | /** 40 | * 向量化模型名称 41 | */ 42 | private String embeddingModelName; 43 | 44 | /** 45 | * 请求key 46 | */ 47 | private String apiKey; 48 | 49 | /** 50 | * 请求地址 51 | */ 52 | private String baseUrl; 53 | 54 | } 55 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/mapper/KnowledgeAttachMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.mapper; 2 | 3 | 4 | import org.ruoyi.core.mapper.BaseMapperPlus; 5 | import org.ruoyi.domain.KnowledgeAttach; 6 | import org.ruoyi.domain.vo.KnowledgeAttachVo; 7 | 8 | /** 9 | * 知识库附件Mapper接口 10 | * 11 | * @author ageerle 12 | * @date 2025-04-08 13 | */ 14 | public interface KnowledgeAttachMapper extends BaseMapperPlus { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/mapper/KnowledgeFragmentMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.mapper; 2 | 3 | 4 | import org.ruoyi.core.mapper.BaseMapperPlus; 5 | import org.ruoyi.domain.KnowledgeFragment; 6 | import org.ruoyi.domain.vo.KnowledgeFragmentVo; 7 | 8 | /** 9 | * 知识片段Mapper接口 10 | * 11 | * @author ageerle 12 | * @date 2025-04-08 13 | */ 14 | public interface KnowledgeFragmentMapper extends BaseMapperPlus { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/mapper/KnowledgeInfoMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.mapper; 2 | 3 | 4 | import org.ruoyi.core.mapper.BaseMapperPlus; 5 | import org.ruoyi.domain.KnowledgeInfo; 6 | import org.ruoyi.domain.vo.KnowledgeInfoVo; 7 | 8 | /** 9 | * 知识库Mapper接口 10 | * 11 | * @author ageerle 12 | * @date 2025-04-08 13 | */ 14 | public interface KnowledgeInfoMapper extends BaseMapperPlus { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/VectorStoreService.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.service; 2 | 3 | import org.ruoyi.domain.bo.QueryVectorBo; 4 | import org.ruoyi.domain.bo.StoreEmbeddingBo; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 向量库管理 10 | * @author ageer 11 | */ 12 | public interface VectorStoreService { 13 | 14 | void storeEmbeddings(StoreEmbeddingBo storeEmbeddingBo); 15 | 16 | List getQueryVector(QueryVectorBo queryVectorBo); 17 | 18 | void createSchema(String kid,String modelName); 19 | 20 | void removeById(String id,String modelName); 21 | 22 | 23 | } 24 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysRoleDept.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.domain; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.baomidou.mybatisplus.annotation.TableName; 6 | import lombok.Data; 7 | 8 | /** 9 | * 角色和部门关联 sys_role_dept 10 | * 11 | * @author Lion Li 12 | */ 13 | 14 | @Data 15 | @TableName("sys_role_dept") 16 | public class SysRoleDept { 17 | 18 | /** 19 | * 角色ID 20 | */ 21 | @TableId(type = IdType.INPUT) 22 | private Long roleId; 23 | 24 | /** 25 | * 部门ID 26 | */ 27 | private Long deptId; 28 | 29 | } 30 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysRoleMenu.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.domain; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.baomidou.mybatisplus.annotation.TableName; 6 | import lombok.Data; 7 | 8 | /** 9 | * 角色和菜单关联 sys_role_menu 10 | * 11 | * @author Lion Li 12 | */ 13 | 14 | @Data 15 | @TableName("sys_role_menu") 16 | public class SysRoleMenu { 17 | 18 | /** 19 | * 角色ID 20 | */ 21 | @TableId(type = IdType.INPUT) 22 | private Long roleId; 23 | 24 | /** 25 | * 菜单ID 26 | */ 27 | private Long menuId; 28 | 29 | } 30 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysUserOnline.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.domain; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 当前在线会话 7 | * 8 | * @author Lion Li 9 | */ 10 | 11 | @Data 12 | public class SysUserOnline { 13 | 14 | /** 15 | * 会话编号 16 | */ 17 | private String tokenId; 18 | 19 | /** 20 | * 部门名称 21 | */ 22 | private String deptName; 23 | 24 | /** 25 | * 用户名称 26 | */ 27 | private String userName; 28 | 29 | /** 30 | * 登录IP地址 31 | */ 32 | private String ipaddr; 33 | 34 | /** 35 | * 登录地址 36 | */ 37 | private String loginLocation; 38 | 39 | /** 40 | * 浏览器类型 41 | */ 42 | private String browser; 43 | 44 | /** 45 | * 操作系统 46 | */ 47 | private String os; 48 | 49 | /** 50 | * 登录时间 51 | */ 52 | private Long loginTime; 53 | 54 | } 55 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysUserPost.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.domain; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.baomidou.mybatisplus.annotation.TableName; 6 | import lombok.Data; 7 | 8 | /** 9 | * 用户和岗位关联 sys_user_post 10 | * 11 | * @author Lion Li 12 | */ 13 | 14 | @Data 15 | @TableName("sys_user_post") 16 | public class SysUserPost { 17 | 18 | /** 19 | * 用户ID 20 | */ 21 | @TableId(type = IdType.INPUT) 22 | private Long userId; 23 | 24 | /** 25 | * 岗位ID 26 | */ 27 | private Long postId; 28 | 29 | } 30 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysUserRole.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.domain; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.baomidou.mybatisplus.annotation.TableName; 6 | import lombok.Data; 7 | 8 | /** 9 | * 用户和角色关联 sys_user_role 10 | * 11 | * @author Lion Li 12 | */ 13 | 14 | @Data 15 | @TableName("sys_user_role") 16 | public class SysUserRole { 17 | 18 | /** 19 | * 用户ID 20 | */ 21 | @TableId(type = IdType.INPUT) 22 | private Long userId; 23 | 24 | /** 25 | * 角色ID 26 | */ 27 | private Long roleId; 28 | 29 | } 30 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysUserPasswordBo.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.domain.bo; 2 | import jakarta.validation.constraints.NotBlank; 3 | import lombok.Data; 4 | 5 | import java.io.Serial; 6 | import java.io.Serializable; 7 | 8 | 9 | /** 10 | * 用户密码修改bo 11 | * 12 | * @author ageerle@163.com 13 | * date 2025/3/9 14 | */ 15 | @Data 16 | public class SysUserPasswordBo implements Serializable { 17 | 18 | @Serial 19 | private static final long serialVersionUID = 1L; 20 | 21 | /** 22 | * 旧密码 23 | */ 24 | @NotBlank(message = "旧密码不能为空") 25 | private String oldPassword; 26 | 27 | /** 28 | * 新密码 29 | */ 30 | @NotBlank(message = "新密码不能为空") 31 | private String newPassword; 32 | } 33 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/request/EmailRequest.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.domain.request; 2 | 3 | import jakarta.validation.constraints.NotNull; 4 | import lombok.Data; 5 | 6 | 7 | /** 8 | * 用户登录 9 | */ 10 | @Data 11 | public class EmailRequest { 12 | /** 13 | * 账号 14 | */ 15 | @NotNull(message = "账号不能为空") 16 | private String username; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/request/OrderRequest.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.domain.request; 2 | 3 | import jakarta.validation.constraints.NotNull; 4 | import lombok.Data; 5 | 6 | @Data 7 | public class OrderRequest { 8 | 9 | /** 10 | * 商品金额 11 | */ 12 | @NotNull(message = "商品金额") 13 | private String money; 14 | 15 | /** 16 | * 商品名称 17 | */ 18 | @NotNull(message = "商品名称") 19 | private String name; 20 | 21 | /** 22 | * 订单编号 23 | */ 24 | @NotNull(message = "订单编号") 25 | private String orderNo; 26 | 27 | /** 28 | * 支付方式 29 | */ 30 | @NotNull(message = "支付方式") 31 | private String payType; 32 | } 33 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/request/UserRequest.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.domain.request; 2 | 3 | import jakarta.validation.constraints.NotNull; 4 | import lombok.Data; 5 | 6 | 7 | /** 8 | * 编辑用户 9 | */ 10 | @Data 11 | public class UserRequest { 12 | /** 13 | * 用户名称 14 | */ 15 | @NotNull(message = "用户名称不能为空") 16 | private String nickName; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/AvatarVo.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.domain.vo; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 用户头像信息 7 | * 8 | * @author Michelle.Chung 9 | */ 10 | @Data 11 | public class AvatarVo { 12 | 13 | /** 14 | * 头像地址 15 | */ 16 | private String imgUrl; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/CacheListInfoVo.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.domain.vo; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | import java.util.Map; 7 | import java.util.Properties; 8 | 9 | /** 10 | * 缓存监控列表信息 11 | * 12 | * @author Michelle.Chung 13 | */ 14 | @Data 15 | public class CacheListInfoVo { 16 | 17 | private Properties info; 18 | 19 | private Long dbSize; 20 | 21 | private List> commandStats; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/CaptchaVo.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.domain.vo; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 验证码信息 7 | * 8 | * @author Michelle.Chung 9 | */ 10 | @Data 11 | public class CaptchaVo { 12 | 13 | /** 14 | * 是否开启验证码 15 | */ 16 | private Boolean captchaEnabled = true; 17 | 18 | private String uuid; 19 | 20 | /** 21 | * 验证码图片 22 | */ 23 | private String img; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/DeptTreeSelectVo.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.domain.vo; 2 | 3 | import cn.hutool.core.lang.tree.Tree; 4 | import lombok.Data; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 角色部门列表树信息 10 | * 11 | * @author Michelle.Chung 12 | */ 13 | @Data 14 | public class DeptTreeSelectVo { 15 | 16 | /** 17 | * 选中部门列表 18 | */ 19 | private List checkedKeys; 20 | 21 | /** 22 | * 下拉树结构列表 23 | */ 24 | private List> depts; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/LoginTenantVo.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.domain.vo; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 登录租户对象 9 | * 10 | * @author Michelle.Chung 11 | */ 12 | @Data 13 | public class LoginTenantVo { 14 | 15 | /** 16 | * 租户开关 17 | */ 18 | private Boolean tenantEnabled; 19 | 20 | /** 21 | * 租户对象列表 22 | */ 23 | private List voList; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/LoginVo.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.domain.vo; 2 | 3 | import lombok.Data; 4 | import org.ruoyi.common.core.domain.model.LoginUser; 5 | 6 | /** 7 | * 登录返回信息 8 | * 9 | * @author Michelle.Chung 10 | */ 11 | @Data 12 | public class LoginVo { 13 | private String token; 14 | // 兼容新版后台管理系统 15 | private String access_token; 16 | private LoginUser userInfo; 17 | } 18 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/MenuTreeSelectVo.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.domain.vo; 2 | 3 | import cn.hutool.core.lang.tree.Tree; 4 | import lombok.Data; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 角色菜单列表树信息 10 | * 11 | * @author Michelle.Chung 12 | */ 13 | @Data 14 | public class MenuTreeSelectVo { 15 | 16 | /** 17 | * 选中菜单列表 18 | */ 19 | private List checkedKeys; 20 | 21 | /** 22 | * 菜单下拉树结构列表 23 | */ 24 | private List> menus; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/ProfileVo.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.domain.vo; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 用户个人信息 7 | * 8 | * @author Michelle.Chung 9 | */ 10 | @Data 11 | public class ProfileVo { 12 | 13 | /** 14 | * 用户信息 15 | */ 16 | private SysUserVo user; 17 | 18 | /** 19 | * 用户所属角色组 20 | */ 21 | private String roleGroup; 22 | 23 | /** 24 | * 用户所属岗位组 25 | */ 26 | private String postGroup; 27 | 28 | 29 | } 30 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysOssUploadVo.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.domain.vo; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 上传对象信息 7 | * 8 | * @author Michelle.Chung 9 | */ 10 | @Data 11 | public class SysOssUploadVo { 12 | 13 | /** 14 | * URL地址 15 | */ 16 | private String url; 17 | 18 | /** 19 | * 文件名 20 | */ 21 | private String fileName; 22 | 23 | /** 24 | * 对象存储主键 25 | */ 26 | private String ossId; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysUserImportVo.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.domain.vo; 2 | 3 | import com.alibaba.excel.annotation.ExcelProperty; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | import java.io.Serial; 8 | import java.io.Serializable; 9 | 10 | /** 11 | * 用户对象导入VO 12 | * 13 | * @author Lion Li 14 | */ 15 | 16 | @Data 17 | @NoArgsConstructor 18 | public class SysUserImportVo implements Serializable { 19 | 20 | @Serial 21 | private static final long serialVersionUID = 1L; 22 | 23 | /** 24 | * 用户名称 25 | */ 26 | @ExcelProperty(value = "用户名称") 27 | private String userName; 28 | 29 | /** 30 | * 用户余额 31 | */ 32 | @ExcelProperty(value = "用户余额") 33 | private Double userBalance; 34 | 35 | /** 36 | * 用户等级 37 | */ 38 | @ExcelProperty(value = "用户等级(0免费用户 1付费用户)") 39 | private String userGrade; 40 | 41 | } 42 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysUserInfoVo.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.domain.vo; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 用户信息 9 | * 10 | * @author Michelle.Chung 11 | */ 12 | @Data 13 | public class SysUserInfoVo { 14 | 15 | /** 16 | * 用户信息 17 | */ 18 | private SysUserVo user; 19 | 20 | /** 21 | * 角色ID列表 22 | */ 23 | private List roleIds; 24 | 25 | /** 26 | * 角色列表 27 | */ 28 | private List roles; 29 | 30 | /** 31 | * 岗位ID列表 32 | */ 33 | private List postIds; 34 | 35 | /** 36 | * 岗位列表 37 | */ 38 | private List posts; 39 | 40 | } 41 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysUserOptionVo.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.domain.vo; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serial; 6 | import java.io.Serializable; 7 | 8 | 9 | /** 10 | * 用户信息视图对象 sys_user 11 | * 12 | * @author Michelle.Chung 13 | */ 14 | @Data 15 | public class SysUserOptionVo implements Serializable { 16 | 17 | @Serial 18 | private static final long serialVersionUID = 1L; 19 | 20 | /** 21 | * 用户ID 22 | */ 23 | private Long userId; 24 | 25 | /** 26 | * 用户账号 27 | */ 28 | private String name; 29 | 30 | } 31 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/TenantListVo.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.domain.vo; 2 | 3 | import io.github.linpeilie.annotations.AutoMapper; 4 | import lombok.Data; 5 | 6 | /** 7 | * 租户列表 8 | * 9 | * @author Lion Li 10 | */ 11 | @Data 12 | @AutoMapper(target = SysTenantVo.class) 13 | public class TenantListVo { 14 | 15 | private String tenantId; 16 | 17 | private String companyName; 18 | 19 | private String domain; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/UserInfoVo.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.domain.vo; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.Set; 6 | 7 | /** 8 | * 登录用户信息 9 | * 10 | * @author Michelle.Chung 11 | */ 12 | @Data 13 | public class UserInfoVo { 14 | 15 | /** 16 | * 用户基本信息 17 | */ 18 | private SysUserVo user; 19 | 20 | /** 21 | * 菜单权限 22 | */ 23 | private Set permissions; 24 | 25 | /** 26 | * 角色权限 27 | */ 28 | private Set roles; 29 | 30 | } 31 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatConfigMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.mapper; 2 | 3 | 4 | import org.ruoyi.core.mapper.BaseMapperPlus; 5 | import org.ruoyi.system.domain.ChatConfig; 6 | import org.ruoyi.system.domain.vo.ChatConfigVo; 7 | 8 | /** 9 | * 配置信息Mapper接口 10 | * 11 | * @author ageerle 12 | * @date 2025-04-08 13 | */ 14 | public interface ChatConfigMapper extends BaseMapperPlus { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysConfigMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.mapper; 2 | 3 | import org.ruoyi.core.mapper.BaseMapperPlus; 4 | import org.ruoyi.system.domain.SysConfig; 5 | import org.ruoyi.system.domain.vo.SysConfigVo; 6 | 7 | /** 8 | * 参数配置 数据层 9 | * 10 | * @author Lion Li 11 | */ 12 | public interface SysConfigMapper extends BaseMapperPlus { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysDictDataMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.mapper; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 4 | import org.ruoyi.common.core.constant.UserConstants; 5 | import org.ruoyi.core.mapper.BaseMapperPlus; 6 | import org.ruoyi.system.domain.SysDictData; 7 | import org.ruoyi.system.domain.vo.SysDictDataVo; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * 字典表 数据层 13 | * 14 | * @author Lion Li 15 | */ 16 | public interface SysDictDataMapper extends BaseMapperPlus { 17 | 18 | default List selectDictDataByType(String dictType) { 19 | return selectVoList( 20 | new LambdaQueryWrapper() 21 | .eq(SysDictData::getStatus, UserConstants.DICT_NORMAL) 22 | .eq(SysDictData::getDictType, dictType) 23 | .orderByAsc(SysDictData::getDictSort)); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysDictTypeMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.mapper; 2 | 3 | import org.ruoyi.core.mapper.BaseMapperPlus; 4 | import org.ruoyi.system.domain.SysDictType; 5 | import org.ruoyi.system.domain.vo.SysDictTypeVo; 6 | 7 | /** 8 | * 字典表 数据层 9 | * 10 | * @author Lion Li 11 | */ 12 | public interface SysDictTypeMapper extends BaseMapperPlus { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysLogininforMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.mapper; 2 | 3 | import org.ruoyi.core.mapper.BaseMapperPlus; 4 | import org.ruoyi.system.domain.SysLogininfor; 5 | import org.ruoyi.system.domain.vo.SysLogininforVo; 6 | 7 | /** 8 | * 系统访问日志情况信息 数据层 9 | * 10 | * @author Lion Li 11 | */ 12 | public interface SysLogininforMapper extends BaseMapperPlus { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysNoticeMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.mapper; 2 | 3 | import org.ruoyi.core.mapper.BaseMapperPlus; 4 | import org.ruoyi.system.domain.SysNotice; 5 | import org.ruoyi.system.domain.vo.SysNoticeVo; 6 | 7 | /** 8 | * 通知公告表 数据层 9 | * 10 | * @author Lion Li 11 | */ 12 | public interface SysNoticeMapper extends BaseMapperPlus { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysNoticeStateMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.mapper; 2 | 3 | import org.ruoyi.core.mapper.BaseMapperPlus; 4 | import org.ruoyi.system.domain.SysNoticeState; 5 | import org.ruoyi.system.domain.vo.SysNoticeStateVo; 6 | 7 | /** 8 | * 用户阅读状态Mapper接口 9 | * 10 | * @author Lion Li 11 | * @date 2024-05-11 12 | */ 13 | public interface SysNoticeStateMapper extends BaseMapperPlus { 14 | 15 | /** 16 | * 阅读所有公告 17 | */ 18 | void readAllNotice(); 19 | } 20 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysOperLogMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.mapper; 2 | 3 | import org.ruoyi.core.mapper.BaseMapperPlus; 4 | import org.ruoyi.system.domain.SysOperLog; 5 | import org.ruoyi.system.domain.vo.SysOperLogVo; 6 | 7 | /** 8 | * 操作日志 数据层 9 | * 10 | * @author Lion Li 11 | */ 12 | public interface SysOperLogMapper extends BaseMapperPlus { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysOssConfigMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.mapper; 2 | 3 | import org.ruoyi.core.mapper.BaseMapperPlus; 4 | import org.ruoyi.system.domain.SysOssConfig; 5 | import org.ruoyi.system.domain.vo.SysOssConfigVo; 6 | 7 | /** 8 | * 对象存储配置Mapper接口 9 | * 10 | * @author Lion Li 11 | * @author 孤舟烟雨 12 | * @date 2021-08-13 13 | */ 14 | public interface SysOssConfigMapper extends BaseMapperPlus { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysOssMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.mapper; 2 | 3 | import org.ruoyi.core.mapper.BaseMapperPlus; 4 | import org.ruoyi.system.domain.SysOss; 5 | import org.ruoyi.system.domain.vo.SysOssVo; 6 | 7 | /** 8 | * 文件上传 数据层 9 | * 10 | * @author Lion Li 11 | */ 12 | public interface SysOssMapper extends BaseMapperPlus { 13 | } 14 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysPostMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.mapper; 2 | 3 | import org.ruoyi.core.mapper.BaseMapperPlus; 4 | import org.ruoyi.system.domain.SysPost; 5 | import org.ruoyi.system.domain.vo.SysPostVo; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 岗位信息 数据层 11 | * 12 | * @author Lion Li 13 | */ 14 | public interface SysPostMapper extends BaseMapperPlus { 15 | 16 | /** 17 | * 根据用户ID获取岗位选择框列表 18 | * 19 | * @param userId 用户ID 20 | * @return 选中岗位ID列表 21 | */ 22 | List selectPostListByUserId(Long userId); 23 | 24 | /** 25 | * 查询用户所属岗位组 26 | * 27 | * @param userName 用户名 28 | * @return 结果 29 | */ 30 | List selectPostsByUserName(String userName); 31 | 32 | } 33 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysRoleDeptMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.mapper; 2 | 3 | import org.ruoyi.core.mapper.BaseMapperPlus; 4 | import org.ruoyi.system.domain.SysRoleDept; 5 | 6 | /** 7 | * 角色与部门关联表 数据层 8 | * 9 | * @author Lion Li 10 | */ 11 | public interface SysRoleDeptMapper extends BaseMapperPlus { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysRoleMenuMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.mapper; 2 | 3 | import org.ruoyi.core.mapper.BaseMapperPlus; 4 | import org.ruoyi.system.domain.SysRoleMenu; 5 | 6 | /** 7 | * 角色与菜单关联表 数据层 8 | * 9 | * @author Lion Li 10 | */ 11 | public interface SysRoleMenuMapper extends BaseMapperPlus { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysTenantMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.mapper; 2 | 3 | import org.ruoyi.core.mapper.BaseMapperPlus; 4 | import org.ruoyi.system.domain.SysTenant; 5 | import org.ruoyi.system.domain.vo.SysTenantVo; 6 | 7 | /** 8 | * 租户Mapper接口 9 | * 10 | * @author Michelle.Chung 11 | */ 12 | public interface SysTenantMapper extends BaseMapperPlus { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysTenantPackageMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.mapper; 2 | 3 | import org.ruoyi.core.mapper.BaseMapperPlus; 4 | import org.ruoyi.system.domain.SysTenantPackage; 5 | import org.ruoyi.system.domain.vo.SysTenantPackageVo; 6 | 7 | /** 8 | * 租户套餐Mapper接口 9 | * 10 | * @author Michelle.Chung 11 | */ 12 | public interface SysTenantPackageMapper extends BaseMapperPlus { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysUserPostMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.mapper; 2 | 3 | import org.ruoyi.core.mapper.BaseMapperPlus; 4 | import org.ruoyi.system.domain.SysUserPost; 5 | 6 | /** 7 | * 用户与岗位关联表 数据层 8 | * 9 | * @author Lion Li 10 | */ 11 | public interface SysUserPostMapper extends BaseMapperPlus { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysUserRoleMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.mapper; 2 | 3 | import org.ruoyi.core.mapper.BaseMapperPlus; 4 | import org.ruoyi.system.domain.SysUserRole; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 用户与角色关联表 数据层 10 | * 11 | * @author Lion Li 12 | */ 13 | public interface SysUserRoleMapper extends BaseMapperPlus { 14 | 15 | List selectUserIdsByRoleId(Long roleId); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysDataScopeService.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.service; 2 | 3 | /** 4 | * 通用 数据权限 服务 5 | * 6 | * @author Lion Li 7 | */ 8 | public interface ISysDataScopeService { 9 | 10 | /** 11 | * 获取角色自定义权限 12 | * 13 | * @param roleId 角色id 14 | * @return 部门id组 15 | */ 16 | String getRoleCustom(Long roleId); 17 | 18 | /** 19 | * 获取部门及以下权限 20 | * 21 | * @param deptId 部门id 22 | * @return 部门id组 23 | */ 24 | String getDeptAndChild(Long deptId); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysPermissionService.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.service; 2 | 3 | import java.util.Set; 4 | 5 | /** 6 | * 用户权限处理 7 | * 8 | * @author Lion Li 9 | */ 10 | public interface ISysPermissionService { 11 | 12 | /** 13 | * 获取角色数据权限 14 | * 15 | * @param userId 用户id 16 | * @return 角色权限信息 17 | */ 18 | Set getRolePermission(Long userId); 19 | 20 | /** 21 | * 获取菜单数据权限 22 | * 23 | * @param userId 用户id 24 | * @return 菜单权限信息 25 | */ 26 | Set getMenuPermission(Long userId); 27 | 28 | } 29 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysSensitiveServiceImpl.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.service.impl; 2 | 3 | import org.ruoyi.common.satoken.utils.LoginHelper; 4 | import org.ruoyi.common.sensitive.core.SensitiveService; 5 | import org.springframework.stereotype.Service; 6 | 7 | /** 8 | * 脱敏服务 9 | * 默认管理员不过滤 10 | * 需自行根据业务重写实现 11 | * 12 | * @author Lion Li 13 | * @version 3.6.0 14 | */ 15 | @Service 16 | public class SysSensitiveServiceImpl implements SensitiveService { 17 | 18 | /** 19 | * 是否脱敏 20 | */ 21 | @Override 22 | public boolean isSensitive() { 23 | return !LoginHelper.isSuperAdmin() || !LoginHelper.isTenantAdmin(); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysConfigMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysDictDataMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysDictTypeMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysNoticeMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysNoticeStateMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | UPDATE sys_notice_state SET read_status = 1 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysOperLogMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysOssConfigMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysOssMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysRoleDeptMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysRoleMenuMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysTenantMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysTenantPackageMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysUserPostMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysUserRoleMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/InsightFace.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chat.domain; 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 WangLe 11 | */ 12 | @Data 13 | @ApiModel("Discord账号") 14 | public class InsightFace implements Serializable { 15 | /**本人头像json*/ 16 | @ApiModelProperty("本人头像json") 17 | private String sourceBase64; 18 | 19 | /**明星头像json*/ 20 | @ApiModelProperty("明星头像json") 21 | private String targetBase64; 22 | } 23 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/bo/GenerateLuma.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chat.domain.bo; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 文生视频请求对象 7 | * 8 | * @author ageerle@163.com 9 | * date 2024/6/27 10 | */ 11 | @Data 12 | public class GenerateLuma { 13 | 14 | private String aspect_ratio; 15 | 16 | private boolean expand_prompt; 17 | 18 | private String image_url; 19 | 20 | private String user_prompt; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/bo/GenerateLyric.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chat.domain.bo; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 生成歌词 7 | * 8 | * @author ageerle@163.com 9 | * date 2024/6/27 10 | */ 11 | @Data 12 | public class GenerateLyric { 13 | 14 | /** 15 | * 歌词提示词 16 | */ 17 | private String prompt; 18 | 19 | /** 20 | * 回调地址 21 | */ 22 | private String notify_hook; 23 | } 24 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/BaseSubmitDTO.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chat.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModelProperty; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | 7 | @Getter 8 | @Setter 9 | public abstract class BaseSubmitDTO { 10 | 11 | @ApiModelProperty("自定义参数") 12 | protected String state; 13 | 14 | @ApiModelProperty("回调地址, 为空时使用全局notifyHook") 15 | protected String notifyHook; 16 | } 17 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitActionDTO.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chat.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import lombok.Data; 5 | 6 | 7 | @Data 8 | @ApiModel("变化任务提交参数") 9 | public class SubmitActionDTO { 10 | 11 | private String customId; 12 | 13 | private String taskId; 14 | 15 | private String state; 16 | 17 | private String notifyHook; 18 | } 19 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitBlendDTO.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chat.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | import lombok.EqualsAndHashCode; 7 | import org.ruoyi.chat.enums.BlendDimensions; 8 | 9 | import java.util.List; 10 | 11 | @Data 12 | @ApiModel("Blend提交参数") 13 | @EqualsAndHashCode(callSuper = true) 14 | public class SubmitBlendDTO extends BaseSubmitDTO { 15 | 16 | @ApiModelProperty(value = "图片base64数组", required = true, example = "[\"data:image/png;base64,xxx1\", \"data:image/png;base64,xxx2\"]") 17 | private List base64Array; 18 | 19 | @ApiModelProperty(value = "比例: PORTRAIT(2:3); SQUARE(1:1); LANDSCAPE(3:2)", example = "SQUARE") 20 | private BlendDimensions dimensions = BlendDimensions.SQUARE; 21 | } 22 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitChangeDTO.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chat.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | import lombok.EqualsAndHashCode; 7 | import org.ruoyi.chat.enums.TaskAction; 8 | 9 | 10 | @Data 11 | @ApiModel("变化任务提交参数") 12 | @EqualsAndHashCode(callSuper = true) 13 | public class SubmitChangeDTO extends BaseSubmitDTO { 14 | 15 | @ApiModelProperty(value = "任务ID", required = true, example = "\"1320098173412546\"") 16 | private String taskId; 17 | 18 | @ApiModelProperty(value = "UPSCALE(放大); VARIATION(变换); REROLL(重新生成)", required = true, 19 | allowableValues = "UPSCALE, VARIATION, REROLL", example = "UPSCALE") 20 | private TaskAction action; 21 | 22 | @ApiModelProperty(value = "序号(1~4), action为UPSCALE,VARIATION时必传", allowableValues = "range[1, 4]", example = "1") 23 | private Integer index; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitDescribeDTO.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chat.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | import lombok.EqualsAndHashCode; 7 | 8 | @Data 9 | @ApiModel("Describe提交参数") 10 | @EqualsAndHashCode(callSuper = true) 11 | public class SubmitDescribeDTO extends BaseSubmitDTO { 12 | 13 | @ApiModelProperty(value = "图片base64", required = true, example = "data:image/png;base64,xxx") 14 | private String base64; 15 | } 16 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitImagineDTO.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chat.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | import lombok.EqualsAndHashCode; 7 | 8 | import java.util.List; 9 | 10 | 11 | @Data 12 | @ApiModel("Imagine提交参数") 13 | @EqualsAndHashCode(callSuper = true) 14 | public class SubmitImagineDTO extends BaseSubmitDTO { 15 | 16 | @ApiModelProperty(value = "提示词", required = true, example = "Cat") 17 | private String prompt; 18 | 19 | @ApiModelProperty(value = "垫图base64数组") 20 | private List base64Array; 21 | 22 | @ApiModelProperty(hidden = true) 23 | @Deprecated(since = "3.0", forRemoval = true) 24 | private String base64; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitModalDTO.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chat.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | 7 | 8 | @Data 9 | @EqualsAndHashCode(callSuper = true) 10 | @ApiModel("局部重绘提交参数") 11 | public class SubmitModalDTO extends BaseSubmitDTO{ 12 | 13 | private String maskBase64; 14 | 15 | private String taskId; 16 | 17 | private String prompt; 18 | 19 | } 20 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitShortenDTO.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chat.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | 7 | 8 | @Data 9 | @EqualsAndHashCode(callSuper = true) 10 | @ApiModel("prompt分析提交参数") 11 | public class SubmitShortenDTO extends BaseSubmitDTO{ 12 | 13 | private String botType; 14 | 15 | private String prompt; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitSimpleChangeDTO.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chat.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import io.swagger.annotations.ApiModelProperty; 5 | import lombok.Data; 6 | import lombok.EqualsAndHashCode; 7 | 8 | 9 | @Data 10 | @ApiModel("变化任务提交参数-simple") 11 | @EqualsAndHashCode(callSuper = true) 12 | public class SubmitSimpleChangeDTO extends BaseSubmitDTO { 13 | 14 | @ApiModelProperty(value = "变化描述: ID $action$index", required = true, example = "1320098173412546 U2") 15 | private String content; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/TaskConditionDTO.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chat.domain.dto; 2 | 3 | import io.swagger.annotations.ApiModel; 4 | import lombok.Data; 5 | 6 | import java.util.List; 7 | 8 | @Data 9 | @ApiModel("任务查询参数") 10 | public class TaskConditionDTO { 11 | 12 | private List ids; 13 | 14 | } 15 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/ActionType.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chat.enums; 2 | 3 | import lombok.Getter; 4 | 5 | /** 6 | * @author WangLe 7 | */ 8 | @Getter 9 | public enum ActionType { 10 | IN_PAINT("Inpaint"), // 局部重绘操作 11 | RE_ROLL("reroll"), // 重绘操作 12 | UP_SAMPLE("upsample"), // 放大操作 13 | ZOOM("zoom"), // 变焦操作 14 | UPSCALE("upscale"), // 高清放大操作 15 | VARIATION("variation"); // 变化操作 16 | 17 | private final String action; 18 | 19 | ActionType(String action) { 20 | this.action = action; 21 | } 22 | 23 | public static ActionType fromCustomId(String customId) { 24 | for (ActionType type : values()) { 25 | if (type.getAction().equals(customId)) { 26 | return type; 27 | } 28 | } 29 | return null; 30 | } 31 | } 32 | 33 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/BillingType.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chat.enums; 2 | 3 | import lombok.Getter; 4 | 5 | @Getter 6 | public enum BillingType { 7 | TOKEN("1", "token扣费"), 8 | TIMES("2", "次数扣费"); 9 | 10 | private final String code; 11 | private final String description; 12 | 13 | BillingType(String code, String description) { 14 | this.code = code; 15 | this.description = description; 16 | } 17 | 18 | public static BillingType fromCode(String code) { 19 | for (BillingType type : values()) { 20 | if (type.getCode().equals(code)) { 21 | return type; 22 | } 23 | } 24 | return null; 25 | } 26 | 27 | public String getCode() { 28 | return code; 29 | } 30 | 31 | public String getDescription() { 32 | return description; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/BlendDimensions.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chat.enums; 2 | 3 | 4 | import lombok.Getter; 5 | 6 | @Getter 7 | public enum BlendDimensions { 8 | 9 | PORTRAIT("2:3"), 10 | 11 | SQUARE("1:1"), 12 | 13 | LANDSCAPE("3:2"); 14 | 15 | private final String value; 16 | 17 | BlendDimensions(String value) { 18 | this.value = value; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/ChatModeType.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chat.enums; 2 | 3 | import lombok.Getter; 4 | 5 | @Getter 6 | public enum ChatModeType { 7 | OLLAMA("ollama", "本地部署模型"), 8 | CHAT("chat", "中转模型"), 9 | DIFY("dify", "DIFY"), 10 | COZE("coze", "扣子"), 11 | 12 | ZHIPU("zhipu", "智谱清言"), 13 | 14 | DEEPSEEK("deepseek", "深度求索"), 15 | 16 | QIANWEN("qianwen", "通义千问"), 17 | 18 | VECTOR("vector", "知识库向量模型"); 19 | 20 | private final String code; 21 | private final String description; 22 | 23 | ChatModeType(String code, String description) { 24 | this.code = code; 25 | this.description = description; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/DisplayType.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chat.enums; 2 | 3 | import lombok.Getter; 4 | 5 | /** 6 | * 是否显示 7 | * 8 | * @author ageerle@163.com 9 | * date 2025/4/10 10 | */ 11 | @Getter 12 | public enum DisplayType { 13 | HIDDEN("1", "不显示"), 14 | VISIBLE("0", "显示"); 15 | 16 | private final String code; 17 | private final String description; 18 | 19 | DisplayType(String code, String description) { 20 | this.code = code; 21 | this.description = description; 22 | } 23 | 24 | public static DisplayType fromCode(String code) { 25 | for (DisplayType type : values()) { 26 | if (type.getCode().equals(code)) { 27 | return type; 28 | } 29 | } 30 | return null; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/TaskAction.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chat.enums; 2 | 3 | 4 | public enum TaskAction { 5 | /** 6 | * 生成图片. 7 | */ 8 | IMAGINE, 9 | /** 10 | * 选中放大. 11 | */ 12 | UPSCALE, 13 | /** 14 | * 选中其中的一张图,生成四张相似的. 15 | */ 16 | VARIATION, 17 | /** 18 | * 重新执行. 19 | */ 20 | REROLL, 21 | /** 22 | * 图转prompt. 23 | */ 24 | DESCRIBE, 25 | /** 26 | * 多图混合. 27 | */ 28 | BLEND 29 | 30 | } 31 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/UserGradeType.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chat.enums; 2 | 3 | import lombok.Getter; 4 | 5 | /** 6 | * @author ageer 7 | */ 8 | @Getter 9 | public enum UserGradeType { 10 | UNPAID("0", "未付费"), 11 | PAID("1", "已付费"); 12 | 13 | private final String code; 14 | private final String description; 15 | 16 | UserGradeType(String code, String description) { 17 | this.code = code; 18 | this.description = description; 19 | } 20 | 21 | public static UserGradeType fromCode(String code) { 22 | for (UserGradeType type : values()) { 23 | if (type.getCode().equals(code)) { 24 | return type; 25 | } 26 | } 27 | return null; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/IChatService.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chat.service.chat; 2 | 3 | import org.ruoyi.common.chat.request.ChatRequest; 4 | import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; 5 | 6 | /** 7 | * 对话Service接口 8 | * 9 | * @author ageerle 10 | * @date 2025-04-08 11 | */ 12 | public interface IChatService { 13 | 14 | /** 15 | * 客户端发送消息到服务端 16 | * @param chatRequest 请求对象 17 | */ 18 | SseEmitter chat(ChatRequest chatRequest,SseEmitter emitter); 19 | /** 20 | * 获取此服务支持的模型类别 21 | */ 22 | String getCategory(); 23 | } 24 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/util/SSEUtil.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.chat.util; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter; 5 | 6 | import java.io.IOException; 7 | 8 | /** 9 | * sse工具类 10 | * 11 | * @author WangLe 12 | */ 13 | @Slf4j 14 | public class SSEUtil { 15 | 16 | /** 17 | * 发送SSE错误事件的封装方法 18 | * 19 | * @param sseEmitter sse事件对象 20 | * @param errorMessage 错误信息 21 | */ 22 | public static void sendErrorEvent(ResponseBodyEmitter sseEmitter, String errorMessage) { 23 | try { 24 | sseEmitter.send(errorMessage); 25 | } catch (IOException e) { 26 | log.error("SSE发送失败: {}", e.getMessage()); 27 | } 28 | sseEmitter.complete(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-generator/src/main/java/org/ruoyi/generator/mapper/GenTableColumnMapper.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.generator.mapper; 2 | 3 | import com.baomidou.mybatisplus.annotation.InterceptorIgnore; 4 | import org.ruoyi.core.mapper.BaseMapperPlus; 5 | import org.ruoyi.generator.domain.GenTableColumn; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 业务字段 数据层 11 | * 12 | * @author Lion Li 13 | */ 14 | @InterceptorIgnore(dataPermission = "true", tenantLine = "true") 15 | public interface GenTableColumnMapper extends BaseMapperPlus { 16 | /** 17 | * 根据表名称查询列信息 18 | * 19 | * @param tableName 表名称 20 | * @return 列信息 21 | */ 22 | List selectDbTableColumnsByName(String tableName); 23 | 24 | } 25 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-generator/src/main/resources/generator.yml: -------------------------------------------------------------------------------- 1 | # 代码生成 2 | gen: 3 | # 作者 4 | author: ageerle 5 | # 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool 6 | packageName: org.ruoyi.system 7 | # 自动去除表前缀,默认是false 8 | autoRemovePre: false 9 | # 表前缀(生成类名不会包含表前缀,多个用逗号分隔) 10 | tablePrefix: sys_ 11 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-generator/src/main/resources/mapper/package-info.md: -------------------------------------------------------------------------------- 1 | java包使用 `.` 分割 resource 目录使用 `/` 分割 2 |
3 | 此文件目的 防止文件夹粘连找不到 `xml` 文件 -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-generator/src/main/resources/vm/java/mapper.java.vm: -------------------------------------------------------------------------------- 1 | package ${packageName}.mapper; 2 | 3 | import ${packageName}.domain.${ClassName}; 4 | import ${packageName}.domain.vo.${ClassName}Vo; 5 | import org.ruoyi.core.mapper.BaseMapperPlus; 6 | 7 | /** 8 | * ${functionName}Mapper接口 9 | * 10 | * @author ${author} 11 | * @date ${datetime} 12 | */ 13 | public interface ${ClassName}Mapper extends BaseMapperPlus<${ClassName}, ${ClassName}Vo> { 14 | 15 | } 16 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/runner/SystemApplicationRunner.java: -------------------------------------------------------------------------------- 1 | package org.ruoyi.system.runner; 2 | 3 | import lombok.RequiredArgsConstructor; 4 | import lombok.extern.slf4j.Slf4j; 5 | import org.ruoyi.system.service.ISysOssConfigService; 6 | import org.springframework.boot.ApplicationArguments; 7 | import org.springframework.boot.ApplicationRunner; 8 | import org.springframework.stereotype.Component; 9 | 10 | /** 11 | * 初始化 system 模块对应业务数据 12 | * 13 | * @author Lion Li 14 | */ 15 | @Slf4j 16 | @RequiredArgsConstructor 17 | @Component 18 | public class SystemApplicationRunner implements ApplicationRunner { 19 | 20 | private final ISysOssConfigService ossConfigService; 21 | 22 | @Override 23 | public void run(ApplicationArguments args) { 24 | ossConfigService.init(); 25 | log.info("初始化OSS配置成功"); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /script/deploy/Ruoyi-AI平台容器化构建与部署手册.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ageerle/ruoyi-ai/bd94a3eae8ea1fa65b9298335cbce47a5ce4ad44/script/deploy/Ruoyi-AI平台容器化构建与部署手册.docx -------------------------------------------------------------------------------- /script/deploy/build-docker-images/Dockerfile-Resources/ruoyi-ai-admin/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx:1.25-alpine 2 | COPY dist/ /usr/share/nginx/html/ 3 | COPY nginx.conf /etc/nginx/conf.d/default.conf 4 | EXPOSE 80 5 | CMD ["nginx", "-g", "daemon off;"] 6 | -------------------------------------------------------------------------------- /script/deploy/build-docker-images/Dockerfile-Resources/ruoyi-ai-admin/nginx.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name localhost; 4 | 5 | location / { 6 | root /usr/share/nginx/html; 7 | index index.html index.htm; 8 | try_files $uri $uri/ /index.html; 9 | } 10 | 11 | location /prod-api/ { 12 | proxy_pass http://ruoyi-backend:6039/; 13 | proxy_set_header Host $host; 14 | proxy_set_header X-Real-IP $remote_addr; 15 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 16 | } 17 | 18 | error_page 500 502 503 504 /50x.html; 19 | location = /50x.html { 20 | root /usr/share/nginx/html; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /script/deploy/build-docker-images/Dockerfile-Resources/ruoyi-ai-backend/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:17-jdk 2 | WORKDIR /app 3 | COPY ruoyi-admin.jar /app/ruoyi-admin.jar 4 | EXPOSE 8080 5 | ENTRYPOINT ["java","-jar","ruoyi-admin.jar"] 6 | -------------------------------------------------------------------------------- /script/deploy/build-docker-images/Dockerfile-Resources/ruoyi-ai-web/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx:1.25-alpine 2 | COPY dist/ /usr/share/nginx/html/ 3 | COPY nginx.conf /etc/nginx/conf.d/default.conf 4 | EXPOSE 80 5 | CMD ["nginx", "-g", "daemon off;"] 6 | -------------------------------------------------------------------------------- /script/deploy/build-docker-images/Dockerfile-Resources/ruoyi-ai-web/nginx.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name localhost; 4 | 5 | location / { 6 | root /usr/share/nginx/html; 7 | index index.html index.htm; 8 | try_files $uri $uri/ /index.html; 9 | } 10 | 11 | location /api/ { 12 | proxy_pass http://ruoyi-backend:6039/; 13 | proxy_set_header Host $host; 14 | proxy_set_header X-Real-IP $remote_addr; 15 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 16 | } 17 | 18 | error_page 500 502 503 504 /50x.html; 19 | location = /50x.html { 20 | root /usr/share/nginx/html; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /script/deploy/build-docker-images/modify-source-code/ruoyi-ai-admin/.env: -------------------------------------------------------------------------------- 1 | # 应用标题 2 | VITE_APP_TITLE=RuoYi AI 3 | 4 | # 应用命名空间,用于缓存、store等功能的前缀,确保隔离 5 | VITE_APP_NAMESPACE=vben-web-antd 6 | -------------------------------------------------------------------------------- /script/deploy/build-docker-images/modify-source-code/ruoyi-ai-admin/.env.analyze: -------------------------------------------------------------------------------- 1 | # public path 2 | VITE_BASE=/ 3 | 4 | # Basic interface address SPA 5 | VITE_GLOB_API_URL=/api 6 | 7 | VITE_VISUALIZER=true 8 | -------------------------------------------------------------------------------- /script/deploy/build-docker-images/scripts/build-ruoyi-backend-image.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | rm -f /root/ruoyi-ai-docker/source-code/ruoyi-ai-backend/ruoyi-admin/src/main/resources/application-prod.yml 3 | cp /root/ruoyi-ai-docker/build-docker-images/modify-source-code/ruoyi-ai-backend/application-prod.yml /root/ruoyi-ai-docker/source-code/ruoyi-ai-backend/ruoyi-admin/src/main/resources/application-prod.yml 4 | docker run --rm --name build-ruoyi-ai-backend -v /root/ruoyi-ai-docker/source-code/ruoyi-ai-backend:/app -w /app maven:3.9.9-eclipse-temurin-17-alpine bash -c "mvn clean package -Pprod" 5 | rm -f /root/ruoyi-ai-docker/build-docker-images/Dockerfile-Resources/ruoyi-ai-backend/ruoyi-admin.jar 6 | cp /root/ruoyi-ai-docker/source-code/ruoyi-ai-backend/ruoyi-admin/target/ruoyi-admin.jar /root/ruoyi-ai-docker/build-docker-images/Dockerfile-Resources/ruoyi-ai-backend/ 7 | cd /root/ruoyi-ai-docker/build-docker-images/Dockerfile-Resources/ruoyi-ai-backend/ 8 | docker build -t ruoyi-ai-backend:v2.0.5 . 9 | -------------------------------------------------------------------------------- /script/deploy/build-docker-images/scripts/build-ruoyi-web-image.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | docker run --rm --name build-ruoyi-ai-web -v /root/ruoyi-ai-docker/source-code/ruoyi-ai-web:/app -w /app node:20 bash -c "npm install -g pnpm && pnpm install && pnpm approve-builds && pnpm build" 3 | rm -rf /root/ruoyi-ai-docker/build-docker-images/Dockerfile-Resources/ruoyi-ai-web/dist 4 | cp -pr /root/ruoyi-ai-docker/source-code/ruoyi-ai-web/dist /root/ruoyi-ai-docker/build-docker-images/Dockerfile-Resources/ruoyi-ai-web/ 5 | cd /root/ruoyi-ai-docker/build-docker-images/Dockerfile-Resources/ruoyi-ai-web/ 6 | docker build -t ruoyi-ai-web:v2.0.5 . 7 | -------------------------------------------------------------------------------- /script/deploy/build-docker-images/scripts/remove-blank.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | sed -i 's/[ \t]*$//' filename 3 | -------------------------------------------------------------------------------- /script/deploy/deploy/copy-mysql-init-script.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | rm -f /root/ruoyi-ai-docker/deploy/mysql-init/*.sql 3 | cp /root/ruoyi-ai-docker/source-code/ruoyi-ai-backend/script/sql/ruoyi-ai.sql /root/ruoyi-ai-docker/deploy/mysql-init/ruoyi-ai.sql 4 | 5 | -------------------------------------------------------------------------------- /script/deploy/deploy/update_ruoyi-qi-sql.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | sed -i 's#127.0.0.1:6038#weaviate:8080#g' ./mysql-init/ruoyi-ai.sql 3 | -------------------------------------------------------------------------------- /script/deploy/one-step-script/template/nginx.admin.conf.template: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name localhost; 4 | 5 | location / { 6 | root /usr/share/nginx/html; 7 | index index.html index.htm; 8 | try_files $uri $uri/ /index.html; 9 | } 10 | 11 | location /prod-api/ { 12 | proxy_pass http://{{BACKEND_HOST}}:{{SERVER_PORT}}/; 13 | proxy_set_header Host $host; 14 | proxy_set_header X-Real-IP $remote_addr; 15 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 16 | } 17 | 18 | error_page 500 502 503 504 /50x.html; 19 | location = /50x.html { 20 | root /usr/share/nginx/html; 21 | } 22 | } -------------------------------------------------------------------------------- /script/deploy/one-step-script/template/nginx.web.conf.template: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name localhost; 4 | 5 | location / { 6 | root /usr/share/nginx/html; 7 | index index.html index.htm; 8 | try_files $uri $uri/ /index.html; 9 | } 10 | 11 | location /api/ { 12 | proxy_pass http://{{BACKEND_HOST}}:{{SERVER_PORT}}/; 13 | proxy_set_header Host $host; 14 | proxy_set_header X-Real-IP $remote_addr; 15 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 16 | } 17 | 18 | error_page 500 502 503 504 /50x.html; 19 | location = /50x.html { 20 | root /usr/share/nginx/html; 21 | } 22 | } -------------------------------------------------------------------------------- /script/deploy/source-code/fetch-admin-source-code.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | rm -rf ruoyi-ai-admin 3 | git clone https://github.com/ageerle/ruoyi-admin 4 | mv ruoyi-admin ruoyi-ai-admin 5 | -------------------------------------------------------------------------------- /script/deploy/source-code/fetch-backend-source-code.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | rm -rf ruoyi-ai-backend 3 | git clone https://github.com/ageerle/ruoyi-ai 4 | mv ruoyi-ai ruoyi-ai-backend 5 | cd ruoyi-ai-backend 6 | # git checkout v2.0.4 7 | # cd .. 8 | -------------------------------------------------------------------------------- /script/deploy/source-code/fetch-web-source-code.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | rm -rf ruoyi-ai-web 3 | git clone https://github.com/ageerle/ruoyi-web 4 | mv ruoyi-web ruoyi-ai-web 5 | -------------------------------------------------------------------------------- /script/docker/weaviate/docker-compose.yml: -------------------------------------------------------------------------------- 1 | --- 2 | services: 3 | weaviate: 4 | command: 5 | - --host 6 | - 0.0.0.0 7 | - --port 8 | - '6038' 9 | - --scheme 10 | - http 11 | image: semitechnologies/weaviate:1.19.7 12 | ports: 13 | - 6038:6038 14 | - 50051:50051 15 | volumes: 16 | - weaviate_data:/var/lib/weaviate 17 | environment: 18 | QUERY_DEFAULTS_LIMIT: 25 19 | AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true' 20 | PERSISTENCE_DATA_PATH: '/var/lib/weaviate' 21 | DEFAULT_VECTORIZER_MODULE: 'none' 22 | CLUSTER_HOSTNAME: 'node1' 23 | volumes: 24 | weaviate_data: 25 | ... 26 | --------------------------------------------------------------------------------