From 3be9005f95ebc14639a7e281703dfa9d9b4a7afc Mon Sep 17 00:00:00 2001 From: ageerle <ageerle@163.com> Date: 星期三, 09 四月 2025 17:41:29 +0800 Subject: [PATCH] feat: 调整知识库模块 --- ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysOperLogMapper.java | 0 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/KnowledgeInfoServiceImpl.java | 120 + ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysUserRole.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysDictTypeMapper.java | 0 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java | 292 +++ ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysUserGroupMapper.java | 13 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/AvatarVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysPermissionService.java | 0 ruoyi-modules-api/ruoyi-knowledge-api/pom.xml | 31 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatVoucherVo.java | 3 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysUser.java | 133 + ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysTenantPackageServiceImpl.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/MenuTreeSelectVo.java | 0 ruoyi-modules-api/pom.xml | 35 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatVisitorUsageService.java | 4 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/LoginTenantVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/PaymentOrdersMapper.java | 13 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysConfigVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysUserImportVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysDictTypeService.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysOssConfigMapper.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/AudioOkHttpUtil.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysTenantMapper.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysSensitiveServiceImpl.java | 0 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/VectorStoreService.java | 23 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatAppStoreMapper.java | 0 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatUsageToken.java | 51 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/CoverMapper.java | 14 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysMenuVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysPostMapper.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysTenantPackageMapper.java | 0 ruoyi-modules/ruoyi-chat/pom.xml | 16 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/CsvFileLoader.java | 18 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysUserMapper.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/WddPptApi.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysRoleMapper.java | 0 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/KnowledgeFragment.java | 61 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/AesUtils.java | 0 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/KnowledgeAttach.java | 61 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysRoleDeptMapper.xml | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysDeptBo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysOperLog.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysNoticeStateMapper.java | 0 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/KnowledgeFragmentBo.java | 66 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysPermissionServiceImpl.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysOperLogVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysDeptService.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysNoticeStateVo.java | 0 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/KnowledgeInfo.java | 96 + ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/GithubLoader.java | 18 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysRoleDeptMapper.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysMenuBo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysLogininforMapper.java | 0 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatUsageTokenVo.java | 61 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/UserInfoVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysRoleServiceImpl.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/CoverPromptAudioMapper.xml | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysNotice.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysOssMapper.xml | 0 pom.xml | 24 ruoyi-modules/pom.xml | 1 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/listener/SSEEventSourceListener.java | 107 + ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysNoticeMapper.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysMenu.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/RouterVo.java | 0 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitBlendDTO.java | 21 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysDictTypeVo.java | 0 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatUsageTokenBo.java | 54 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysUserPasswordBo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysNoticeStateService.java | 0 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/KnowledgeInfoBo.java | 108 + ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysDeptVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysMenuServiceImpl.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysDeptMapper.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysPostServiceImpl.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysDataScopeService.java | 0 ruoyi-common/ruoyi-common-chat/pom.xml | 4 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/EmbeddingServiceImpl.java | 64 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatTokenMapper.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysRoleVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysRoleDept.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysDictType.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/WxRobConfigMapper.java | 13 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/request/OrderRequest.java | 0 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorizer/OpenAiVectorization.java | 110 + ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysOssVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysDictData.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysLogininforServiceImpl.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysNoticeStateMapper.xml | 0 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/TextSplitter.java | 18 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysNoticeStateBo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysTenantPackageService.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysCache.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysTenantPackage.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/DeptTreeSelectVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/runner/SystemApplicationRunner.java | 28 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/SysLoginService.java | 433 ++++ ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysRole.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysDictTypeMapper.xml | 0 ruoyi-modules/ruoyi-system/pom.xml | 14 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/vo/KnowledgeInfoVo.java | 119 + ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatConfigMapper.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysLogininforMapper.xml | 0 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/vo/KnowledgeAttachVo.java | 72 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/VectorizationService.java | 13 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysNoticeBo.java | 0 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/MarkdownTextSplitter.java | 17 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/mapper/KnowledgeInfoMapper.java | 16 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/EmbeddingService.java | 20 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatVisitorUsageMapper.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatPluginMapper.java | 0 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatModelService.java | 6 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysPostVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysUserServiceImpl.java | 0 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatRobConfigMapper.java | 16 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysConfigService.java | 0 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/KnowledgeFragmentServiceImpl.java | 113 + ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysUserInfoVo.java | 0 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitImagineDTO.java | 26 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysNoticeStateServiceImpl.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysOperLogMapper.xml | 0 ruoyi-common/ruoyi-common-bom/pom.xml | 4 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysPostBo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/ProfileVo.java | 0 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitChangeDTO.java | 25 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatRobConfigVo.java | 78 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/CoverMapper.xml | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysDept.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysOss.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysRoleMapper.xml | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysUserService.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysRoleMenuMapper.xml | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/WeixinQrCodeCacheUtil.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysTenantMapper.xml | 0 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorstore/MilvusVectorStore.java | 397 ++++ ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysConfig.java | 0 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/ResourceLoaderFactory.java | 35 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/request/TranslationRequest.java | 29 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitSimpleChangeDTO.java | 17 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysTenantPackageMapper.xml | 0 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/JsonFileLoader.java | 18 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatRobConfigBo.java | 72 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysConfigServiceImpl.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysOperLogServiceImpl.java | 0 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitModalDTO.java | 19 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysUserModelVo.java | 45 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/WxRobKeywordMapper.xml | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysNoticeState.java | 0 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/TaskConditionDTO.java | 14 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/IKnowledgeAttachService.java | 49 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorstore/VectorStoreFactory.java | 42 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysPostMapper.xml | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysLogininforBo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysUserRoleMapper.xml | 0 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/KnowledgeAttachBo.java | 66 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/impl/ChatModelServiceImpl.java | 8 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/KnowledgeAttachServiceImpl.java | 114 + ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/WxRobConfigMapper.xml | 0 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/PaymentOrdersMapper.xml | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/request/EmailRequest.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/WeChatScanHttpUtil.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysDictDataMapper.xml | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysUserVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysOssConfigMapper.xml | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysTenantService.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/request/UserRequest.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysUserProfileBo.java | 0 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatUsageTokenMapper.java | 16 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/SysNoticeController.java | 2 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/mapper/KnowledgeAttachMapper.java | 16 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysDeptMapper.xml | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysRoleService.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/HttpUtils.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/DesensitizationUtil.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysDictDataVo.java | 0 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/FolderLoader.java | 16 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatVoucherMapper.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysRoleMenuMapper.java | 0 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/IKnowledgeInfoService.java | 49 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysDictTypeServiceImpl.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysDictDataMapper.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysUserRoleMapper.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/CacheListInfoVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/XmlUtil.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/SysRegisterService.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysMenuService.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/KeyUtils.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysUserOptionVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysNoticeVo.java | 55 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/LoginVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysNoticeServiceImpl.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysTenantPackageBo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysDeptServiceImpl.java | 0 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorstore/WeaviateVectorStore.java | 402 ++++ ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysConfigBo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/WeixinMsgUtil.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/OrderNumberGenerator.java | 0 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/ISseService.java | 65 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysOssBo.java | 0 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatVoucherBo.java | 2 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysOssUploadVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatGptsMapper.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysUserOnline.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysTenantBo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysOssServiceImpl.java | 0 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/IChatCostService.java | 43 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/CoverPromptAudioMapper.java | 22 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysPost.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysNoticeService.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysMenuMapper.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/WxRobRelationMapper.java | 13 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysUserPostMapper.xml | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysUserBo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/WxRobKeywordMapper.java | 13 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysConfigMapper.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysUserGroupServiceImpl.java | 106 + ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysUserModelMapper.java | 14 ruoyi-modules-api/ruoyi-chat-api/pom.xml | 7 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysTenantServiceImpl.java | 0 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/TaskController.java | 2 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/CharacterTextSplitter.java | 64 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysDictTypeBo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysDataScopeServiceImpl.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysRoleBo.java | 0 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/WordLoader.java | 38 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysConfigMapper.xml | 0 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/ChatController.java | 29 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysOssConfig.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysOssConfigService.java | 0 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/CodeTextSplitter.java | 18 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/BaseSubmitDTO.java | 16 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysUserExportVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysTenantVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysUserMapper.xml | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/TenantListVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/MetaVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysOperLogService.java | 0 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/impl/ChatUsageTokenServiceImpl.java | 112 + ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitActionDTO.java | 18 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/ResourceLoader.java | 14 ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/listener/CustomerBigDecimalSerialize.java | 25 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysDictDataBo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysModelMapper.java | 13 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/WeixinApiUtil.java | 81 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/SubmitController.java | 2 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysNoticeMapper.xml | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysOssConfigServiceImpl.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysLogininforVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysUserPost.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysDictDataServiceImpl.java | 0 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitShortenDTO.java | 17 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatTokenService.java | 7 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/vo/KnowledgeFragmentVo.java | 74 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/mapper/KnowledgeFragmentMapper.java | 16 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysPackagePlanMapper.xml | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysDictDataService.java | 0 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatRobConfig.java | 66 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysLogininforService.java | 0 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitDescribeDTO.java | 15 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorizer/VectorizationFactory.java | 47 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorizer/BgeLargeVectorization.java | 64 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysPostService.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysOssConfigBo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatMessageMapper.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysOssMapper.java | 0 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/TextFileLoader.java | 37 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysOperLogBo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysRoleMenu.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysLogininfor.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysTenantPackageVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysOssConfigVo.java | 0 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/TokenTextSplitter.java | 18 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatMessage.java | 2 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/CodeFileLoader.java | 37 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/IKnowledgeFragmentService.java | 49 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/constant/FileType.java | 91 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysTenant.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysUserPostMapper.java | 0 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/MarkDownFileLoader.java | 38 ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/PdfFileLoader.java | 35 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/CaptchaVo.java | 0 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/WxRobRelationMapper.xml | 0 /dev/null | 5 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysOssService.java | 0 ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatUsageTokenService.java | 49 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysMenuMapper.xml | 0 ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysModelMapper.xml | 0 ruoyi-common/ruoyi-common-core/pom.xml | 20 ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysPackagePlanMapper.java | 13 289 files changed, 5,455 insertions(+), 96 deletions(-) diff --git a/pom.xml b/pom.xml index d8d596c..78d6758 100644 --- a/pom.xml +++ b/pom.xml @@ -244,18 +244,6 @@ <version>${tencent.sms.version}</version> </dependency> - <!-- <dependency>--> - <!-- <groupId>de.codecentric</groupId>--> - <!-- <artifactId>spring-boot-admin-starter-server</artifactId>--> - <!-- <version>${spring-boot-admin.version}</version>--> - <!-- </dependency>--> - <!-- <dependency>--> - <!-- <groupId>de.codecentric</groupId>--> - <!-- <artifactId>spring-boot-admin-starter-client</artifactId>--> - <!-- <version>${spring-boot-admin.version}</version>--> - <!-- </dependency>--> - - <!--redisson--> <dependency> <groupId>org.redisson</groupId> <artifactId>redisson-spring-boot-starter</artifactId> @@ -321,10 +309,15 @@ <version>${revision}</version> </dependency> + <dependency> + <groupId>org.ruoyi</groupId> + <artifactId>ruoyi-knowledge-api</artifactId> + <version>${revision}</version> + </dependency> <dependency> <groupId>org.ruoyi</groupId> - <artifactId>ruoyi-knowledge</artifactId> + <artifactId>ruoyi-system-api</artifactId> <version>${revision}</version> </dependency> @@ -347,11 +340,6 @@ <module>ruoyi-common</module> <module>ruoyi-modules</module> <module>ruoyi-modules-api</module> - <module>ruoyi-modules-api</module> - <module>ruoyi-modules-api/ruoyi-device-api</module> - <module>ruoyi-modules-api/ruoyi-weixin-api</module> - <module>ruoyi-modules/ruoyi-weixin</module> - <module>ruoyi-modules/ruoyi-device</module> </modules> <packaging>pom</packaging> diff --git a/ruoyi-common/ruoyi-common-bom/pom.xml b/ruoyi-common/ruoyi-common-bom/pom.xml index 2adc1ba..a7d9e11 100644 --- a/ruoyi-common/ruoyi-common-bom/pom.xml +++ b/ruoyi-common/ruoyi-common-bom/pom.xml @@ -166,14 +166,11 @@ <version>${revision}</version> </dependency> - <!-- AI缁樼敾 --> <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-chat</artifactId> <version>${revision}</version> </dependency> - - <!-- 鏀粯妯″潡 --> <dependency> @@ -182,6 +179,7 @@ <version>${revision}</version> </dependency> </dependencies> + </dependencyManagement> </project> diff --git a/ruoyi-common/ruoyi-common-chat/pom.xml b/ruoyi-common/ruoyi-common-chat/pom.xml index b06f19c..63a5fb9 100644 --- a/ruoyi-common/ruoyi-common-chat/pom.xml +++ b/ruoyi-common/ruoyi-common-chat/pom.xml @@ -98,10 +98,6 @@ </exclusion> </exclusions> </dependency> - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - </dependency> <dependency> <groupId>cn.bigmodel.openapi</groupId> diff --git a/ruoyi-common/ruoyi-common-core/pom.xml b/ruoyi-common/ruoyi-common-core/pom.xml index 36bd0d8..fe3897d 100644 --- a/ruoyi-common/ruoyi-common-core/pom.xml +++ b/ruoyi-common/ruoyi-common-core/pom.xml @@ -47,25 +47,11 @@ <artifactId>jakarta.servlet-api</artifactId> </dependency> + <!-- hutool宸ュ叿妯″潡 --> <dependency> <groupId>cn.hutool</groupId> - <artifactId>hutool-core</artifactId> - </dependency> - - <dependency> - <groupId>cn.hutool</groupId> - <artifactId>hutool-http</artifactId> - </dependency> - - <dependency> - <groupId>cn.hutool</groupId> - <artifactId>hutool-extra</artifactId> - </dependency> - - <dependency> - <groupId>cn.hutool</groupId> - <artifactId>hutool-json</artifactId> - <scope>provided</scope> + <artifactId>hutool-all</artifactId> + <version>5.8.24</version> </dependency> <dependency> diff --git a/ruoyi-modules-api/pom.xml b/ruoyi-modules-api/pom.xml index 5acc710..fe4d2c2 100644 --- a/ruoyi-modules-api/pom.xml +++ b/ruoyi-modules-api/pom.xml @@ -12,9 +12,11 @@ <artifactId>ruoyi-modules-api</artifactId> <packaging>pom</packaging> <modules> - <module>ruoyi-system-api</module> <module>ruoyi-chat-api</module> + <module>ruoyi-device-api</module> <module>ruoyi-knowledge-api</module> + <module>ruoyi-system-api</module> + <module>ruoyi-weixin-api</module> </modules> <properties> @@ -24,13 +26,11 @@ </properties> <dependencies> - <!-- 绯荤粺鏍稿績妯″潡 --> <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-common-core</artifactId> </dependency> - <!-- mybaits鍩虹妯″潡 --> <dependency> @@ -38,13 +38,11 @@ <artifactId>ruoyi-common-mybatis</artifactId> </dependency> - <!-- 鑴辨晱妯″潡 --> <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-common-sensitive</artifactId> </dependency> - <!-- excel妯″潡--> <dependency> @@ -52,10 +50,31 @@ <artifactId>ruoyi-common-excel</artifactId> </dependency> + <!-- 绉熸埛鍩虹妯″潡 --> + <dependency> + <groupId>org.ruoyi</groupId> + <artifactId>ruoyi-common-tenant</artifactId> + </dependency> + + <!-- 瀛楁缈昏瘧鍩虹妯″潡 --> + <dependency> + <groupId>org.ruoyi</groupId> + <artifactId>ruoyi-common-translation</artifactId> + </dependency> + + <!-- 绯荤粺鏃ュ織妯″潡 --> + <dependency> + <groupId>org.ruoyi</groupId> + <artifactId>ruoyi-common-log</artifactId> + </dependency> + + <!-- 瀵硅薄瀛樺偍妯″潡 --> + <dependency> + <groupId>org.ruoyi</groupId> + <artifactId>ruoyi-common-oss</artifactId> + </dependency> + </dependencies> - - - </project> diff --git a/ruoyi-modules-api/ruoyi-chat-api/pom.xml b/ruoyi-modules-api/ruoyi-chat-api/pom.xml index fde7a46..bca2ede 100644 --- a/ruoyi-modules-api/ruoyi-chat-api/pom.xml +++ b/ruoyi-modules-api/ruoyi-chat-api/pom.xml @@ -17,6 +17,13 @@ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> + <!-- 鑱婂ぉ鍩虹妯″潡 --> + <dependencies> + <dependency> + <groupId>org.ruoyi</groupId> + <artifactId>ruoyi-common-chat</artifactId> + </dependency> + </dependencies> </project> diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatMessage.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatMessage.java index b9caf73..732d9d7 100644 --- a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatMessage.java +++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatMessage.java @@ -46,8 +46,6 @@ /** * 鎵i櫎閲戦 - - */ private BigDecimal deductCost; diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatRobConfig.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatRobConfig.java new file mode 100644 index 0000000..b2120bf --- /dev/null +++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatRobConfig.java @@ -0,0 +1,66 @@ +package org.ruoyi.domain; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.ruoyi.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; + +/** + * 鑱婂ぉ鏈哄櫒浜洪厤缃璞� chat_rob_config + * + * @author ageerle + * @date 2025-04-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("chat_rob_config") +public class ChatRobConfig extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 涓婚敭 + */ + @TableId(value = "id") + private Long id; + + /** + * 鎵�灞炵敤鎴� + */ + private Long userId; + + /** + * 鏈哄櫒浜哄悕绉� + */ + private String botName; + + /** + * 鏈哄櫒鍞竴鐮� + */ + private String uniqueKey; + + /** + * 榛樿濂藉弸鍥炲寮�鍏� + */ + private String defaultFriend; + + /** + * 榛樿缇ゅ洖澶嶅紑鍏� + */ + private String defaultGroup; + + /** + * 鏈哄櫒浜虹姸鎬� 0姝e父 1鍚敤 + */ + private String enable; + + /** + * 澶囨敞 + */ + private String remark; + + +} diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatUsageToken.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatUsageToken.java new file mode 100644 index 0000000..cc15a3d --- /dev/null +++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/ChatUsageToken.java @@ -0,0 +1,51 @@ +package org.ruoyi.domain; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.ruoyi.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; + +/** + * 鐢ㄦ埛token浣跨敤璇︽儏瀵硅薄 chat_usage_token + * + * @author ageerle + * @date 2025-04-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("chat_usage_token") +public class ChatUsageToken extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 涓婚敭 + */ + @TableId(value = "id") + private Long id; + + /** + * 鐢ㄦ埛 + */ + private Long userId; + + /** + * 寰呯粨绠梩oken + */ + private Integer token; + + /** + * 妯″瀷鍚嶇О + */ + private String modelName; + + /** + * 绱浣跨敤token + */ + private String totalToken; + + +} diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatRobConfigBo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatRobConfigBo.java new file mode 100644 index 0000000..60cb384 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatRobConfigBo.java @@ -0,0 +1,72 @@ +package org.ruoyi.domain.bo; + +import org.ruoyi.common.core.validate.AddGroup; +import org.ruoyi.common.core.validate.EditGroup; +import org.ruoyi.domain.ChatRobConfig; +import org.ruoyi.common.mybatis.core.domain.BaseEntity; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 鑱婂ぉ鏈哄櫒浜洪厤缃笟鍔″璞� chat_rob_config + * + * @author ageerle + * @date 2025-04-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = ChatRobConfig.class, reverseConvertGenerate = false) +public class ChatRobConfigBo extends BaseEntity { + + /** + * 涓婚敭 + */ + @NotNull(message = "涓婚敭涓嶈兘涓虹┖", groups = { EditGroup.class }) + private Long id; + + /** + * 鎵�灞炵敤鎴� + */ + @NotNull(message = "鎵�灞炵敤鎴蜂笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) + private Long userId; + + /** + * 鏈哄櫒浜哄悕绉� + */ + @NotBlank(message = "鏈哄櫒浜哄悕绉颁笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) + private String botName; + + /** + * 鏈哄櫒鍞竴鐮� + */ + @NotBlank(message = "鏈哄櫒鍞竴鐮佷笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) + private String uniqueKey; + + /** + * 榛樿濂藉弸鍥炲寮�鍏� + */ + @NotBlank(message = "榛樿濂藉弸鍥炲寮�鍏充笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) + private String defaultFriend; + + /** + * 榛樿缇ゅ洖澶嶅紑鍏� + */ + @NotBlank(message = "榛樿缇ゅ洖澶嶅紑鍏充笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) + private String defaultGroup; + + /** + * 鏈哄櫒浜虹姸鎬� 0姝e父 1鍚敤 + */ + @NotBlank(message = "鏈哄櫒浜虹姸鎬� 0姝e父 1鍚敤涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String enable; + + /** + * 澶囨敞 + */ + @NotBlank(message = "澶囨敞涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String remark; + + +} diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatUsageTokenBo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatUsageTokenBo.java new file mode 100644 index 0000000..59823d0 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatUsageTokenBo.java @@ -0,0 +1,54 @@ +package org.ruoyi.domain.bo; + +import org.ruoyi.common.core.validate.AddGroup; +import org.ruoyi.common.core.validate.EditGroup; +import org.ruoyi.domain.ChatUsageToken; +import org.ruoyi.common.mybatis.core.domain.BaseEntity; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 鐢ㄦ埛token浣跨敤璇︽儏涓氬姟瀵硅薄 chat_usage_token + * + * @author ageerle + * @date 2025-04-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = ChatUsageToken.class, reverseConvertGenerate = false) +public class ChatUsageTokenBo extends BaseEntity { + + /** + * 涓婚敭 + */ + @NotNull(message = "涓婚敭涓嶈兘涓虹┖", groups = { EditGroup.class }) + private Long id; + + /** + * 鐢ㄦ埛 + */ + @NotNull(message = "鐢ㄦ埛涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private Long userId; + + /** + * 寰呯粨绠梩oken + */ + @NotNull(message = "寰呯粨绠梩oken涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private Integer token; + + /** + * 妯″瀷鍚嶇О + */ + @NotBlank(message = "妯″瀷鍚嶇О涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String modelName; + + /** + * 绱浣跨敤token + */ + @NotBlank(message = "绱浣跨敤token涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String totalToken; + + +} diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatVoucherBo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatVoucherBo.java index 35782a7..9c6a83d 100644 --- a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatVoucherBo.java +++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/bo/ChatVoucherBo.java @@ -2,7 +2,7 @@ import org.ruoyi.common.core.validate.AddGroup; import org.ruoyi.common.core.validate.EditGroup; -import org.ruoyi.system.domain.ChatVoucher; +import org.ruoyi.domain.ChatVoucher; import org.ruoyi.common.mybatis.core.domain.BaseEntity; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/request/TranslationRequest.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/request/TranslationRequest.java new file mode 100644 index 0000000..c8121e7 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/request/TranslationRequest.java @@ -0,0 +1,29 @@ +package org.ruoyi.domain.request; + +import lombok.Data; + +/** + * 鎻忚堪锛氱炕璇戣姹傚璞� + * + * @author ageerle@163.com + * date 2025/1/13 + */ + +@Data +public class TranslationRequest { + /** + * 鎻愮ず璇� + */ + private String prompt; + + /** + * 妯″瀷鍚嶇О + */ + private String model; + + /** + * 鐩爣璇█ + */ + private String targetLanguage; + +} diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatRobConfigVo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatRobConfigVo.java new file mode 100644 index 0000000..247ebe2 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatRobConfigVo.java @@ -0,0 +1,78 @@ +package org.ruoyi.domain.vo; + +import org.ruoyi.domain.ChatRobConfig; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + + + +/** + * 鑱婂ぉ鏈哄櫒浜洪厤缃鍥惧璞� chat_rob_config + * + * @author ageerle + * @date 2025-04-08 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = ChatRobConfig.class) +public class ChatRobConfigVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 涓婚敭 + */ + @ExcelProperty(value = "涓婚敭") + private Long id; + + /** + * 鎵�灞炵敤鎴� + */ + @ExcelProperty(value = "鎵�灞炵敤鎴�") + private Long userId; + + /** + * 鏈哄櫒浜哄悕绉� + */ + @ExcelProperty(value = "鏈哄櫒浜哄悕绉�") + private String botName; + + /** + * 鏈哄櫒鍞竴鐮� + */ + @ExcelProperty(value = "鏈哄櫒鍞竴鐮�") + private String uniqueKey; + + /** + * 榛樿濂藉弸鍥炲寮�鍏� + */ + @ExcelProperty(value = "榛樿濂藉弸鍥炲寮�鍏�") + private String defaultFriend; + + /** + * 榛樿缇ゅ洖澶嶅紑鍏� + */ + @ExcelProperty(value = "榛樿缇ゅ洖澶嶅紑鍏�") + private String defaultGroup; + + /** + * 鏈哄櫒浜虹姸鎬� 0姝e父 1鍚敤 + */ + @ExcelProperty(value = "鏈哄櫒浜虹姸鎬� 0姝e父 1鍚敤") + private String enable; + + /** + * 澶囨敞 + */ + @ExcelProperty(value = "澶囨敞") + private String remark; + + +} diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatUsageTokenVo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatUsageTokenVo.java new file mode 100644 index 0000000..e8f279d --- /dev/null +++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatUsageTokenVo.java @@ -0,0 +1,61 @@ +package org.ruoyi.domain.vo; + +import org.ruoyi.domain.ChatUsageToken; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + + + + +/** + * 鐢ㄦ埛token浣跨敤璇︽儏瑙嗗浘瀵硅薄 chat_usage_token + * + * @author ageerle + * @date 2025-04-08 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = ChatUsageToken.class) +public class ChatUsageTokenVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 涓婚敭 + */ + @ExcelProperty(value = "涓婚敭") + private Long id; + + /** + * 鐢ㄦ埛 + */ + @ExcelProperty(value = "鐢ㄦ埛") + private Long userId; + + /** + * 寰呯粨绠梩oken + */ + @ExcelProperty(value = "寰呯粨绠梩oken") + private Integer token; + + /** + * 妯″瀷鍚嶇О + */ + @ExcelProperty(value = "妯″瀷鍚嶇О") + private String modelName; + + /** + * 绱浣跨敤token + */ + @ExcelProperty(value = "绱浣跨敤token") + private String totalToken; + + +} diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatVoucherVo.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatVoucherVo.java index b1a6c6c..8b7092d 100644 --- a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatVoucherVo.java +++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/domain/vo/ChatVoucherVo.java @@ -1,12 +1,13 @@ package org.ruoyi.domain.vo; import java.math.BigDecimal; -import org.ruoyi.system.domain.ChatVoucher; + import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; +import org.ruoyi.domain.ChatVoucher; import java.io.Serial; import java.io.Serializable; diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatRobConfigMapper.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatRobConfigMapper.java new file mode 100644 index 0000000..fb6d0c9 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatRobConfigMapper.java @@ -0,0 +1,16 @@ +package org.ruoyi.mapper; + + +import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; +import org.ruoyi.domain.ChatRobConfig; +import org.ruoyi.domain.vo.ChatRobConfigVo; + +/** + * 鑱婂ぉ鏈哄櫒浜洪厤缃甅apper鎺ュ彛 + * + * @author ageerle + * @date 2025-04-08 + */ +public interface ChatRobConfigMapper extends BaseMapperPlus<ChatRobConfig, ChatRobConfigVo> { + +} diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatUsageTokenMapper.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatUsageTokenMapper.java new file mode 100644 index 0000000..206f900 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/mapper/ChatUsageTokenMapper.java @@ -0,0 +1,16 @@ +package org.ruoyi.mapper; + + +import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; +import org.ruoyi.domain.ChatUsageToken; +import org.ruoyi.domain.vo.ChatUsageTokenVo; + +/** + * 鐢ㄦ埛token浣跨敤璇︽儏Mapper鎺ュ彛 + * + * @author ageerle + * @date 2025-04-08 + */ +public interface ChatUsageTokenMapper extends BaseMapperPlus<ChatUsageToken, ChatUsageTokenVo> { + +} diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatCostService.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatCostService.java deleted file mode 100644 index e5825b0..0000000 --- a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatCostService.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.ruoyi.service; - -import org.ruoyi.domain.bo.ChatMessageBo; - -public interface IChatCostService { - - /** - * 鏍规嵁娑堣�楃殑tokens鎵i櫎浣欓 - * - * @param chatMessageBo - * @return 缁撴灉 - */ - - void deductToken(ChatMessageBo chatMessageBo); - - /** - * 鎵i櫎鐢ㄦ埛鐨勪綑棰� - * - */ - void deductUserBalance(Long userId, Double numberCost); - - - /** - * 鎵i櫎浠诲姟璐圭敤骞朵笖淇濆瓨璁板綍 - * - * @param type 浠诲姟绫诲瀷 - * @param prompt 浠诲姟鎻忚堪 - * @param cost 鎵i櫎璐圭敤 - */ - void taskDeduct(String type,String prompt, double cost); - - - /** - * 鍒ゆ柇鐢ㄦ埛鏄惁浠樿垂 - */ - void checkUserGrade(); -} diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatModelService.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatModelService.java index 9657b59..82dd621 100644 --- a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatModelService.java +++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatModelService.java @@ -46,4 +46,10 @@ * 鏍¢獙骞舵壒閲忓垹闄よ亰澶╂ā鍨嬩俊鎭� */ Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); + + + /** + * 閫氳繃妯″瀷鍚嶇О鑾峰彇妯″瀷淇℃伅 + */ + ChatModelVo selectModelByName(String modelName); } diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatTokenService.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatTokenService.java index 7eb1b1f..d2aca24 100644 --- a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatTokenService.java +++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatTokenService.java @@ -5,8 +5,8 @@ /** * 鑱婂ぉ娑堟伅Service鎺ュ彛 * - * @author Lion Li - * @date 2023-11-26 + * @author ageerle + * @date 2025-04-08 */ public interface IChatTokenService { @@ -20,6 +20,9 @@ */ void resetToken(Long userId,String modelName); + /** + * 淇敼鐢ㄦ埛token + */ void editToken(ChatToken chatToken); } diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatUsageTokenService.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatUsageTokenService.java new file mode 100644 index 0000000..3f757f1 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatUsageTokenService.java @@ -0,0 +1,49 @@ +package org.ruoyi.service; + + +import org.ruoyi.common.mybatis.core.page.TableDataInfo; +import org.ruoyi.common.mybatis.core.page.PageQuery; +import org.ruoyi.domain.bo.ChatUsageTokenBo; +import org.ruoyi.domain.vo.ChatUsageTokenVo; + +import java.util.Collection; +import java.util.List; + +/** + * 鐢ㄦ埛token浣跨敤璇︽儏Service鎺ュ彛 + * + * @author ageerle + * @date 2025-04-08 + */ +public interface IChatUsageTokenService { + + /** + * 鏌ヨ鐢ㄦ埛token浣跨敤璇︽儏 + */ + ChatUsageTokenVo queryById(Long id); + + /** + * 鏌ヨ鐢ㄦ埛token浣跨敤璇︽儏鍒楄〃 + */ + TableDataInfo<ChatUsageTokenVo> queryPageList(ChatUsageTokenBo bo, PageQuery pageQuery); + + /** + * 鏌ヨ鐢ㄦ埛token浣跨敤璇︽儏鍒楄〃 + */ + List<ChatUsageTokenVo> queryList(ChatUsageTokenBo bo); + + /** + * 鏂板鐢ㄦ埛token浣跨敤璇︽儏 + */ + Boolean insertByBo(ChatUsageTokenBo bo); + + /** + * 淇敼鐢ㄦ埛token浣跨敤璇︽儏 + */ + Boolean updateByBo(ChatUsageTokenBo bo); + + /** + * 鏍¢獙骞舵壒閲忓垹闄ょ敤鎴穞oken浣跨敤璇︽儏淇℃伅 + */ + Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); +} diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatVisitorUsageService.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatVisitorUsageService.java index 20c3926..5df31cc 100644 --- a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatVisitorUsageService.java +++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/IChatVisitorUsageService.java @@ -11,8 +11,8 @@ /** * 璁垮绠$悊Service鎺ュ彛 * - * @author Lion Li - * @date 2024-07-14 + * @author ageerle + * @date 2025-04-08 */ public interface IChatVisitorUsageService { diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/impl/ChatModelServiceImpl.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/impl/ChatModelServiceImpl.java index 26d4533..c136bb1 100644 --- a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/impl/ChatModelServiceImpl.java +++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/impl/ChatModelServiceImpl.java @@ -115,4 +115,12 @@ } return baseMapper.deleteBatchIds(ids) > 0; } + + /** + * 閫氳繃妯″瀷鍚嶇О鑾峰彇妯″瀷淇℃伅 + */ + @Override + public ChatModelVo selectModelByName(String modelName) { + return baseMapper.selectVoOne(Wrappers.<ChatModel>lambdaQuery().eq(ChatModel::getModelName, modelName)); + } } diff --git a/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/impl/ChatUsageTokenServiceImpl.java b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/impl/ChatUsageTokenServiceImpl.java new file mode 100644 index 0000000..57565ba --- /dev/null +++ b/ruoyi-modules-api/ruoyi-chat-api/src/main/java/org/ruoyi/service/impl/ChatUsageTokenServiceImpl.java @@ -0,0 +1,112 @@ +package org.ruoyi.service.impl; + +import org.ruoyi.common.core.utils.MapstructUtils; +import org.ruoyi.common.core.utils.StringUtils; +import org.ruoyi.common.mybatis.core.page.TableDataInfo; +import org.ruoyi.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.ruoyi.domain.ChatUsageToken; +import org.ruoyi.domain.bo.ChatUsageTokenBo; +import org.ruoyi.domain.vo.ChatUsageTokenVo; +import org.ruoyi.mapper.ChatUsageTokenMapper; +import org.ruoyi.service.IChatUsageTokenService; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 鐢ㄦ埛token浣跨敤璇︽儏Service涓氬姟灞傚鐞� + * + * @author ageerle + * @date 2025-04-08 + */ +@RequiredArgsConstructor +@Service +public class ChatUsageTokenServiceImpl implements IChatUsageTokenService { + + private final ChatUsageTokenMapper baseMapper; + + /** + * 鏌ヨ鐢ㄦ埛token浣跨敤璇︽儏 + */ + @Override + public ChatUsageTokenVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 鏌ヨ鐢ㄦ埛token浣跨敤璇︽儏鍒楄〃 + */ + @Override + public TableDataInfo<ChatUsageTokenVo> queryPageList(ChatUsageTokenBo bo, PageQuery pageQuery) { + LambdaQueryWrapper<ChatUsageToken> lqw = buildQueryWrapper(bo); + Page<ChatUsageTokenVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 鏌ヨ鐢ㄦ埛token浣跨敤璇︽儏鍒楄〃 + */ + @Override + public List<ChatUsageTokenVo> queryList(ChatUsageTokenBo bo) { + LambdaQueryWrapper<ChatUsageToken> lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper<ChatUsageToken> buildQueryWrapper(ChatUsageTokenBo bo) { + Map<String, Object> params = bo.getParams(); + LambdaQueryWrapper<ChatUsageToken> lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getUserId() != null, ChatUsageToken::getUserId, bo.getUserId()); + lqw.eq(bo.getToken() != null, ChatUsageToken::getToken, bo.getToken()); + lqw.like(StringUtils.isNotBlank(bo.getModelName()), ChatUsageToken::getModelName, bo.getModelName()); + lqw.eq(StringUtils.isNotBlank(bo.getTotalToken()), ChatUsageToken::getTotalToken, bo.getTotalToken()); + return lqw; + } + + /** + * 鏂板鐢ㄦ埛token浣跨敤璇︽儏 + */ + @Override + public Boolean insertByBo(ChatUsageTokenBo bo) { + ChatUsageToken add = MapstructUtils.convert(bo, ChatUsageToken.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 淇敼鐢ㄦ埛token浣跨敤璇︽儏 + */ + @Override + public Boolean updateByBo(ChatUsageTokenBo bo) { + ChatUsageToken update = MapstructUtils.convert(bo, ChatUsageToken.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙 + */ + private void validEntityBeforeSave(ChatUsageToken entity){ + //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫 + } + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛token浣跨敤璇︽儏 + */ + @Override + public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { + if(isValid){ + //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/pom.xml b/ruoyi-modules-api/ruoyi-knowledge-api/pom.xml index 1ba1e99..cf1e031 100644 --- a/ruoyi-modules-api/ruoyi-knowledge-api/pom.xml +++ b/ruoyi-modules-api/ruoyi-knowledge-api/pom.xml @@ -17,4 +17,35 @@ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> + <dependencies> + + <!-- pdf瑙f瀽鍣� --> + <dependency> + <groupId>org.apache.pdfbox</groupId> + <artifactId>pdfbox</artifactId> + <version>2.0.27</version> + </dependency> + + <!-- ollama java sdk --> + <dependency> + <groupId>io.github.ollama4j</groupId> + <artifactId>ollama4j</artifactId> + <version>1.0.79</version> + </dependency> + + <!-- milvus java sdk --> + <dependency> + <groupId>io.milvus</groupId> + <artifactId>milvus-sdk-java</artifactId> + <version>2.3.2</version> + </dependency> + + <dependency> + <groupId>io.weaviate</groupId> + <artifactId>client</artifactId> + <version>4.0.0</version> + </dependency> + + </dependencies> + </project> diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/CodeFileLoader.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/CodeFileLoader.java new file mode 100644 index 0000000..9323141 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/CodeFileLoader.java @@ -0,0 +1,37 @@ +package org.ruoyi.chain.loader; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.ruoyi.chain.split.TextSplitter; +import org.springframework.stereotype.Component; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.List; + +@Component +@AllArgsConstructor +@Slf4j +public class CodeFileLoader implements ResourceLoader { + private final TextSplitter textSplitter; + @Override + public String getContent(InputStream inputStream) { + StringBuffer stringBuffer = new StringBuffer(); + try (InputStreamReader reader = new InputStreamReader(inputStream); + BufferedReader bufferedReader = new BufferedReader(reader)){ + String line; + while ((line = bufferedReader.readLine()) != null) { + stringBuffer.append(line).append("\n"); + } + } catch (IOException e) { + e.printStackTrace(); + } + return stringBuffer.toString(); + } + @Override + public List<String> getChunkList(String content, String kid){ + return textSplitter.split(content, kid); + } +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/CsvFileLoader.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/CsvFileLoader.java new file mode 100644 index 0000000..37d9903 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/CsvFileLoader.java @@ -0,0 +1,18 @@ +package org.ruoyi.chain.loader; + +import org.ruoyi.chain.loader.ResourceLoader; + +import java.io.InputStream; +import java.util.List; + +public class CsvFileLoader implements ResourceLoader { + @Override + public String getContent(InputStream inputStream) { + return null; + } + + @Override + public List<String> getChunkList(String content, String kid) { + return null; + } +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/FolderLoader.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/FolderLoader.java new file mode 100644 index 0000000..7422d31 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/FolderLoader.java @@ -0,0 +1,16 @@ +package org.ruoyi.chain.loader; + +import java.io.InputStream; +import java.util.List; + +public class FolderLoader implements ResourceLoader{ + @Override + public String getContent(InputStream inputStream) { + return null; + } + + @Override + public List<String> getChunkList(String content, String kid) { + return null; + } +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/GithubLoader.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/GithubLoader.java new file mode 100644 index 0000000..55446ef --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/GithubLoader.java @@ -0,0 +1,18 @@ +package org.ruoyi.chain.loader; + +import org.ruoyi.chain.loader.ResourceLoader; + +import java.io.InputStream; +import java.util.List; + +public class GithubLoader implements ResourceLoader { + @Override + public String getContent(InputStream inputStream) { + return null; + } + + @Override + public List<String> getChunkList(String content, String kid) { + return null; + } +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/JsonFileLoader.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/JsonFileLoader.java new file mode 100644 index 0000000..35f3fd4 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/JsonFileLoader.java @@ -0,0 +1,18 @@ +package org.ruoyi.chain.loader; + +import org.ruoyi.chain.loader.ResourceLoader; + +import java.io.InputStream; +import java.util.List; + +public class JsonFileLoader implements ResourceLoader { + @Override + public String getContent(InputStream inputStream) { + return null; + } + + @Override + public List<String> getChunkList(String content, String kid) { + return null; + } +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/MarkDownFileLoader.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/MarkDownFileLoader.java new file mode 100644 index 0000000..182d0a7 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/MarkDownFileLoader.java @@ -0,0 +1,38 @@ +package org.ruoyi.chain.loader; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.ruoyi.chain.loader.ResourceLoader; +import org.ruoyi.chain.split.TextSplitter; +import org.springframework.stereotype.Component; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.List; + +@Component +@AllArgsConstructor +@Slf4j +public class MarkDownFileLoader implements ResourceLoader { + private final TextSplitter textSplitter; + @Override + public String getContent(InputStream inputStream) { + StringBuffer stringBuffer = new StringBuffer(); + try (InputStreamReader reader = new InputStreamReader(inputStream); + BufferedReader bufferedReader = new BufferedReader(reader)){ + String line; + while ((line = bufferedReader.readLine()) != null) { + stringBuffer.append(line).append("\n"); + } + } catch (IOException e) { + e.printStackTrace(); + } + return stringBuffer.toString(); + } + @Override + public List<String> getChunkList(String content, String kid){ + return textSplitter.split(content, kid); + } +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/PdfFileLoader.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/PdfFileLoader.java new file mode 100644 index 0000000..06e74b8 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/PdfFileLoader.java @@ -0,0 +1,35 @@ +package org.ruoyi.chain.loader; + +import lombok.AllArgsConstructor; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.text.PDFTextStripper; +import org.ruoyi.chain.loader.ResourceLoader; +import org.ruoyi.chain.split.TextSplitter; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +@Component +@AllArgsConstructor +public class PdfFileLoader implements ResourceLoader { + private final TextSplitter characterTextSplitter; + @Override + public String getContent(InputStream inputStream) { + PDDocument document = null; + try { + document = PDDocument.load(inputStream); + PDFTextStripper textStripper = new PDFTextStripper(); + String content = textStripper.getText(document); + return content; + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @Override + public List<String> getChunkList(String content, String kid) { + return characterTextSplitter.split(content, kid); + } +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/ResourceLoader.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/ResourceLoader.java new file mode 100644 index 0000000..9a91cdd --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/ResourceLoader.java @@ -0,0 +1,14 @@ +package org.ruoyi.chain.loader; + +import java.io.InputStream; +import java.util.List; + +/** + * 璧勬簮杞藉叆 + */ +public interface ResourceLoader { + + String getContent(InputStream inputStream); + + List<String> getChunkList(String content, String kid); +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/ResourceLoaderFactory.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/ResourceLoaderFactory.java new file mode 100644 index 0000000..6aca900 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/ResourceLoaderFactory.java @@ -0,0 +1,35 @@ +package org.ruoyi.chain.loader; + +import lombok.AllArgsConstructor; +import org.ruoyi.chain.loader.ResourceLoader; +import org.ruoyi.chain.loader.TextFileLoader; +import org.ruoyi.chain.split.CharacterTextSplitter; +import org.ruoyi.chain.split.CodeTextSplitter; +import org.ruoyi.chain.split.MarkdownTextSplitter; +import org.ruoyi.chain.split.TokenTextSplitter; +import org.ruoyi.knowledge.constant.FileType; +import org.springframework.stereotype.Component; + +@AllArgsConstructor +@Component +public class ResourceLoaderFactory { + private final CharacterTextSplitter characterTextSplitter; + private final CodeTextSplitter codeTextSplitter; + private final MarkdownTextSplitter markdownTextSplitter; + private final TokenTextSplitter tokenTextSplitter; + public ResourceLoader getLoaderByFileType(String fileType){ + if (FileType.isTextFile(fileType)){ + return new TextFileLoader(characterTextSplitter); + } else if (FileType.isWord(fileType)) { + return new WordLoader(characterTextSplitter); + } else if (FileType.isPdf(fileType)) { + return new PdfFileLoader(characterTextSplitter); + } else if (FileType.isMdFile(fileType)) { + return new MarkDownFileLoader(markdownTextSplitter); + }else if (FileType.isCodeFile(fileType)) { + return new CodeFileLoader(codeTextSplitter); + }else { + return new TextFileLoader(characterTextSplitter); + } + } +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/TextFileLoader.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/TextFileLoader.java new file mode 100644 index 0000000..da3051e --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/TextFileLoader.java @@ -0,0 +1,37 @@ +package org.ruoyi.chain.loader; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.ruoyi.chain.split.TextSplitter; +import org.springframework.stereotype.Component; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.List; + +@Component +@AllArgsConstructor +@Slf4j +public class TextFileLoader implements ResourceLoader{ + private final TextSplitter textSplitter; + @Override + public String getContent(InputStream inputStream) { + StringBuffer stringBuffer = new StringBuffer(); + try (InputStreamReader reader = new InputStreamReader(inputStream, "UTF-8"); + BufferedReader bufferedReader = new BufferedReader(reader)){ + String line; + while ((line = bufferedReader.readLine()) != null) { + stringBuffer.append(line).append("\n"); + } + } catch (IOException e) { + e.printStackTrace(); + } + return stringBuffer.toString(); + } + @Override + public List<String> getChunkList(String content, String kid){ + return textSplitter.split(content, kid); + } +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/WordLoader.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/WordLoader.java new file mode 100644 index 0000000..624f01b --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/loader/WordLoader.java @@ -0,0 +1,38 @@ +package org.ruoyi.chain.loader; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.xwpf.extractor.XWPFWordExtractor; +import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.ruoyi.chain.loader.ResourceLoader; +import org.ruoyi.chain.split.TextSplitter; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +@Component +@AllArgsConstructor +@Slf4j +public class WordLoader implements ResourceLoader { + private final TextSplitter textSplitter; + @Override + public String getContent(InputStream inputStream) { + XWPFDocument document = null; + try { + document = new XWPFDocument(inputStream); + XWPFWordExtractor extractor = new XWPFWordExtractor(document); + String content = extractor.getText(); + return content; + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @Override + public List<String> getChunkList(String content, String kid) { + return textSplitter.split(content, kid); + } + +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/CharacterTextSplitter.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/CharacterTextSplitter.java new file mode 100644 index 0000000..83ca334 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/CharacterTextSplitter.java @@ -0,0 +1,64 @@ +package org.ruoyi.chain.split; + +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.ruoyi.common.core.utils.StringUtils; +import org.ruoyi.chain.split.TextSplitter; +import org.ruoyi.domain.vo.KnowledgeInfoVo; +import org.ruoyi.service.IKnowledgeInfoService; +import org.springframework.context.annotation.Lazy; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@Component +@Slf4j +@Primary +public class CharacterTextSplitter implements TextSplitter { + + @Lazy + @Resource + private IKnowledgeInfoService knowledgeInfoService; + + @Override + public List<String> split(String content, String kid) { + // 浠庣煡璇嗗簱琛ㄤ腑鑾峰彇閰嶇疆 + KnowledgeInfoVo knowledgeInfoVo = knowledgeInfoService.queryById(Long.valueOf(kid)); + String knowledgeSeparator = knowledgeInfoVo.getKnowledgeSeparator(); + int textBlockSize = knowledgeInfoVo.getTextBlockSize(); + int overlapChar = knowledgeInfoVo.getOverlapChar(); + List<String> chunkList = new ArrayList<>(); + if (content.contains(knowledgeSeparator) && StringUtils.isNotBlank(knowledgeSeparator)) { + // 鎸夎嚜瀹氫箟鍒嗛殧绗﹀垏鍒� + String[] chunks = content.split(knowledgeSeparator); + chunkList.addAll(Arrays.asList(chunks)); + } else { + int indexMin = 0; + int len = content.length(); + int i = 0; + int right = 0; + while (true) { + if (len > right) { + int begin = i * textBlockSize - overlapChar; + if (begin < indexMin) { + begin = indexMin; + } + int end = textBlockSize * (i + 1) + overlapChar; + if (end > len) { + end = len; + } + String chunk = content.substring(begin, end); + chunkList.add(chunk); + i++; + right = right + textBlockSize; + } else { + break; + } + } + } + return chunkList; + } +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/CodeTextSplitter.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/CodeTextSplitter.java new file mode 100644 index 0000000..f082ec8 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/CodeTextSplitter.java @@ -0,0 +1,18 @@ +package org.ruoyi.chain.split; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.ruoyi.chain.split.TextSplitter; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@AllArgsConstructor +@Slf4j +public class CodeTextSplitter implements TextSplitter { + @Override + public List<String> split(String content, String kid) { + return null; + } +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/MarkdownTextSplitter.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/MarkdownTextSplitter.java new file mode 100644 index 0000000..299cc43 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/MarkdownTextSplitter.java @@ -0,0 +1,17 @@ +package org.ruoyi.chain.split; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@AllArgsConstructor +@Slf4j +public class MarkdownTextSplitter implements TextSplitter{ + @Override + public List<String> split(String content, String kid) { + return null; + } +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/TextSplitter.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/TextSplitter.java new file mode 100644 index 0000000..93b5d57 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/TextSplitter.java @@ -0,0 +1,18 @@ +package org.ruoyi.chain.split; + +import java.util.List; + +/** + * 鏂囨湰鍒囧垎 + */ +public interface TextSplitter { + + /** + * 鏂囨湰鍒囧垎 + * + * @param content 鏂囨湰鍐呭 + * @param kid 鐭ヨ瘑搴搃d + * @return 鍒囧垎鍚庣殑鏂囨湰鍒楄〃 + */ + List<String> split(String content, String kid); +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/TokenTextSplitter.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/TokenTextSplitter.java new file mode 100644 index 0000000..823014a --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/chain/split/TokenTextSplitter.java @@ -0,0 +1,18 @@ +package org.ruoyi.chain.split; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.ruoyi.chain.split.TextSplitter; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@AllArgsConstructor +@Slf4j +public class TokenTextSplitter implements TextSplitter { + @Override + public List<String> split(String content, String kid) { + return null; + } +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/constant/FileType.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/constant/FileType.java new file mode 100644 index 0000000..aa14167 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/constant/FileType.java @@ -0,0 +1,91 @@ +package org.ruoyi.constant; + +public class FileType { + public static final String TXT = "txt"; + public static final String CSV = "csv"; + public static final String MD = "md"; + public static final String DOC = "doc"; + public static final String DOCX = "docx"; + public static final String PDF = "pdf"; + + public static final String LOG = "log"; + public static final String XML = "xml"; + + public static final String JAVA = "java"; + public static final String HTML = "html"; + public static final String HTM = "htm"; + public static final String CSS = "css"; + public static final String JS = "js"; + public static final String PY = "py"; + public static final String CPP = "cpp"; + public static final String SQL = "sql"; + public static final String PHP = "php"; + public static final String RUBY = "ruby"; + public static final String C = "c"; + public static final String H = "h"; + public static final String HPP = "hpp"; + public static final String SWIFT = "swift"; + public static final String TS = "ts"; + public static final String RUST = "rs"; + public static final String PERL = "perl"; + public static final String SHELL = "shell"; + public static final String BAT = "bat"; + public static final String CMD = "cmd"; + + public static final String PROPERTIES = "properties"; + public static final String INI = "ini"; + public static final String YAML = "yaml"; + public static final String YML = "yml"; + + public static boolean isTextFile(String type){ + if (type.equalsIgnoreCase(TXT) || type.equalsIgnoreCase(CSV) || type.equalsIgnoreCase(PROPERTIES) + || type.equalsIgnoreCase(INI) || type.equalsIgnoreCase(YAML) || type.equalsIgnoreCase(YML) + || type.equalsIgnoreCase(LOG) || type.equalsIgnoreCase(XML)){ + return true; + } + else { + return false; + } + } + + public static boolean isCodeFile(String type){ + if (type.equalsIgnoreCase(JAVA) || type.equalsIgnoreCase(HTML) || type.equalsIgnoreCase(HTM) || type.equalsIgnoreCase(JS) || type.equalsIgnoreCase(PY) + || type.equalsIgnoreCase(CPP) || type.equalsIgnoreCase(SQL) || type.equalsIgnoreCase(PHP) || type.equalsIgnoreCase(RUBY) + || type.equalsIgnoreCase(C) || type.equalsIgnoreCase(H) || type.equalsIgnoreCase(HPP) || type.equalsIgnoreCase(SWIFT) + || type.equalsIgnoreCase(TS) || type.equalsIgnoreCase(RUST) || type.equalsIgnoreCase(PERL) || type.equalsIgnoreCase(SHELL) + || type.equalsIgnoreCase(BAT) || type.equalsIgnoreCase(CMD) || type.equalsIgnoreCase(CSS)){ + return true; + } + else { + return false; + } + } + + public static boolean isMdFile(String type){ + if (type.equalsIgnoreCase(MD)){ + return true; + } + else { + return false; + } + } + + public static boolean isWord(String type){ + if (type.equalsIgnoreCase(DOC) || type.equalsIgnoreCase(DOCX)){ + return true; + } + else { + return false; + } + } + + public static boolean isPdf(String type){ + if (type.equalsIgnoreCase(PDF)){ + return true; + } + else { + return false; + } + } + +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/KnowledgeAttach.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/KnowledgeAttach.java new file mode 100644 index 0000000..b72c733 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/KnowledgeAttach.java @@ -0,0 +1,61 @@ +package org.ruoyi.domain; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.ruoyi.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; + +/** + * 鐭ヨ瘑搴撻檮浠跺璞� knowledge_attach + * + * @author ageerle + * @date 2025-04-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("knowledge_attach") +public class KnowledgeAttach extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @TableId(value = "id") + private Long id; + + /** + * 鐭ヨ瘑搴揑D + */ + private String kid; + + /** + * 鏂囨。ID + */ + private String docId; + + /** + * 鏂囨。鍚嶇О + */ + private String docName; + + /** + * 鏂囨。绫诲瀷 + */ + private String docType; + + /** + * 鏂囨。鍐呭 + */ + private String content; + + /** + * 澶囨敞 + */ + private String remark; + + +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/KnowledgeFragment.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/KnowledgeFragment.java new file mode 100644 index 0000000..df325e6 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/KnowledgeFragment.java @@ -0,0 +1,61 @@ +package org.ruoyi.domain; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.ruoyi.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; + +/** + * 鐭ヨ瘑鐗囨瀵硅薄 knowledge_fragment + * + * @author ageerle + * @date 2025-04-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("knowledge_fragment") +public class KnowledgeFragment extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @TableId(value = "id") + private Long id; + + /** + * 鐭ヨ瘑搴揑D + */ + private String kid; + + /** + * 鏂囨。ID + */ + private String docId; + + /** + * 鐭ヨ瘑鐗囨ID + */ + private String fid; + + /** + * 鐗囨绱㈠紩涓嬫爣 + */ + private Long idx; + + /** + * 鏂囨。鍐呭 + */ + private String content; + + /** + * 澶囨敞 + */ + private String remark; + + +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/KnowledgeInfo.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/KnowledgeInfo.java new file mode 100644 index 0000000..02442cd --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/KnowledgeInfo.java @@ -0,0 +1,96 @@ +package org.ruoyi.domain; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.ruoyi.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; + +/** + * 鐭ヨ瘑搴撳璞� knowledge_info + * + * @author ageerle + * @date 2025-04-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("knowledge_info") +public class KnowledgeInfo extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @TableId(value = "id") + private Long id; + + /** + * 鐭ヨ瘑搴揑D + */ + private String kid; + + /** + * 鐢ㄦ埛ID + */ + private Long uid; + + /** + * 鐭ヨ瘑搴撳悕绉� + */ + private String kname; + + /** + * 鏄惁鍏紑鐭ヨ瘑搴擄紙0 鍚� 1鏄級 + */ + private Integer share; + + /** + * 鎻忚堪 + */ + private String description; + + /** + * 鐭ヨ瘑鍒嗛殧绗� + */ + private String knowledgeSeparator; + + /** + * 鎻愰棶鍒嗛殧绗� + */ + private String questionSeparator; + + /** + * 閲嶅彔瀛楃鏁� + */ + private Long overlapChar; + + /** + * 鐭ヨ瘑搴撲腑妫�绱㈢殑鏉℃暟 + */ + private Long retrieveLimit; + + /** + * 鏂囨湰鍧楀ぇ灏� + */ + private Long textBlockSize; + + /** + * 鍚戦噺搴� + */ + private String vector; + + /** + * 鍚戦噺妯″瀷 + */ + private String vectorModel; + + /** + * 澶囨敞 + */ + private String remark; + + +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/KnowledgeAttachBo.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/KnowledgeAttachBo.java new file mode 100644 index 0000000..e2daedb --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/KnowledgeAttachBo.java @@ -0,0 +1,66 @@ +package org.ruoyi.domain.bo; + +import org.ruoyi.common.core.validate.AddGroup; +import org.ruoyi.common.core.validate.EditGroup; +import org.ruoyi.domain.KnowledgeAttach; +import org.ruoyi.common.mybatis.core.domain.BaseEntity; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 鐭ヨ瘑搴撻檮浠朵笟鍔″璞� knowledge_attach + * + * @author ageerle + * @date 2025-04-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = KnowledgeAttach.class, reverseConvertGenerate = false) +public class KnowledgeAttachBo extends BaseEntity { + + /** + * + */ + @NotNull(message = "涓嶈兘涓虹┖", groups = { EditGroup.class }) + private Long id; + + /** + * 鐭ヨ瘑搴揑D + */ + @NotBlank(message = "鐭ヨ瘑搴揑D涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String kid; + + /** + * 鏂囨。ID + */ + @NotBlank(message = "鏂囨。ID涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String docId; + + /** + * 鏂囨。鍚嶇О + */ + @NotBlank(message = "鏂囨。鍚嶇О涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String docName; + + /** + * 鏂囨。绫诲瀷 + */ + @NotBlank(message = "鏂囨。绫诲瀷涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String docType; + + /** + * 鏂囨。鍐呭 + */ + @NotBlank(message = "鏂囨。鍐呭涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String content; + + /** + * 澶囨敞 + */ + @NotBlank(message = "澶囨敞涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String remark; + + +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/KnowledgeFragmentBo.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/KnowledgeFragmentBo.java new file mode 100644 index 0000000..a546191 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/KnowledgeFragmentBo.java @@ -0,0 +1,66 @@ +package org.ruoyi.domain.bo; + +import org.ruoyi.common.core.validate.AddGroup; +import org.ruoyi.common.core.validate.EditGroup; +import org.ruoyi.domain.KnowledgeFragment; +import org.ruoyi.common.mybatis.core.domain.BaseEntity; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 鐭ヨ瘑鐗囨涓氬姟瀵硅薄 knowledge_fragment + * + * @author ageerle + * @date 2025-04-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = KnowledgeFragment.class, reverseConvertGenerate = false) +public class KnowledgeFragmentBo extends BaseEntity { + + /** + * + */ + @NotNull(message = "涓嶈兘涓虹┖", groups = { EditGroup.class }) + private Long id; + + /** + * 鐭ヨ瘑搴揑D + */ + @NotBlank(message = "鐭ヨ瘑搴揑D涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String kid; + + /** + * 鏂囨。ID + */ + @NotBlank(message = "鏂囨。ID涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String docId; + + /** + * 鐭ヨ瘑鐗囨ID + */ + @NotBlank(message = "鐭ヨ瘑鐗囨ID涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String fid; + + /** + * 鐗囨绱㈠紩涓嬫爣 + */ + @NotNull(message = "鐗囨绱㈠紩涓嬫爣涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private Long idx; + + /** + * 鏂囨。鍐呭 + */ + @NotBlank(message = "鏂囨。鍐呭涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String content; + + /** + * 澶囨敞 + */ + @NotBlank(message = "澶囨敞涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String remark; + + +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/KnowledgeInfoBo.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/KnowledgeInfoBo.java new file mode 100644 index 0000000..8275324 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/KnowledgeInfoBo.java @@ -0,0 +1,108 @@ +package org.ruoyi.domain.bo; + +import org.ruoyi.common.core.validate.AddGroup; +import org.ruoyi.common.core.validate.EditGroup; +import org.ruoyi.domain.KnowledgeInfo; +import org.ruoyi.common.mybatis.core.domain.BaseEntity; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 鐭ヨ瘑搴撲笟鍔″璞� knowledge_info + * + * @author ageerle + * @date 2025-04-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = KnowledgeInfo.class, reverseConvertGenerate = false) +public class KnowledgeInfoBo extends BaseEntity { + + /** + * + */ + @NotNull(message = "涓嶈兘涓虹┖", groups = { EditGroup.class }) + private Long id; + + /** + * 鐭ヨ瘑搴揑D + */ + @NotBlank(message = "鐭ヨ瘑搴揑D涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String kid; + + /** + * 鐢ㄦ埛ID + */ + @NotNull(message = "鐢ㄦ埛ID涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private Long uid; + + /** + * 鐭ヨ瘑搴撳悕绉� + */ + @NotBlank(message = "鐭ヨ瘑搴撳悕绉颁笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) + private String kname; + + /** + * 鏄惁鍏紑鐭ヨ瘑搴擄紙0 鍚� 1鏄級 + */ + @NotNull(message = "鏄惁鍏紑鐭ヨ瘑搴擄紙0 鍚� 1鏄級涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private Integer share; + + /** + * 鎻忚堪 + */ + @NotBlank(message = "鎻忚堪涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String description; + + /** + * 鐭ヨ瘑鍒嗛殧绗� + */ + @NotBlank(message = "鐭ヨ瘑鍒嗛殧绗︿笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) + private String knowledgeSeparator; + + /** + * 鎻愰棶鍒嗛殧绗� + */ + @NotBlank(message = "鎻愰棶鍒嗛殧绗︿笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) + private String questionSeparator; + + /** + * 閲嶅彔瀛楃鏁� + */ + @NotNull(message = "閲嶅彔瀛楃鏁颁笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) + private Long overlapChar; + + /** + * 鐭ヨ瘑搴撲腑妫�绱㈢殑鏉℃暟 + */ + @NotNull(message = "鐭ヨ瘑搴撲腑妫�绱㈢殑鏉℃暟涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private Long retrieveLimit; + + /** + * 鏂囨湰鍧楀ぇ灏� + */ + @NotNull(message = "鏂囨湰鍧楀ぇ灏忎笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) + private Long textBlockSize; + + /** + * 鍚戦噺搴� + */ + @NotBlank(message = "鍚戦噺搴撲笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) + private String vector; + + /** + * 鍚戦噺妯″瀷 + */ + @NotBlank(message = "鍚戦噺妯″瀷涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String vectorModel; + + /** + * 澶囨敞 + */ + @NotBlank(message = "澶囨敞涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String remark; + + +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/vo/KnowledgeAttachVo.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/vo/KnowledgeAttachVo.java new file mode 100644 index 0000000..fb463d4 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/vo/KnowledgeAttachVo.java @@ -0,0 +1,72 @@ +package org.ruoyi.domain.vo; + +import org.ruoyi.domain.KnowledgeAttach; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + + + + +/** + * 鐭ヨ瘑搴撻檮浠惰鍥惧璞� knowledge_attach + * + * @author ageerle + * @date 2025-04-08 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = KnowledgeAttach.class) +public class KnowledgeAttachVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @ExcelProperty(value = "") + private Long id; + + /** + * 鐭ヨ瘑搴揑D + */ + @ExcelProperty(value = "鐭ヨ瘑搴揑D") + private String kid; + + /** + * 鏂囨。ID + */ + @ExcelProperty(value = "鏂囨。ID") + private String docId; + + /** + * 鏂囨。鍚嶇О + */ + @ExcelProperty(value = "鏂囨。鍚嶇О") + private String docName; + + /** + * 鏂囨。绫诲瀷 + */ + @ExcelProperty(value = "鏂囨。绫诲瀷") + private String docType; + + /** + * 鏂囨。鍐呭 + */ + @ExcelProperty(value = "鏂囨。鍐呭") + private String content; + + /** + * 澶囨敞 + */ + @ExcelProperty(value = "澶囨敞") + private String remark; + + +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/vo/KnowledgeFragmentVo.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/vo/KnowledgeFragmentVo.java new file mode 100644 index 0000000..fcda458 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/vo/KnowledgeFragmentVo.java @@ -0,0 +1,74 @@ +package org.ruoyi.domain.vo; + + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.ruoyi.domain.KnowledgeFragment; + +import java.io.Serial; +import java.io.Serializable; + + + + +/** + * 鐭ヨ瘑鐗囨瑙嗗浘瀵硅薄 knowledge_fragment + * + * @author ageerle + * @date 2025-04-08 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = KnowledgeFragment.class) +public class KnowledgeFragmentVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @ExcelProperty(value = "") + private Long id; + + /** + * 鐭ヨ瘑搴揑D + */ + @ExcelProperty(value = "鐭ヨ瘑搴揑D") + private String kid; + + /** + * 鏂囨。ID + */ + @ExcelProperty(value = "鏂囨。ID") + private String docId; + + /** + * 鐭ヨ瘑鐗囨ID + */ + @ExcelProperty(value = "鐭ヨ瘑鐗囨ID") + private String fid; + + /** + * 鐗囨绱㈠紩涓嬫爣 + */ + @ExcelProperty(value = "鐗囨绱㈠紩涓嬫爣") + private Long idx; + + /** + * 鏂囨。鍐呭 + */ + @ExcelProperty(value = "鏂囨。鍐呭") + private String content; + + /** + * 澶囨敞 + */ + @ExcelProperty(value = "澶囨敞") + private String remark; + + +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/vo/KnowledgeInfoVo.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/vo/KnowledgeInfoVo.java new file mode 100644 index 0000000..6a5fdbf --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/vo/KnowledgeInfoVo.java @@ -0,0 +1,119 @@ +package org.ruoyi.domain.vo; + + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.ruoyi.common.excel.annotation.ExcelDictFormat; +import org.ruoyi.common.excel.convert.ExcelDictConvert; +import org.ruoyi.domain.KnowledgeInfo; + +import java.io.Serial; +import java.io.Serializable; + + + + +/** + * 鐭ヨ瘑搴撹鍥惧璞� knowledge_info + * + * @author ageerle + * @date 2025-04-08 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = KnowledgeInfo.class) +public class KnowledgeInfoVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @ExcelProperty(value = "") + private Long id; + + /** + * 鐭ヨ瘑搴揑D + */ + @ExcelProperty(value = "鐭ヨ瘑搴揑D") + private String kid; + + /** + * 鐢ㄦ埛ID + */ + @ExcelProperty(value = "鐢ㄦ埛ID") + private Long uid; + + /** + * 鐭ヨ瘑搴撳悕绉� + */ + @ExcelProperty(value = "鐭ヨ瘑搴撳悕绉�") + private String kname; + + /** + * 鏄惁鍏紑鐭ヨ瘑搴擄紙0 鍚� 1鏄級 + */ + @ExcelProperty(value = "鏄惁鍏紑鐭ヨ瘑搴�", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=,鍚�=,1=鏄�") + private Integer share; + + /** + * 鎻忚堪 + */ + @ExcelProperty(value = "鎻忚堪") + private String description; + + /** + * 鐭ヨ瘑鍒嗛殧绗� + */ + @ExcelProperty(value = "鐭ヨ瘑鍒嗛殧绗�") + private String knowledgeSeparator; + + /** + * 鎻愰棶鍒嗛殧绗� + */ + @ExcelProperty(value = "鎻愰棶鍒嗛殧绗�") + private String questionSeparator; + + /** + * 閲嶅彔瀛楃鏁� + */ + @ExcelProperty(value = "閲嶅彔瀛楃鏁�") + private Integer overlapChar; + + /** + * 鐭ヨ瘑搴撲腑妫�绱㈢殑鏉℃暟 + */ + @ExcelProperty(value = "鐭ヨ瘑搴撲腑妫�绱㈢殑鏉℃暟") + private Integer retrieveLimit; + + /** + * 鏂囨湰鍧楀ぇ灏� + */ + @ExcelProperty(value = "鏂囨湰鍧楀ぇ灏�") + private Integer textBlockSize; + + /** + * 鍚戦噺搴� + */ + @ExcelProperty(value = "鍚戦噺搴�") + private String vector; + + /** + * 鍚戦噺妯″瀷 + */ + @ExcelProperty(value = "鍚戦噺妯″瀷") + private String vectorModel; + + /** + * 澶囨敞 + */ + @ExcelProperty(value = "澶囨敞") + private String remark; + + +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/mapper/KnowledgeAttachMapper.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/mapper/KnowledgeAttachMapper.java new file mode 100644 index 0000000..c58856c --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/mapper/KnowledgeAttachMapper.java @@ -0,0 +1,16 @@ +package org.ruoyi.mapper; + + +import org.ruoyi.domain.KnowledgeAttach; +import org.ruoyi.domain.vo.KnowledgeAttachVo; +import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 鐭ヨ瘑搴撻檮浠禡apper鎺ュ彛 + * + * @author ageerle + * @date 2025-04-08 + */ +public interface KnowledgeAttachMapper extends BaseMapperPlus<KnowledgeAttach, KnowledgeAttachVo> { + +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/mapper/KnowledgeFragmentMapper.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/mapper/KnowledgeFragmentMapper.java new file mode 100644 index 0000000..5e73b38 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/mapper/KnowledgeFragmentMapper.java @@ -0,0 +1,16 @@ +package org.ruoyi.mapper; + + +import org.ruoyi.domain.KnowledgeFragment; +import org.ruoyi.domain.vo.KnowledgeFragmentVo; +import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 鐭ヨ瘑鐗囨Mapper鎺ュ彛 + * + * @author ageerle + * @date 2025-04-08 + */ +public interface KnowledgeFragmentMapper extends BaseMapperPlus<KnowledgeFragment, KnowledgeFragmentVo> { + +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/mapper/KnowledgeInfoMapper.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/mapper/KnowledgeInfoMapper.java new file mode 100644 index 0000000..47db02b --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/mapper/KnowledgeInfoMapper.java @@ -0,0 +1,16 @@ +package org.ruoyi.mapper; + + +import org.ruoyi.domain.KnowledgeInfo; +import org.ruoyi.domain.vo.KnowledgeInfoVo; +import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 鐭ヨ瘑搴揗apper鎺ュ彛 + * + * @author ageerle + * @date 2025-04-08 + */ +public interface KnowledgeInfoMapper extends BaseMapperPlus<KnowledgeInfo, KnowledgeInfoVo> { + +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/EmbeddingService.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/EmbeddingService.java new file mode 100644 index 0000000..9884118 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/EmbeddingService.java @@ -0,0 +1,20 @@ +package org.ruoyi.service; + +import java.util.List; + +public interface EmbeddingService { + + void storeEmbeddings(List<String> chunkList, String kid, String docId,List<String> fidList); + + void removeByDocId(String kid,String docId); + + void removeByKid(String kid); + + List<Double> getQueryVector(String query, String kid); + + void createSchema(String kid); + + void removeByKidAndFid(String kid, String fid); + + void saveFragment(String kid, String docId, String fid, String content); +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/IKnowledgeAttachService.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/IKnowledgeAttachService.java new file mode 100644 index 0000000..9082878 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/IKnowledgeAttachService.java @@ -0,0 +1,49 @@ +package org.ruoyi.service; + + +import org.ruoyi.domain.bo.KnowledgeAttachBo; +import org.ruoyi.domain.vo.KnowledgeAttachVo; +import org.ruoyi.common.mybatis.core.page.TableDataInfo; +import org.ruoyi.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 鐭ヨ瘑搴撻檮浠禨ervice鎺ュ彛 + * + * @author ageerle + * @date 2025-04-08 + */ +public interface IKnowledgeAttachService { + + /** + * 鏌ヨ鐭ヨ瘑搴撻檮浠� + */ + KnowledgeAttachVo queryById(Long id); + + /** + * 鏌ヨ鐭ヨ瘑搴撻檮浠跺垪琛� + */ + TableDataInfo<KnowledgeAttachVo> queryPageList(KnowledgeAttachBo bo, PageQuery pageQuery); + + /** + * 鏌ヨ鐭ヨ瘑搴撻檮浠跺垪琛� + */ + List<KnowledgeAttachVo> queryList(KnowledgeAttachBo bo); + + /** + * 鏂板鐭ヨ瘑搴撻檮浠� + */ + Boolean insertByBo(KnowledgeAttachBo bo); + + /** + * 淇敼鐭ヨ瘑搴撻檮浠� + */ + Boolean updateByBo(KnowledgeAttachBo bo); + + /** + * 鏍¢獙骞舵壒閲忓垹闄ょ煡璇嗗簱闄勪欢淇℃伅 + */ + Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/IKnowledgeFragmentService.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/IKnowledgeFragmentService.java new file mode 100644 index 0000000..5e88ef7 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/IKnowledgeFragmentService.java @@ -0,0 +1,49 @@ +package org.ruoyi.service; + + +import org.ruoyi.common.mybatis.core.page.TableDataInfo; +import org.ruoyi.common.mybatis.core.page.PageQuery; +import org.ruoyi.domain.bo.KnowledgeFragmentBo; +import org.ruoyi.domain.vo.KnowledgeFragmentVo; + +import java.util.Collection; +import java.util.List; + +/** + * 鐭ヨ瘑鐗囨Service鎺ュ彛 + * + * @author ageerle + * @date 2025-04-08 + */ +public interface IKnowledgeFragmentService { + + /** + * 鏌ヨ鐭ヨ瘑鐗囨 + */ + KnowledgeFragmentVo queryById(Long id); + + /** + * 鏌ヨ鐭ヨ瘑鐗囨鍒楄〃 + */ + TableDataInfo<KnowledgeFragmentVo> queryPageList(KnowledgeFragmentBo bo, PageQuery pageQuery); + + /** + * 鏌ヨ鐭ヨ瘑鐗囨鍒楄〃 + */ + List<KnowledgeFragmentVo> queryList(KnowledgeFragmentBo bo); + + /** + * 鏂板鐭ヨ瘑鐗囨 + */ + Boolean insertByBo(KnowledgeFragmentBo bo); + + /** + * 淇敼鐭ヨ瘑鐗囨 + */ + Boolean updateByBo(KnowledgeFragmentBo bo); + + /** + * 鏍¢獙骞舵壒閲忓垹闄ょ煡璇嗙墖娈典俊鎭� + */ + Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/IKnowledgeInfoService.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/IKnowledgeInfoService.java new file mode 100644 index 0000000..fc9d37b --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/IKnowledgeInfoService.java @@ -0,0 +1,49 @@ +package org.ruoyi.service; + + +import org.ruoyi.domain.bo.KnowledgeInfoBo; +import org.ruoyi.domain.vo.KnowledgeInfoVo; +import org.ruoyi.common.mybatis.core.page.TableDataInfo; +import org.ruoyi.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 鐭ヨ瘑搴揝ervice鎺ュ彛 + * + * @author ageerle + * @date 2025-04-08 + */ +public interface IKnowledgeInfoService { + + /** + * 鏌ヨ鐭ヨ瘑搴� + */ + KnowledgeInfoVo queryById(Long id); + + /** + * 鏌ヨ鐭ヨ瘑搴撳垪琛� + */ + TableDataInfo<KnowledgeInfoVo> queryPageList(KnowledgeInfoBo bo, PageQuery pageQuery); + + /** + * 鏌ヨ鐭ヨ瘑搴撳垪琛� + */ + List<KnowledgeInfoVo> queryList(KnowledgeInfoBo bo); + + /** + * 鏂板鐭ヨ瘑搴� + */ + Boolean insertByBo(KnowledgeInfoBo bo); + + /** + * 淇敼鐭ヨ瘑搴� + */ + Boolean updateByBo(KnowledgeInfoBo bo); + + /** + * 鏍¢獙骞舵壒閲忓垹闄ょ煡璇嗗簱淇℃伅 + */ + Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/VectorStoreService.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/VectorStoreService.java new file mode 100644 index 0000000..d3294bb --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/VectorStoreService.java @@ -0,0 +1,23 @@ +package org.ruoyi.service; + +import java.util.List; + +/** + * 鍚戦噺瀛樺偍 + */ +public interface VectorStoreService { + + void storeEmbeddings(List<String> chunkList, List<List<Double>> vectorList, String kid, String docId, List<String> fidList); + + void removeByDocId(String kid, String docId); + + void removeByKid(String kid); + + List<String> nearest(List<Double> queryVector, String kid); + + List<String> nearest(String query, String kid); + + void newSchema(String kid); + + void removeByKidAndFid(String kid, String fid); +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/VectorizationService.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/VectorizationService.java new file mode 100644 index 0000000..8188881 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/VectorizationService.java @@ -0,0 +1,13 @@ +package org.ruoyi.service; + +import java.util.List; + +/** + * 鏂囨湰鍚戦噺鍖� + */ +public interface VectorizationService { + + List<List<Double>> batchVectorization(List<String> chunkList, String kid); + + List<Double> singleVectorization(String chunk, String kid); +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/EmbeddingServiceImpl.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/EmbeddingServiceImpl.java new file mode 100644 index 0000000..0065739 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/EmbeddingServiceImpl.java @@ -0,0 +1,64 @@ +package org.ruoyi.service.impl; + +import lombok.AllArgsConstructor; +import org.ruoyi.service.EmbeddingService; +import org.ruoyi.service.VectorStoreService; +import org.ruoyi.service.VectorizationService; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +@AllArgsConstructor +public class EmbeddingServiceImpl implements EmbeddingService { + + private final VectorStoreService vectorStore; + private final VectorizationService vectorization; + + /** + * 淇濆瓨鍚戦噺鏁版嵁搴� + * @param chunkList 鏂囨。鎸夎鍒囧垎鐨勭墖娈� + * @param kid 鐭ヨ瘑搴揑D + * @param docId 鏂囨。ID + */ + @Override + public void storeEmbeddings(List<String> chunkList, String kid, String docId,List<String> fidList) { + List<List<Double>> vectorList = vectorization.batchVectorization(chunkList, kid); + vectorStore.storeEmbeddings(chunkList,vectorList,kid,docId,fidList); + } + + @Override + public void removeByDocId(String kid,String docId) { + vectorStore.removeByDocId(kid,docId); + } + + @Override + public void removeByKid(String kid) { + vectorStore.removeByKid(kid); + } + + @Override + public List<Double> getQueryVector(String query, String kid) { + return vectorization.singleVectorization(query,kid); + } + + @Override + public void createSchema(String kid) { + vectorStore.newSchema(kid); + } + + @Override + public void removeByKidAndFid(String kid, String fid) { + vectorStore.removeByKidAndFid(kid,fid); + } + + @Override + public void saveFragment(String kid, String docId, String fid, String content) { + List<String> chunkList = new ArrayList<>(); + List<String> fidList = new ArrayList<>(); + chunkList.add(content); + fidList.add(fid); + storeEmbeddings(chunkList,kid,docId,fidList); + } +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/KnowledgeAttachServiceImpl.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/KnowledgeAttachServiceImpl.java new file mode 100644 index 0000000..6a0a571 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/KnowledgeAttachServiceImpl.java @@ -0,0 +1,114 @@ +package org.ruoyi.service.impl; + +import org.ruoyi.common.core.utils.MapstructUtils; +import org.ruoyi.common.core.utils.StringUtils; +import org.ruoyi.common.mybatis.core.page.TableDataInfo; +import org.ruoyi.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.ruoyi.domain.vo.KnowledgeAttachVo; +import org.springframework.stereotype.Service; +import org.ruoyi.domain.bo.KnowledgeAttachBo; + +import org.ruoyi.domain.KnowledgeAttach; +import org.ruoyi.mapper.KnowledgeAttachMapper; +import org.ruoyi.service.IKnowledgeAttachService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 鐭ヨ瘑搴撻檮浠禨ervice涓氬姟灞傚鐞� + * + * @author ageerle + * @date 2025-04-08 + */ +@RequiredArgsConstructor +@Service +public class KnowledgeAttachServiceImpl implements IKnowledgeAttachService { + + private final KnowledgeAttachMapper baseMapper; + + /** + * 鏌ヨ鐭ヨ瘑搴撻檮浠� + */ + @Override + public KnowledgeAttachVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 鏌ヨ鐭ヨ瘑搴撻檮浠跺垪琛� + */ + @Override + public TableDataInfo<KnowledgeAttachVo> queryPageList(KnowledgeAttachBo bo, PageQuery pageQuery) { + LambdaQueryWrapper<KnowledgeAttach> lqw = buildQueryWrapper(bo); + Page<KnowledgeAttachVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 鏌ヨ鐭ヨ瘑搴撻檮浠跺垪琛� + */ + @Override + public List<KnowledgeAttachVo> queryList(KnowledgeAttachBo bo) { + LambdaQueryWrapper<KnowledgeAttach> lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper<KnowledgeAttach> buildQueryWrapper(KnowledgeAttachBo bo) { + Map<String, Object> params = bo.getParams(); + LambdaQueryWrapper<KnowledgeAttach> lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getKid()), KnowledgeAttach::getKid, bo.getKid()); + lqw.eq(StringUtils.isNotBlank(bo.getDocId()), KnowledgeAttach::getDocId, bo.getDocId()); + lqw.like(StringUtils.isNotBlank(bo.getDocName()), KnowledgeAttach::getDocName, bo.getDocName()); + lqw.eq(StringUtils.isNotBlank(bo.getDocType()), KnowledgeAttach::getDocType, bo.getDocType()); + lqw.eq(StringUtils.isNotBlank(bo.getContent()), KnowledgeAttach::getContent, bo.getContent()); + return lqw; + } + + /** + * 鏂板鐭ヨ瘑搴撻檮浠� + */ + @Override + public Boolean insertByBo(KnowledgeAttachBo bo) { + KnowledgeAttach add = MapstructUtils.convert(bo, KnowledgeAttach.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 淇敼鐭ヨ瘑搴撻檮浠� + */ + @Override + public Boolean updateByBo(KnowledgeAttachBo bo) { + KnowledgeAttach update = MapstructUtils.convert(bo, KnowledgeAttach.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙 + */ + private void validEntityBeforeSave(KnowledgeAttach entity){ + //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫 + } + + /** + * 鎵归噺鍒犻櫎鐭ヨ瘑搴撻檮浠� + */ + @Override + public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { + if(isValid){ + //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/KnowledgeFragmentServiceImpl.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/KnowledgeFragmentServiceImpl.java new file mode 100644 index 0000000..2502836 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/KnowledgeFragmentServiceImpl.java @@ -0,0 +1,113 @@ +package org.ruoyi.service.impl; + +import org.ruoyi.common.core.utils.MapstructUtils; +import org.ruoyi.common.core.utils.StringUtils; +import org.ruoyi.common.mybatis.core.page.TableDataInfo; +import org.ruoyi.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.ruoyi.domain.vo.KnowledgeFragmentVo; +import org.springframework.stereotype.Service; +import org.ruoyi.domain.bo.KnowledgeFragmentBo; +import org.ruoyi.domain.KnowledgeFragment; +import org.ruoyi.mapper.KnowledgeFragmentMapper; +import org.ruoyi.service.IKnowledgeFragmentService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 鐭ヨ瘑鐗囨Service涓氬姟灞傚鐞� + * + * @author ageerle + * @date 2025-04-08 + */ +@RequiredArgsConstructor +@Service +public class KnowledgeFragmentServiceImpl implements IKnowledgeFragmentService { + + private final KnowledgeFragmentMapper baseMapper; + + /** + * 鏌ヨ鐭ヨ瘑鐗囨 + */ + @Override + public KnowledgeFragmentVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 鏌ヨ鐭ヨ瘑鐗囨鍒楄〃 + */ + @Override + public TableDataInfo<KnowledgeFragmentVo> queryPageList(KnowledgeFragmentBo bo, PageQuery pageQuery) { + LambdaQueryWrapper<KnowledgeFragment> lqw = buildQueryWrapper(bo); + Page<KnowledgeFragmentVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 鏌ヨ鐭ヨ瘑鐗囨鍒楄〃 + */ + @Override + public List<KnowledgeFragmentVo> queryList(KnowledgeFragmentBo bo) { + LambdaQueryWrapper<KnowledgeFragment> lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper<KnowledgeFragment> buildQueryWrapper(KnowledgeFragmentBo bo) { + Map<String, Object> params = bo.getParams(); + LambdaQueryWrapper<KnowledgeFragment> lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getKid()), KnowledgeFragment::getKid, bo.getKid()); + lqw.eq(StringUtils.isNotBlank(bo.getDocId()), KnowledgeFragment::getDocId, bo.getDocId()); + lqw.eq(StringUtils.isNotBlank(bo.getFid()), KnowledgeFragment::getFid, bo.getFid()); + lqw.eq(bo.getIdx() != null, KnowledgeFragment::getIdx, bo.getIdx()); + lqw.eq(StringUtils.isNotBlank(bo.getContent()), KnowledgeFragment::getContent, bo.getContent()); + return lqw; + } + + /** + * 鏂板鐭ヨ瘑鐗囨 + */ + @Override + public Boolean insertByBo(KnowledgeFragmentBo bo) { + KnowledgeFragment add = MapstructUtils.convert(bo, KnowledgeFragment.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 淇敼鐭ヨ瘑鐗囨 + */ + @Override + public Boolean updateByBo(KnowledgeFragmentBo bo) { + KnowledgeFragment update = MapstructUtils.convert(bo, KnowledgeFragment.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙 + */ + private void validEntityBeforeSave(KnowledgeFragment entity){ + //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫 + } + + /** + * 鎵归噺鍒犻櫎鐭ヨ瘑鐗囨 + */ + @Override + public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { + if(isValid){ + //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/KnowledgeInfoServiceImpl.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/KnowledgeInfoServiceImpl.java new file mode 100644 index 0000000..7acaa09 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/KnowledgeInfoServiceImpl.java @@ -0,0 +1,120 @@ +package org.ruoyi.service.impl; + +import org.ruoyi.common.core.utils.MapstructUtils; +import org.ruoyi.common.core.utils.StringUtils; +import org.ruoyi.common.mybatis.core.page.TableDataInfo; +import org.ruoyi.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.ruoyi.domain.vo.KnowledgeInfoVo; +import org.springframework.stereotype.Service; +import org.ruoyi.domain.bo.KnowledgeInfoBo; +import org.ruoyi.domain.KnowledgeInfo; +import org.ruoyi.mapper.KnowledgeInfoMapper; +import org.ruoyi.service.IKnowledgeInfoService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 鐭ヨ瘑搴揝ervice涓氬姟灞傚鐞� + * + * @author ageerle + * @date 2025-04-08 + */ +@RequiredArgsConstructor +@Service +public class KnowledgeInfoServiceImpl implements IKnowledgeInfoService { + + private final KnowledgeInfoMapper baseMapper; + + /** + * 鏌ヨ鐭ヨ瘑搴� + */ + @Override + public KnowledgeInfoVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 鏌ヨ鐭ヨ瘑搴撳垪琛� + */ + @Override + public TableDataInfo<KnowledgeInfoVo> queryPageList(KnowledgeInfoBo bo, PageQuery pageQuery) { + LambdaQueryWrapper<KnowledgeInfo> lqw = buildQueryWrapper(bo); + Page<KnowledgeInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 鏌ヨ鐭ヨ瘑搴撳垪琛� + */ + @Override + public List<KnowledgeInfoVo> queryList(KnowledgeInfoBo bo) { + LambdaQueryWrapper<KnowledgeInfo> lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper<KnowledgeInfo> buildQueryWrapper(KnowledgeInfoBo bo) { + Map<String, Object> params = bo.getParams(); + LambdaQueryWrapper<KnowledgeInfo> lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getKid()), KnowledgeInfo::getKid, bo.getKid()); + lqw.eq(bo.getUid() != null, KnowledgeInfo::getUid, bo.getUid()); + lqw.like(StringUtils.isNotBlank(bo.getKname()), KnowledgeInfo::getKname, bo.getKname()); + lqw.eq(bo.getShare() != null, KnowledgeInfo::getShare, bo.getShare()); + lqw.eq(StringUtils.isNotBlank(bo.getDescription()), KnowledgeInfo::getDescription, bo.getDescription()); + lqw.eq(StringUtils.isNotBlank(bo.getKnowledgeSeparator()), KnowledgeInfo::getKnowledgeSeparator, bo.getKnowledgeSeparator()); + lqw.eq(StringUtils.isNotBlank(bo.getQuestionSeparator()), KnowledgeInfo::getQuestionSeparator, bo.getQuestionSeparator()); + lqw.eq(bo.getOverlapChar() != null, KnowledgeInfo::getOverlapChar, bo.getOverlapChar()); + lqw.eq(bo.getRetrieveLimit() != null, KnowledgeInfo::getRetrieveLimit, bo.getRetrieveLimit()); + lqw.eq(bo.getTextBlockSize() != null, KnowledgeInfo::getTextBlockSize, bo.getTextBlockSize()); + lqw.eq(StringUtils.isNotBlank(bo.getVector()), KnowledgeInfo::getVector, bo.getVector()); + lqw.eq(StringUtils.isNotBlank(bo.getVectorModel()), KnowledgeInfo::getVectorModel, bo.getVectorModel()); + return lqw; + } + + /** + * 鏂板鐭ヨ瘑搴� + */ + @Override + public Boolean insertByBo(KnowledgeInfoBo bo) { + KnowledgeInfo add = MapstructUtils.convert(bo, KnowledgeInfo.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 淇敼鐭ヨ瘑搴� + */ + @Override + public Boolean updateByBo(KnowledgeInfoBo bo) { + KnowledgeInfo update = MapstructUtils.convert(bo, KnowledgeInfo.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙 + */ + private void validEntityBeforeSave(KnowledgeInfo entity){ + //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫 + } + + /** + * 鎵归噺鍒犻櫎鐭ヨ瘑搴� + */ + @Override + public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { + if(isValid){ + //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysCache.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysCache.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysCache.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysCache.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysConfig.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysConfig.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysConfig.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysConfig.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysDept.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysDept.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysDept.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysDept.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysDictData.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysDictData.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysDictData.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysDictData.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysDictType.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysDictType.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysDictType.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysDictType.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysLogininfor.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysLogininfor.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysLogininfor.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysLogininfor.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysMenu.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysMenu.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysMenu.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysMenu.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysNotice.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysNotice.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysNotice.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysNotice.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysNoticeState.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysNoticeState.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysNoticeState.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysNoticeState.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysOperLog.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysOperLog.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysOperLog.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysOperLog.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysOss.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysOss.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysOss.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysOss.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysOssConfig.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysOssConfig.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysOssConfig.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysOssConfig.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysPost.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysPost.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysPost.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysPost.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysRole.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysRole.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysRole.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysRole.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysRoleDept.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysRoleDept.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysRoleDept.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysRoleDept.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysRoleMenu.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysRoleMenu.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysRoleMenu.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysRoleMenu.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysTenant.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysTenant.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysTenant.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysTenant.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysTenantPackage.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysTenantPackage.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysTenantPackage.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysTenantPackage.java diff --git a/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysUser.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysUser.java new file mode 100644 index 0000000..f451e98 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysUser.java @@ -0,0 +1,133 @@ +package org.ruoyi.system.domain; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.ruoyi.common.core.constant.UserConstants; +import org.ruoyi.common.tenant.core.TenantEntity; + +import java.util.Date; + +/** + * 鐢ㄦ埛瀵硅薄 sys_user + * + * @author Lion Li + */ + +@Data +@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) +@TableName("sys_user") +public class SysUser extends TenantEntity { + + /** + * 鐢ㄦ埛ID + */ + @TableId(value = "user_id") + private Long userId; + + /** + * 閮ㄩ棬ID + */ + private Long deptId; + + /** + * 鐢ㄦ埛璐﹀彿 + */ + private String userName; + + /** + * 鐢ㄦ埛濂楅 + */ + private String userPlan; + + /** + * 鐢ㄦ埛鏄电О + */ + private String nickName; + + /** + * 鐢ㄦ埛绫诲瀷锛坰ys_user绯荤粺鐢ㄦ埛锛� + */ + private String userType; + + /** + * 鐢ㄦ埛閭 + */ + private String email; + + /** + * 鎵嬫満鍙风爜 + */ + private String phonenumber; + + /** + * 鐢ㄦ埛鎬у埆 + */ + private String sex; + + /** + * 鐢ㄦ埛澶村儚 + */ + private String avatar; + + /** + * 瀵嗙爜 + */ + @TableField( + insertStrategy = FieldStrategy.NOT_EMPTY, + updateStrategy = FieldStrategy.NOT_EMPTY, + whereStrategy = FieldStrategy.NOT_EMPTY + ) + private String password; + + /** + * 甯愬彿鐘舵�侊紙0姝e父 1鍋滅敤锛� + */ + private String status; + + /** + * 鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛� + */ + @TableLogic + private String delFlag; + + /** + * 鏈�鍚庣櫥褰旾P + */ + private String loginIp; + + /** + * 娉ㄥ唽鍩熷悕 + */ + private String domainName; + + /** + * 鏈�鍚庣櫥褰曟椂闂� + */ + private Date loginDate; + + /** + * 澶囨敞 + */ + private String remark; + + /** 鏅�氱敤鎴风殑鏍囪瘑,瀵瑰綋鍓嶅紑鍙戣�呭笎鍙峰敮涓�銆備竴涓猳penid瀵瑰簲涓�涓叕浼楀彿鎴栧皬绋嬪簭 */ + private String openId; + + /** 鐢ㄦ埛浣欓 */ + private Double userBalance; + + /** 鐢ㄦ埛绛夌骇 */ + private String userGrade; + + public SysUser(Long userId) { + this.userId = userId; + } + + public boolean isSuperAdmin() { + return UserConstants.SUPER_ADMIN_ID.equals(this.userId); + } + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysUserOnline.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysUserOnline.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysUserOnline.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysUserOnline.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysUserPost.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysUserPost.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysUserPost.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysUserPost.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysUserRole.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysUserRole.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysUserRole.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/SysUserRole.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysConfigBo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysConfigBo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysConfigBo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysConfigBo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysDeptBo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysDeptBo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysDeptBo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysDeptBo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysDictDataBo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysDictDataBo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysDictDataBo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysDictDataBo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysDictTypeBo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysDictTypeBo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysDictTypeBo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysDictTypeBo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysLogininforBo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysLogininforBo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysLogininforBo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysLogininforBo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysMenuBo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysMenuBo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysMenuBo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysMenuBo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysNoticeBo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysNoticeBo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysNoticeBo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysNoticeBo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysNoticeStateBo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysNoticeStateBo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysNoticeStateBo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysNoticeStateBo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysOperLogBo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysOperLogBo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysOperLogBo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysOperLogBo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysOssBo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysOssBo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysOssBo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysOssBo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysOssConfigBo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysOssConfigBo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysOssConfigBo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysOssConfigBo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysPostBo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysPostBo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysPostBo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysPostBo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysRoleBo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysRoleBo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysRoleBo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysRoleBo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysTenantBo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysTenantBo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysTenantBo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysTenantBo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysTenantPackageBo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysTenantPackageBo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysTenantPackageBo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysTenantPackageBo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysUserBo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysUserBo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysUserBo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysUserBo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysUserPasswordBo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysUserPasswordBo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysUserPasswordBo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysUserPasswordBo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysUserProfileBo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysUserProfileBo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysUserProfileBo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/bo/SysUserProfileBo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/request/EmailRequest.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/request/EmailRequest.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/request/EmailRequest.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/request/EmailRequest.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/request/OrderRequest.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/request/OrderRequest.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/request/OrderRequest.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/request/OrderRequest.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/request/UserRequest.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/request/UserRequest.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/request/UserRequest.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/request/UserRequest.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/AvatarVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/AvatarVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/AvatarVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/AvatarVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/CacheListInfoVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/CacheListInfoVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/CacheListInfoVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/CacheListInfoVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/CaptchaVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/CaptchaVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/CaptchaVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/CaptchaVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/DeptTreeSelectVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/DeptTreeSelectVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/DeptTreeSelectVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/DeptTreeSelectVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/LoginTenantVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/LoginTenantVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/LoginTenantVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/LoginTenantVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/LoginVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/LoginVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/LoginVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/LoginVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/MenuTreeSelectVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/MenuTreeSelectVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/MenuTreeSelectVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/MenuTreeSelectVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/MetaVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/MetaVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/MetaVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/MetaVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ProfileVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/ProfileVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ProfileVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/ProfileVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/RouterVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/RouterVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/RouterVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/RouterVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysConfigVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysConfigVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysConfigVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysConfigVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysDeptVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysDeptVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysDeptVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysDeptVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysDictDataVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysDictDataVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysDictDataVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysDictDataVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysDictTypeVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysDictTypeVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysDictTypeVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysDictTypeVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysLogininforVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysLogininforVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysLogininforVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysLogininforVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysMenuVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysMenuVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysMenuVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysMenuVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysNoticeStateVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysNoticeStateVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysNoticeStateVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysNoticeStateVo.java diff --git a/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysNoticeVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysNoticeVo.java new file mode 100644 index 0000000..fa279d9 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysNoticeVo.java @@ -0,0 +1,55 @@ +package org.ruoyi.system.domain.vo; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.ruoyi.system.domain.SysNotice; + +import java.io.Serial; +import java.io.Serializable; + + + + +/** + * 閫氱煡鍏憡瑙嗗浘瀵硅薄 sys_notice + * + * @author Michelle.Chung + */ +@Data +@AutoMapper(target = SysNotice.class) +public class SysNoticeVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 鍏憡ID + */ + private Long noticeId; + + /** + * 鍏憡鏍囬 + */ + private String noticeTitle; + + /** + * 鍏憡绫诲瀷锛�1閫氱煡 2鍏憡锛� + */ + private String noticeType; + + /** + * 鍏憡鍐呭 + */ + private String noticeContent; + + /** + * 鍏憡鐘舵�侊紙0姝e父 1鍏抽棴锛� + */ + private String status; + + /** + * 澶囨敞 + */ + private String remark; + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysOperLogVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysOperLogVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysOperLogVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysOperLogVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysOssConfigVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysOssConfigVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysOssConfigVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysOssConfigVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysOssUploadVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysOssUploadVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysOssUploadVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysOssUploadVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysOssVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysOssVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysOssVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysOssVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysPostVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysPostVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysPostVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysPostVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysRoleVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysRoleVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysRoleVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysRoleVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysTenantPackageVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysTenantPackageVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysTenantPackageVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysTenantPackageVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysTenantVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysTenantVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysTenantVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysTenantVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysUserExportVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysUserExportVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysUserExportVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysUserExportVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysUserImportVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysUserImportVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysUserImportVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysUserImportVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysUserInfoVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysUserInfoVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysUserInfoVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysUserInfoVo.java diff --git a/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysUserModelVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysUserModelVo.java new file mode 100644 index 0000000..8b134b6 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysUserModelVo.java @@ -0,0 +1,45 @@ +package org.ruoyi.system.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + + +/** + * 銆愯濉啓鍔熻兘鍚嶇О銆戣鍥惧璞� sys_user_model + * + * @author Lion Li + * @date 2024-08-03 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = SysUserModel.class) +public class SysUserModelVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 妯″瀷id + */ + @ExcelProperty(value = "妯″瀷id") + private Long mid; + + /** + * 鐢ㄦ埛缁刬d + */ + @ExcelProperty(value = "鐢ㄦ埛缁刬d") + private Long gid; + + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysUserOptionVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysUserOptionVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysUserOptionVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysUserOptionVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysUserVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysUserVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysUserVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/SysUserVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/TenantListVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/TenantListVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/TenantListVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/TenantListVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/UserInfoVo.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/UserInfoVo.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/UserInfoVo.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/domain/vo/UserInfoVo.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatAppStoreMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatAppStoreMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatAppStoreMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatAppStoreMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatConfigMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatConfigMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatConfigMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatConfigMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatGptsMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatGptsMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatGptsMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatGptsMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatMessageMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatMessageMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatMessageMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatMessageMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatPluginMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatPluginMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatPluginMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatPluginMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatTokenMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatTokenMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatTokenMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatTokenMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatVisitorUsageMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatVisitorUsageMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatVisitorUsageMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatVisitorUsageMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatVoucherMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatVoucherMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/ChatVoucherMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/ChatVoucherMapper.java diff --git a/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/CoverMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/CoverMapper.java new file mode 100644 index 0000000..08cb737 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/CoverMapper.java @@ -0,0 +1,14 @@ +package org.ruoyi.system.mapper; + +import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; +import org.ruoyi.system.domain.vo.cover.CoverVo; + +/** + * 缈诲敱Mapper鎺ュ彛 + * + * @author NSL + * @since 2024-12-25 + */ +public interface CoverMapper extends BaseMapperPlus<Cover, CoverVo> { + +} diff --git a/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/CoverPromptAudioMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/CoverPromptAudioMapper.java new file mode 100644 index 0000000..6abffd9 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/CoverPromptAudioMapper.java @@ -0,0 +1,22 @@ +package org.ruoyi.system.mapper; + +import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; +import org.ruoyi.system.domain.vo.cover.CoverPromptAudioVo; + +import java.util.List; + +/** + * 缈诲敱鐢ㄦ埛鍙傝�冮煶棰慚apper鎺ュ彛 + * + * @author NSL + * @since 2024-12-25 + */ +public interface CoverPromptAudioMapper extends BaseMapperPlus<CoverPromptAudio, CoverPromptAudioVo> { + + /** + * 鑾峰彇鏈�杩戜竴娆$炕鍞辫褰� + * @param userId 鐢ㄦ埛id + * @return 缈诲敱璁板綍 + */ + List<CoverPromptAudioVo> selectLatestVoByUserId(Long userId); +} diff --git a/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/PaymentOrdersMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/PaymentOrdersMapper.java new file mode 100644 index 0000000..e854cfc --- /dev/null +++ b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/PaymentOrdersMapper.java @@ -0,0 +1,13 @@ +package org.ruoyi.system.mapper; + +import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 鏀粯璁㈠崟Mapper鎺ュ彛 + * + * @author Lion Li + * @date 2024-04-16 + */ +public interface PaymentOrdersMapper extends BaseMapperPlus<PaymentOrder, PaymentOrdersVo> { + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysConfigMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysConfigMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysConfigMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysConfigMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysDeptMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysDeptMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysDeptMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysDeptMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysDictDataMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysDictDataMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysDictDataMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysDictDataMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysDictTypeMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysDictTypeMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysDictTypeMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysDictTypeMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysLogininforMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysLogininforMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysLogininforMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysLogininforMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysMenuMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysMenuMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysMenuMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysMenuMapper.java diff --git a/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysModelMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysModelMapper.java new file mode 100644 index 0000000..1b436f8 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysModelMapper.java @@ -0,0 +1,13 @@ +package org.ruoyi.system.mapper; + +import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 绯荤粺妯″瀷Mapper鎺ュ彛 + * + * @author Lion Li + * @date 2024-04-04 + */ +public interface SysModelMapper extends BaseMapperPlus<SysModel, SysModelVo> { + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysNoticeMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysNoticeMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysNoticeMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysNoticeMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysNoticeStateMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysNoticeStateMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysNoticeStateMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysNoticeStateMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysOperLogMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysOperLogMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysOperLogMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysOperLogMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysOssConfigMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysOssConfigMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysOssConfigMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysOssConfigMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysOssMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysOssMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysOssMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysOssMapper.java diff --git a/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysPackagePlanMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysPackagePlanMapper.java new file mode 100644 index 0000000..3a6718a --- /dev/null +++ b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysPackagePlanMapper.java @@ -0,0 +1,13 @@ +package org.ruoyi.system.mapper; + +import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 濂楅绠$悊Mapper鎺ュ彛 + * + * @author Lion Li + * @date 2024-05-05 + */ +public interface SysPackagePlanMapper extends BaseMapperPlus<SysPackagePlan, SysPackagePlanVo> { + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysPostMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysPostMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysPostMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysPostMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysRoleDeptMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysRoleDeptMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysRoleDeptMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysRoleDeptMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysRoleMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysRoleMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysRoleMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysRoleMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysRoleMenuMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysRoleMenuMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysRoleMenuMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysRoleMenuMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysTenantMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysTenantMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysTenantMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysTenantMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysTenantPackageMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysTenantPackageMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysTenantPackageMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysTenantPackageMapper.java diff --git a/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysUserGroupMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysUserGroupMapper.java new file mode 100644 index 0000000..8cf0713 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysUserGroupMapper.java @@ -0,0 +1,13 @@ +package org.ruoyi.system.mapper; + +import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 銆愯濉啓鍔熻兘鍚嶇О銆慚apper鎺ュ彛 + * + * @author Lion Li + * @date 2024-08-03 + */ +public interface SysUserGroupMapper extends BaseMapperPlus<SysUserGroup, SysUserGroupVo> { + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysUserMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysUserMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysUserMapper.java diff --git a/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysUserModelMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysUserModelMapper.java new file mode 100644 index 0000000..e62693e --- /dev/null +++ b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysUserModelMapper.java @@ -0,0 +1,14 @@ +package org.ruoyi.system.mapper; + +import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; +import org.ruoyi.system.domain.vo.SysUserModelVo; + +/** + * 銆愯濉啓鍔熻兘鍚嶇О銆慚apper鎺ュ彛 + * + * @author Lion Li + * @date 2024-08-03 + */ +public interface SysUserModelMapper extends BaseMapperPlus<SysUserModel, SysUserModelVo> { + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysUserPostMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysUserPostMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysUserPostMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysUserPostMapper.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysUserRoleMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysUserRoleMapper.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysUserRoleMapper.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/SysUserRoleMapper.java diff --git a/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/WxRobConfigMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/WxRobConfigMapper.java new file mode 100644 index 0000000..36ad76e --- /dev/null +++ b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/WxRobConfigMapper.java @@ -0,0 +1,13 @@ +package org.ruoyi.system.mapper; + +import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 銆愯濉啓鍔熻兘鍚嶇О銆慚apper鎺ュ彛 + * + * @author Lion Li + * @date 2024-05-01 + */ +public interface WxRobConfigMapper extends BaseMapperPlus<WxRobConfig, WxRobConfigVo> { + +} diff --git a/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/WxRobKeywordMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/WxRobKeywordMapper.java new file mode 100644 index 0000000..a062dc2 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/WxRobKeywordMapper.java @@ -0,0 +1,13 @@ +package org.ruoyi.system.mapper; + +import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 銆愯濉啓鍔熻兘鍚嶇О銆慚apper鎺ュ彛 + * + * @author Lion Li + * @date 2024-05-01 + */ +public interface WxRobKeywordMapper extends BaseMapperPlus<WxRobKeyword, WxRobKeywordVo> { + +} diff --git a/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/WxRobRelationMapper.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/WxRobRelationMapper.java new file mode 100644 index 0000000..df7d19f --- /dev/null +++ b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/mapper/WxRobRelationMapper.java @@ -0,0 +1,13 @@ +package org.ruoyi.system.mapper; + +import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 銆愯濉啓鍔熻兘鍚嶇О銆慚apper鎺ュ彛 + * + * @author Lion Li + * @date 2024-05-01 + */ +public interface WxRobRelationMapper extends BaseMapperPlus<WxRobRelation, WxRobRelationVo> { + +} diff --git a/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/runner/SystemApplicationRunner.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/runner/SystemApplicationRunner.java new file mode 100644 index 0000000..2b531ad --- /dev/null +++ b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/runner/SystemApplicationRunner.java @@ -0,0 +1,28 @@ +package org.ruoyi.system.runner; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.ruoyi.system.service.ISysOssConfigService; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +/** + * 鍒濆鍖� system 妯″潡瀵瑰簲涓氬姟鏁版嵁 + * + * @author Lion Li + */ +@Slf4j +@RequiredArgsConstructor +@Component +public class SystemApplicationRunner implements ApplicationRunner { + + private final ISysOssConfigService ossConfigService; + + @Override + public void run(ApplicationArguments args) { + ossConfigService.init(); + log.info("鍒濆鍖朞SS閰嶇疆鎴愬姛"); + } + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysConfigService.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysConfigService.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysConfigService.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysConfigService.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysDataScopeService.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysDataScopeService.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysDataScopeService.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysDataScopeService.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysDeptService.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysDeptService.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysDeptService.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysDeptService.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysDictDataService.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysDictDataService.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysDictDataService.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysDictDataService.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysDictTypeService.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysDictTypeService.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysDictTypeService.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysDictTypeService.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysLogininforService.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysLogininforService.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysLogininforService.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysLogininforService.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysMenuService.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysMenuService.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysMenuService.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysMenuService.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysNoticeService.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysNoticeService.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysNoticeService.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysNoticeService.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysNoticeStateService.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysNoticeStateService.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysNoticeStateService.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysNoticeStateService.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysOperLogService.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysOperLogService.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysOperLogService.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysOperLogService.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysOssConfigService.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysOssConfigService.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysOssConfigService.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysOssConfigService.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysOssService.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysOssService.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysOssService.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysOssService.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysPermissionService.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysPermissionService.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysPermissionService.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysPermissionService.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysPostService.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysPostService.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysPostService.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysPostService.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysRoleService.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysRoleService.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysRoleService.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysRoleService.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysTenantPackageService.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysTenantPackageService.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysTenantPackageService.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysTenantPackageService.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysTenantService.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysTenantService.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysTenantService.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysTenantService.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysUserService.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysUserService.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysUserService.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/ISysUserService.java diff --git a/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/SysLoginService.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/SysLoginService.java new file mode 100644 index 0000000..5ab1195 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/SysLoginService.java @@ -0,0 +1,433 @@ +package org.ruoyi.system.service; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; +import cn.binarywang.wx.miniapp.util.WxMaConfigHolder; +import cn.dev33.satoken.exception.NotLoginException; +import cn.dev33.satoken.secure.BCrypt; +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.error.WxErrorException; +import org.apache.commons.lang3.math.NumberUtils; +import org.ruoyi.common.core.constant.Constants; +import org.ruoyi.common.core.constant.GlobalConstants; +import org.ruoyi.common.core.constant.TenantConstants; +import org.ruoyi.common.core.domain.dto.RoleDTO; +import org.ruoyi.common.core.domain.model.LoginUser; +import org.ruoyi.common.core.domain.model.VisitorLoginBody; +import org.ruoyi.common.core.domain.model.VisitorLoginUser; +import org.ruoyi.common.core.enums.*; +import org.ruoyi.common.core.exception.user.CaptchaException; +import org.ruoyi.common.core.exception.user.CaptchaExpireException; +import org.ruoyi.common.core.exception.user.UserException; +import org.ruoyi.common.core.service.ConfigService; +import org.ruoyi.common.core.utils.*; +import org.ruoyi.common.log.event.LogininforEvent; +import org.ruoyi.common.redis.utils.RedisUtils; +import org.ruoyi.common.satoken.utils.LoginHelper; +import org.ruoyi.common.tenant.exception.TenantException; +import org.ruoyi.common.tenant.helper.TenantHelper; +import org.ruoyi.system.domain.SysUser; +import org.ruoyi.system.domain.bo.SysUserBo; +import org.ruoyi.system.domain.vo.LoginVo; +import org.ruoyi.system.domain.vo.SysTenantVo; +import org.ruoyi.system.domain.vo.SysUserVo; +import org.ruoyi.system.mapper.SysUserMapper; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.time.Duration; +import java.util.Date; +import java.util.List; +import java.util.UUID; +import java.util.function.Supplier; + +/** + * 鐧诲綍鏍¢獙鏂规硶 + * + * @author Lion Li + */ +@RequiredArgsConstructor +@Slf4j +@Service +public class SysLoginService { + + private final SysUserMapper userMapper; + private final ISysPermissionService permissionService; + private final ISysTenantService tenantService; + private final WxMaService wxMaService; + private final ISysUserService userService; + private final ConfigService configService; + @Value("${user.password.maxRetryCount}") + private Integer maxRetryCount; + + @Value("${user.password.lockTime}") + private Integer lockTime; + + /** + * 鑾峰彇寰俊 + * @param xcxCode 鑾峰彇xcxCode + */ + public String getOpenidFromCode(String xcxCode) { + try { + WxMaJscode2SessionResult sessionInfo = wxMaService.getUserService().getSessionInfo(xcxCode); + return sessionInfo.getOpenid(); + } catch (WxErrorException e) { + e.printStackTrace(); + return null; + } + } + /** + * 鐧诲綍楠岃瘉 + * + * @param username 鐢ㄦ埛鍚� + * @param password 瀵嗙爜 + * @param code 楠岃瘉鐮� + * @param uuid 鍞竴鏍囪瘑 + * @return 缁撴灉 + */ + public String login(String tenantId, String username, String password, String code, String uuid) { + SysUserVo user = loadUserByUsername(tenantId, username); + checkLogin(LoginType.PASSWORD, tenantId, username, () -> !BCrypt.checkpw(password, user.getPassword())); + // 姝ゅ鍙牴鎹櫥褰曠敤鎴风殑鏁版嵁涓嶅悓 鑷鍒涘缓 loginUser + LoginUser loginUser = buildLoginUser(user); + // 鐢熸垚token + LoginHelper.loginByDevice(loginUser, DeviceType.PC); + + recordLogininfor(loginUser.getTenantId(), username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); + recordLoginInfo(user.getUserId()); + return StpUtil.getTokenValue(); + } + + public String smsLogin(String tenantId, String phonenumber, String smsCode) { + // 鏍¢獙绉熸埛 + checkTenant(tenantId); + // 閫氳繃鎵嬫満鍙锋煡鎵剧敤鎴� + SysUserVo user = loadUserByPhonenumber(tenantId, phonenumber); + + checkLogin(LoginType.SMS, tenantId, user.getUserName(), () -> !validateSmsCode(tenantId, phonenumber, smsCode)); + // 姝ゅ鍙牴鎹櫥褰曠敤鎴风殑鏁版嵁涓嶅悓 鑷鍒涘缓 loginUser + LoginUser loginUser = buildLoginUser(user); + // 鐢熸垚token + LoginHelper.loginByDevice(loginUser, DeviceType.APP); + + recordLogininfor(loginUser.getTenantId(), user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); + recordLoginInfo(user.getUserId()); + return StpUtil.getTokenValue(); + } + + public String emailLogin(String tenantId, String email, String emailCode) { + // 鏍¢獙绉熸埛 + checkTenant(tenantId); + // 閫氳繃鎵嬫満鍙锋煡鎵剧敤鎴� + SysUserVo user = loadUserByEmail(tenantId, email); + + checkLogin(LoginType.EMAIL, tenantId, user.getUserName(), () -> !validateEmailCode(tenantId, email, emailCode)); + // 姝ゅ鍙牴鎹櫥褰曠敤鎴风殑鏁版嵁涓嶅悓 鑷鍒涘缓 loginUser + LoginUser loginUser = buildLoginUser(user); + // 鐢熸垚token + LoginHelper.loginByDevice(loginUser, DeviceType.APP); + + recordLogininfor(loginUser.getTenantId(), user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); + recordLoginInfo(user.getUserId()); + return StpUtil.getTokenValue(); + } + + + /** + * 娓稿鐧诲綍 + * + * @param loginBody + * @return String + * @Date 2023/5/18 + **/ + public void visitorLogin(VisitorLoginBody loginBody) { + String openid = ""; + // PC绔父瀹㈢櫥褰� + if (LoginUserType.PC.getCode().equals(loginBody.getType())) { + openid = loginBody.getCode(); + } else { + // 灏忕▼搴忓尶鍚嶇櫥褰� + try { + WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(loginBody.getCode()); + openid = session.getOpenid(); + } catch (WxErrorException e) { + log.error(e.getMessage(), e); + } finally { + // 娓呯悊ThreadLocal + WxMaConfigHolder.remove(); + } + } + } + + public LoginVo mpLogin(String openid) { + // 浣跨敤 openid 鏌ヨ缁戝畾鐢ㄦ埛 濡傛湭缁戝畾鐢ㄦ埛 鍒欐牴鎹笟鍔¤嚜琛屽鐞� 渚嬪 鍒涘缓榛樿鐢ㄦ埛 + SysUserVo user = userService.selectUserByOpenId(openid); + VisitorLoginUser loginUser = new VisitorLoginUser(); + if (ObjectUtil.isNull(user)) { + SysUserBo sysUser = new SysUserBo(); + // 鏀逛负鑷 + String name = "鐢ㄦ埛" + UUID.randomUUID().toString().replace("-", ""); + // 璁剧疆榛樿鐢ㄦ埛鍚� + sysUser.setUserName(name); + // 璁剧疆榛樿鏄电О + sysUser.setNickName(name); + // 璁剧疆榛樿瀵嗙爜 + sysUser.setPassword(BCrypt.hashpw("123456")); + // 璁剧疆寰俊openId + sysUser.setOpenId(openid); + String configValue = configService.getConfigValue("mail", "amount"); + // 璁剧疆榛樿浣欓 + sysUser.setUserBalance(NumberUtils.toDouble(configValue, 1)); + // 娉ㄥ唽鐢ㄦ埛,璁剧疆榛樿绉熸埛涓�0 + SysUser registerUser = userService.registerUser(sysUser, "0"); + + // 鏋勫缓鐧诲綍鐢ㄦ埛淇℃伅 + loginUser.setTenantId("0"); + loginUser.setUserId(registerUser.getUserId()); + loginUser.setUsername(registerUser.getUserName()); + loginUser.setUserType(UserType.APP_USER.getUserType()); + loginUser.setOpenid(openid); + loginUser.setNickName(registerUser.getNickName()); + + } else { + // 姝ゅ鍙牴鎹櫥褰曠敤鎴风殑鏁版嵁涓嶅悓 鑷鍒涘缓 loginUser + loginUser.setTenantId(user.getTenantId()); + loginUser.setUserId(user.getUserId()); + loginUser.setUsername(user.getUserName()); + loginUser.setUserType(user.getUserType()); + loginUser.setNickName(user.getNickName()); + loginUser.setAvatar(user.getWxAvatar()); + loginUser.setOpenid(openid); + } + // 鐢熸垚token + LoginHelper.loginByDevice(loginUser, DeviceType.XCX); + recordLogininfor(loginUser.getTenantId(), loginUser.getUsername(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); + LoginVo loginVo = new LoginVo(); + // 鐢熸垚浠ょ墝 + loginVo.setToken(StpUtil.getTokenValue()); + loginVo.setUserInfo(loginUser); + return loginVo; + } + + + /** + * 閫�鍑虹櫥褰� + */ + public void logout() { + try { + LoginUser loginUser = LoginHelper.getLoginUser(); + if (TenantHelper.isEnable() && LoginHelper.isSuperAdmin()) { + // 瓒呯骇绠$悊鍛� 鐧诲嚭娓呴櫎鍔ㄦ�佺鎴� + TenantHelper.clearDynamic(); + } + StpUtil.logout(); + if (loginUser !=null) { + recordLogininfor(loginUser.getTenantId(), loginUser.getUsername(), Constants.LOGOUT, MessageUtils.message("user.logout.success")); + } + } catch (NotLoginException ignored) { + } + } + + /** + * 璁板綍鐧诲綍淇℃伅 + * + * @param tenantId 绉熸埛ID + * @param username 鐢ㄦ埛鍚� + * @param status 鐘舵�� + * @param message 娑堟伅鍐呭 + */ + private void recordLogininfor(String tenantId, String username, String status, String message) { + LogininforEvent logininforEvent = new LogininforEvent(); + logininforEvent.setTenantId(tenantId); + logininforEvent.setUsername(username); + logininforEvent.setStatus(status); + logininforEvent.setMessage(message); + logininforEvent.setRequest(ServletUtils.getRequest()); + SpringUtils.context().publishEvent(logininforEvent); + } + + /** + * 鏍¢獙鐭俊楠岃瘉鐮� + */ + private boolean validateSmsCode(String tenantId, String phonenumber, String smsCode) { + String code = RedisUtils.getCacheObject(GlobalConstants.CAPTCHA_CODE_KEY + phonenumber); + if (StringUtils.isBlank(code)) { + recordLogininfor(tenantId, phonenumber, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")); + throw new CaptchaExpireException(); + } + return code.equals(smsCode); + } + + /** + * 鏍¢獙閭楠岃瘉鐮� + */ + private boolean validateEmailCode(String tenantId, String email, String emailCode) { + String code = RedisUtils.getCacheObject(GlobalConstants.CAPTCHA_CODE_KEY + email); + if (StringUtils.isBlank(code)) { + recordLogininfor(tenantId, email, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")); + throw new CaptchaExpireException(); + } + return code.equals(emailCode); + } + + /** + * 鏍¢獙楠岃瘉鐮� + * + * @param username 鐢ㄦ埛鍚� + * @param code 楠岃瘉鐮� + * @param uuid 鍞竴鏍囪瘑 + */ + public void validateCaptcha(String tenantId, String username, String code, String uuid) { + String verifyKey = GlobalConstants.CAPTCHA_CODE_KEY + StringUtils.defaultString(uuid, ""); + String captcha = RedisUtils.getCacheObject(verifyKey); + RedisUtils.deleteObject(verifyKey); + if (captcha == null) { + recordLogininfor(tenantId, username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")); + throw new CaptchaExpireException(); + } + if (!code.equalsIgnoreCase(captcha)) { + recordLogininfor(tenantId, username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")); + throw new CaptchaException(); + } + } + + private SysUserVo loadUserByUsername(String tenantId, String username) { + + SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>().select(SysUser::getUserName, SysUser::getStatus).eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId).eq(SysUser::getUserName, username)); + if (ObjectUtil.isNull(user)) { + log.info("鐧诲綍鐢ㄦ埛锛歿} 涓嶅瓨鍦�.", username); + throw new UserException("user.not.exists", username); + } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { + log.info("鐧诲綍鐢ㄦ埛锛歿} 宸茶鍋滅敤.", username); + throw new UserException("user.blocked", username); + } + if (TenantHelper.isEnable()) { + return userMapper.selectTenantUserByUserName(username, tenantId); + } + return userMapper.selectUserByUserName(username); + } + + private SysUserVo loadUserByPhonenumber(String tenantId, String phonenumber) { + SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>().select(SysUser::getPhonenumber, SysUser::getStatus).eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId).eq(SysUser::getPhonenumber, phonenumber)); + if (ObjectUtil.isNull(user)) { + log.info("鐧诲綍鐢ㄦ埛锛歿} 涓嶅瓨鍦�.", phonenumber); + throw new UserException("user.not.exists", phonenumber); + } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { + log.info("鐧诲綍鐢ㄦ埛锛歿} 宸茶鍋滅敤.", phonenumber); + throw new UserException("user.blocked", phonenumber); + } + if (TenantHelper.isEnable()) { + return userMapper.selectTenantUserByPhonenumber(phonenumber, tenantId); + } + return userMapper.selectUserByPhonenumber(phonenumber); + } + + private SysUserVo loadUserByEmail(String tenantId, String email) { + SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>().select(SysUser::getPhonenumber, SysUser::getStatus).eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId).eq(SysUser::getEmail, email)); + if (ObjectUtil.isNull(user)) { + log.info("鐧诲綍鐢ㄦ埛锛歿} 涓嶅瓨鍦�.", email); + throw new UserException("user.not.exists", email); + } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { + log.info("鐧诲綍鐢ㄦ埛锛歿} 宸茶鍋滅敤.", email); + throw new UserException("user.blocked", email); + } + if (TenantHelper.isEnable()) { + return userMapper.selectTenantUserByEmail(email, tenantId); + } + return userMapper.selectUserByEmail(email); + } + + /** + * 鏋勫缓鐧诲綍鐢ㄦ埛 + */ + private LoginUser buildLoginUser(SysUserVo user) { + LoginUser loginUser = new LoginUser(); + loginUser.setTenantId(user.getTenantId()); + loginUser.setUserId(user.getUserId()); + loginUser.setDeptId(user.getDeptId()); + loginUser.setUsername(user.getUserName()); + loginUser.setAvatar(user.getAvatar()); + loginUser.setUserType(user.getUserType()); + loginUser.setMenuPermission(permissionService.getMenuPermission(user.getUserId())); + loginUser.setRolePermission(permissionService.getRolePermission(user.getUserId())); + loginUser.setDeptName(ObjectUtil.isNull(user.getDept()) ? "" : user.getDept().getDeptName()); + List<RoleDTO> roles = BeanUtil.copyToList(user.getRoles(), RoleDTO.class); + loginUser.setRoles(roles); + return loginUser; + } + + /** + * 璁板綍鐧诲綍淇℃伅 + * + * @param userId 鐢ㄦ埛ID + */ + public void recordLoginInfo(Long userId) { + SysUser sysUser = new SysUser(); + sysUser.setUserId(userId); + sysUser.setLoginIp(ServletUtils.getClientIP()); + sysUser.setLoginDate(DateUtils.getNowDate()); + sysUser.setUpdateBy(userId); + userMapper.updateById(sysUser); + } + + /** + * 鐧诲綍鏍¢獙 + */ + private void checkLogin(LoginType loginType, String tenantId, String username, Supplier<Boolean> supplier) { + String errorKey = GlobalConstants.PWD_ERR_CNT_KEY + username; + String loginFail = Constants.LOGIN_FAIL; + + // 鑾峰彇鐢ㄦ埛鐧诲綍閿欒娆℃暟(鍙嚜瀹氫箟闄愬埗绛栫暐 渚嬪: key + username + ip) + Integer errorNumber = RedisUtils.getCacheObject(errorKey); + // 閿佸畾鏃堕棿鍐呯櫥褰� 鍒欒涪鍑� + if (ObjectUtil.isNotNull(errorNumber) && errorNumber.equals(maxRetryCount)) { + recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime)); + throw new UserException(loginType.getRetryLimitExceed(), maxRetryCount, lockTime); + } + + if (supplier.get()) { + // 鏄惁绗竴娆� + errorNumber = ObjectUtil.isNull(errorNumber) ? 1 : errorNumber + 1; + // 杈惧埌瑙勫畾閿欒娆℃暟 鍒欓攣瀹氱櫥褰� + if (errorNumber.equals(maxRetryCount)) { + RedisUtils.setCacheObject(errorKey, errorNumber, Duration.ofMinutes(lockTime)); + recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime)); + throw new UserException(loginType.getRetryLimitExceed(), maxRetryCount, lockTime); + } else { + // 鏈揪鍒拌瀹氶敊璇鏁� 鍒欓�掑 + RedisUtils.setCacheObject(errorKey, errorNumber); + recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitCount(), errorNumber)); + throw new UserException(loginType.getRetryLimitCount(), errorNumber); + } + } + + // 鐧诲綍鎴愬姛 娓呯┖閿欒娆℃暟 + RedisUtils.deleteObject(errorKey); + } + + private void checkTenant(String tenantId) { + if (!TenantHelper.isEnable()) { + return; + } + if (TenantConstants.DEFAULT_TENANT_ID.equals(tenantId)) { + return; + } + SysTenantVo tenant = tenantService.queryByTenantId(tenantId); + if (ObjectUtil.isNull(tenant)) { + log.info("鐧诲綍绉熸埛锛歿} 涓嶅瓨鍦�.", tenantId); + throw new TenantException("tenant.not.exists"); + } else if (TenantStatus.DISABLE.getCode().equals(tenant.getStatus())) { + log.info("鐧诲綍绉熸埛锛歿} 宸茶鍋滅敤.", tenantId); + throw new TenantException("tenant.blocked"); + } else if (ObjectUtil.isNotNull(tenant.getExpireTime()) && new Date().after(tenant.getExpireTime())) { + log.info("鐧诲綍绉熸埛锛歿} 宸茶秴杩囨湁鏁堟湡.", tenantId); + throw new TenantException("tenant.expired"); + } + } + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/SysRegisterService.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/SysRegisterService.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/SysRegisterService.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/SysRegisterService.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysConfigServiceImpl.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysConfigServiceImpl.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysConfigServiceImpl.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysConfigServiceImpl.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysDataScopeServiceImpl.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysDataScopeServiceImpl.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysDataScopeServiceImpl.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysDataScopeServiceImpl.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysDeptServiceImpl.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysDeptServiceImpl.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysDeptServiceImpl.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysDictDataServiceImpl.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysDictDataServiceImpl.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysDictDataServiceImpl.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysDictDataServiceImpl.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysDictTypeServiceImpl.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysDictTypeServiceImpl.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysDictTypeServiceImpl.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysDictTypeServiceImpl.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysLogininforServiceImpl.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysLogininforServiceImpl.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysLogininforServiceImpl.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysLogininforServiceImpl.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysMenuServiceImpl.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysMenuServiceImpl.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysMenuServiceImpl.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysMenuServiceImpl.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysNoticeServiceImpl.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysNoticeServiceImpl.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysNoticeServiceImpl.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysNoticeServiceImpl.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysNoticeStateServiceImpl.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysNoticeStateServiceImpl.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysNoticeStateServiceImpl.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysNoticeStateServiceImpl.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysOperLogServiceImpl.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysOperLogServiceImpl.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysOperLogServiceImpl.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysOperLogServiceImpl.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysOssConfigServiceImpl.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysOssConfigServiceImpl.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysOssConfigServiceImpl.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysOssConfigServiceImpl.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysOssServiceImpl.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysOssServiceImpl.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysOssServiceImpl.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysOssServiceImpl.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysPermissionServiceImpl.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysPermissionServiceImpl.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysPermissionServiceImpl.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysPermissionServiceImpl.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysPostServiceImpl.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysPostServiceImpl.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysPostServiceImpl.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysPostServiceImpl.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysRoleServiceImpl.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysRoleServiceImpl.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysRoleServiceImpl.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysSensitiveServiceImpl.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysSensitiveServiceImpl.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysSensitiveServiceImpl.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysSensitiveServiceImpl.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysTenantPackageServiceImpl.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysTenantPackageServiceImpl.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysTenantPackageServiceImpl.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysTenantPackageServiceImpl.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysTenantServiceImpl.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysTenantServiceImpl.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysTenantServiceImpl.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysTenantServiceImpl.java diff --git a/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysUserGroupServiceImpl.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysUserGroupServiceImpl.java new file mode 100644 index 0000000..c3a9094 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysUserGroupServiceImpl.java @@ -0,0 +1,106 @@ +package org.ruoyi.system.service.impl; + +import org.ruoyi.common.core.utils.MapstructUtils; +import org.ruoyi.common.core.utils.StringUtils; +import org.ruoyi.common.mybatis.core.page.TableDataInfo; +import org.ruoyi.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.ruoyi.system.mapper.SysUserGroupMapper; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice涓氬姟灞傚鐞� + * + * @author Lion Li + * @date 2024-08-03 + */ +@RequiredArgsConstructor +@Service +public class SysUserGroupServiceImpl implements ISysUserGroupService { + + private final SysUserGroupMapper baseMapper; + + /** + * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆� + */ + @Override + public SysUserGroupVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� + */ + @Override + public TableDataInfo<SysUserGroupVo> queryPageList(SysUserGroupBo bo, PageQuery pageQuery) { + LambdaQueryWrapper<SysUserGroup> lqw = buildQueryWrapper(bo); + Page<SysUserGroupVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� + */ + @Override + public List<SysUserGroupVo> queryList(SysUserGroupBo bo) { + LambdaQueryWrapper<SysUserGroup> lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper<SysUserGroup> buildQueryWrapper(SysUserGroupBo bo) { + Map<String, Object> params = bo.getParams(); + LambdaQueryWrapper<SysUserGroup> lqw = Wrappers.lambdaQuery(); + lqw.like(StringUtils.isNotBlank(bo.getGroupName()), SysUserGroup::getGroupName, bo.getGroupName()); + lqw.eq(StringUtils.isNotBlank(bo.getUpdateIp()), SysUserGroup::getUpdateIp, bo.getUpdateIp()); + return lqw; + } + + /** + * 鏂板銆愯濉啓鍔熻兘鍚嶇О銆� + */ + @Override + public Boolean insertByBo(SysUserGroupBo bo) { + SysUserGroup add = MapstructUtils.convert(bo, SysUserGroup.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆� + */ + @Override + public Boolean updateByBo(SysUserGroupBo bo) { + SysUserGroup update = MapstructUtils.convert(bo, SysUserGroup.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙 + */ + private void validEntityBeforeSave(SysUserGroup entity){ + //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫 + } + + /** + * 鎵归噺鍒犻櫎銆愯濉啓鍔熻兘鍚嶇О銆� + */ + @Override + public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { + if(isValid){ + //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysUserServiceImpl.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysUserServiceImpl.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/service/impl/SysUserServiceImpl.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/AesUtils.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/AesUtils.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/AesUtils.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/AesUtils.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/AudioOkHttpUtil.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/AudioOkHttpUtil.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/AudioOkHttpUtil.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/AudioOkHttpUtil.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/DesensitizationUtil.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/DesensitizationUtil.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/DesensitizationUtil.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/DesensitizationUtil.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/HttpUtils.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/HttpUtils.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/HttpUtils.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/HttpUtils.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/KeyUtils.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/KeyUtils.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/KeyUtils.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/KeyUtils.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/OrderNumberGenerator.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/OrderNumberGenerator.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/OrderNumberGenerator.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/OrderNumberGenerator.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/WddPptApi.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/WddPptApi.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/WddPptApi.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/WddPptApi.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/WeChatScanHttpUtil.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/WeChatScanHttpUtil.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/WeChatScanHttpUtil.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/WeChatScanHttpUtil.java diff --git a/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/WeixinApiUtil.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/WeixinApiUtil.java new file mode 100644 index 0000000..56fbd19 --- /dev/null +++ b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/WeixinApiUtil.java @@ -0,0 +1,81 @@ +package org.ruoyi.system.util; + +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.ruoyi.common.core.service.ConfigService; +import org.ruoyi.system.domain.model.WeixinQrCode; +import org.springframework.stereotype.Component; + +import java.net.URI; +import java.time.LocalDateTime; + +/** + * @author https://www.wdbyte.com + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class WeixinApiUtil { + + private final ConfigService configService; + + private static String QR_CODE_URL_PREFIX = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket="; + + private static String ACCESS_TOKEN = null; + private static LocalDateTime ACCESS_TOKEN_EXPIRE_TIME = null; + /** + * 浜岀淮鐮� Ticket 杩囨湡鏃堕棿 + */ + private static int QR_CODE_TICKET_TIMEOUT = 10 * 60; + + /** + * 鑾峰彇 access token + * + * @return + */ + public synchronized String getAccessToken() { + if (ACCESS_TOKEN != null && ACCESS_TOKEN_EXPIRE_TIME.isAfter(LocalDateTime.now())) { + return ACCESS_TOKEN; + } + String api = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + getKey("appid") + "&secret=" + + getKey("secret"); + String result = HttpUtil.get(api); + JSONObject jsonObject = JSON.parseObject(result); + ACCESS_TOKEN = jsonObject.getString("access_token"); + ACCESS_TOKEN_EXPIRE_TIME = LocalDateTime.now().plusSeconds(jsonObject.getLong("expires_in") - 10); + return ACCESS_TOKEN; + } + + /** + * 鑾峰彇浜岀淮鐮� Ticket + * + * https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Generating_a_Parametric_QR_Code.html + * + * @return + */ + public WeixinQrCode getQrCode() { + String api = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=" + getAccessToken(); + String jsonBody = String.format("{\n" + + " \"expire_seconds\": %d,\n" + + " \"action_name\": \"QR_STR_SCENE\",\n" + + " \"action_info\": {\n" + + " \"scene\": {\n" + + " \"scene_str\": \"%s\"\n" + + " }\n" + + " }\n" + + "}", QR_CODE_TICKET_TIMEOUT, KeyUtils.uuid32()); + String result = HttpUtil.post(api, jsonBody); + log.info("get qr code params:{}", jsonBody); + log.info("get qr code result:{}", result); + WeixinQrCode weixinQrCode = JSON.parseObject(result, WeixinQrCode.class); + weixinQrCode.setQrCodeUrl(QR_CODE_URL_PREFIX + URI.create(weixinQrCode.getTicket()).toASCIIString()); + return weixinQrCode; + } + + public String getKey(String key) { + return configService.getConfigValue("weixin", key); + } +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/WeixinMsgUtil.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/WeixinMsgUtil.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/WeixinMsgUtil.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/WeixinMsgUtil.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/WeixinQrCodeCacheUtil.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/WeixinQrCodeCacheUtil.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/WeixinQrCodeCacheUtil.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/WeixinQrCodeCacheUtil.java diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/XmlUtil.java b/ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/XmlUtil.java similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/XmlUtil.java rename to ruoyi-modules-api/ruoyi-system-api/src/main/java/org/ruoyi/system/util/XmlUtil.java diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/CoverMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/CoverMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/CoverMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/CoverMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/CoverPromptAudioMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/CoverPromptAudioMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/CoverPromptAudioMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/CoverPromptAudioMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/PaymentOrdersMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/PaymentOrdersMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/PaymentOrdersMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/PaymentOrdersMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysConfigMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysConfigMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysDeptMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysDeptMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysDictDataMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysDictDataMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysDictTypeMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysDictTypeMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysLogininforMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysLogininforMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysMenuMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysMenuMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysModelMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysModelMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysModelMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysModelMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysNoticeMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysNoticeMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysNoticeStateMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysNoticeStateMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysNoticeStateMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysNoticeStateMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysOperLogMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysOperLogMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysOssConfigMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysOssConfigMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysOssConfigMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysOssConfigMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysOssMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysOssMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysOssMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysOssMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysPackagePlanMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysPackagePlanMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysPackagePlanMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysPackagePlanMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysPostMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysPostMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysRoleDeptMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysRoleDeptMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysRoleMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysRoleMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysRoleMenuMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysRoleMenuMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysTenantMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysTenantMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysTenantMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysTenantMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysTenantPackageMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysTenantPackageMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysTenantPackageMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysTenantPackageMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysUserMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysUserMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysUserPostMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysUserPostMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysUserRoleMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/SysUserRoleMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/WxRobConfigMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/WxRobConfigMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/WxRobConfigMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/WxRobConfigMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/WxRobKeywordMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/WxRobKeywordMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/WxRobKeywordMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/WxRobKeywordMapper.xml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/WxRobRelationMapper.xml b/ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/WxRobRelationMapper.xml similarity index 100% rename from ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/WxRobRelationMapper.xml rename to ruoyi-modules-api/ruoyi-system-api/src/main/resources/mapper/WxRobRelationMapper.xml diff --git a/ruoyi-modules/pom.xml b/ruoyi-modules/pom.xml index ac97241..20c5419 100644 --- a/ruoyi-modules/pom.xml +++ b/ruoyi-modules/pom.xml @@ -20,7 +20,6 @@ <module>ruoyi-demo</module> <module>ruoyi-chat</module> <module>ruoyi-system</module> - <module>ruoyi-knowledge</module> <module>ruoyi-generator</module> </modules> diff --git a/ruoyi-modules/ruoyi-chat/pom.xml b/ruoyi-modules/ruoyi-chat/pom.xml index b6a9d82..9f25428 100644 --- a/ruoyi-modules/ruoyi-chat/pom.xml +++ b/ruoyi-modules/ruoyi-chat/pom.xml @@ -107,13 +107,27 @@ <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> </dependency> + <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-system</artifactId> </dependency> + <dependency> <groupId>org.ruoyi</groupId> - <artifactId>ruoyi-knowledge</artifactId> + <artifactId>ruoyi-knowledge-api</artifactId> + </dependency> + <dependency> + <groupId>org.ruoyi</groupId> + <artifactId>ruoyi-chat-api</artifactId> + <version>1.0.0</version> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>cn.hutool</groupId> + <artifactId>hutool-all</artifactId> + <version>5.8.26</version> + <scope>compile</scope> </dependency> </dependencies> diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/ChatController.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/ChatController.java index e6a4446..4d5f9fa 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/ChatController.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/ChatController.java @@ -5,11 +5,12 @@ import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.ruoyi.chat.service.chat.ISseService; import org.ruoyi.common.chat.domain.request.ChatRequest; -import org.ruoyi.common.chat.domain.request.Dall3Request; + import org.ruoyi.common.chat.entity.Tts.TextToSpeech; import org.ruoyi.common.chat.entity.files.UploadFileResponse; -import org.ruoyi.common.chat.entity.images.Item; + import org.ruoyi.common.chat.entity.whisper.WhisperResponse; import org.ruoyi.common.core.domain.R; import org.ruoyi.common.core.domain.model.LoginUser; @@ -17,8 +18,10 @@ import org.ruoyi.common.mybatis.core.page.PageQuery; import org.ruoyi.common.mybatis.core.page.TableDataInfo; import org.ruoyi.common.satoken.utils.LoginHelper; -import org.ruoyi.system.domain.request.translation.TranslationRequest; -import org.ruoyi.system.service.ISseService; +import org.ruoyi.domain.bo.ChatMessageBo; + +import org.ruoyi.domain.vo.ChatMessageVo; +import org.ruoyi.service.IChatMessageService; import org.springframework.core.io.Resource; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; @@ -26,7 +29,6 @@ import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; -import java.util.List; /** * 鎻忚堪锛氳亰澶╃鐞� @@ -55,7 +57,6 @@ } return sseService.sseChat(chatRequest,request); } - /** * 涓婁紶鏂囦欢 @@ -90,22 +91,6 @@ return sseService.textToSpeed(textToSpeech); } - /** - * 鏂囨湰缈昏瘧 - * - * @param - */ - @PostMapping("/translation") - @ResponseBody - public String translation(@RequestBody TranslationRequest translationRequest) { - return sseService.translation(translationRequest); - } - - @PostMapping("/dall3") - @ResponseBody - public R<List<Item>> dall3(@RequestBody @Valid Dall3Request request) { - return R.ok(sseService.dall3(request)); - } /** * 鑱婂ぉ璁板綍 diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/SubmitController.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/SubmitController.java index a5e9208..11fd751 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/SubmitController.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/SubmitController.java @@ -7,7 +7,7 @@ import lombok.extern.slf4j.Slf4j; import okhttp3.Request; import org.apache.commons.lang3.math.NumberUtils; -import org.ruoyi.chat.dto.*; +import org.ruoyi.chat.domain.dto.*; import org.ruoyi.chat.enums.ActionType; import org.ruoyi.chat.util.MjOkHttpUtil; import org.springframework.web.bind.annotation.PostMapping; diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/TaskController.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/TaskController.java index 481b5b3..ea86a2a 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/TaskController.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/controller/TaskController.java @@ -7,7 +7,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import okhttp3.Request; -import org.ruoyi.chat.dto.TaskConditionDTO; +import org.ruoyi.chat.domain.dto.TaskConditionDTO; import org.ruoyi.chat.util.MjOkHttpUtil; import org.springframework.web.bind.annotation.*; diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/BaseSubmitDTO.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/BaseSubmitDTO.java new file mode 100644 index 0000000..0c2334f --- /dev/null +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/BaseSubmitDTO.java @@ -0,0 +1,16 @@ +package org.ruoyi.chat.domain.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public abstract class BaseSubmitDTO { + + @ApiModelProperty("鑷畾涔夊弬鏁�") + protected String state; + + @ApiModelProperty("鍥炶皟鍦板潃, 涓虹┖鏃朵娇鐢ㄥ叏灞�notifyHook") + protected String notifyHook; +} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitActionDTO.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitActionDTO.java new file mode 100644 index 0000000..49da1da --- /dev/null +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitActionDTO.java @@ -0,0 +1,18 @@ +package org.ruoyi.chat.domain.dto; + +import io.swagger.annotations.ApiModel; +import lombok.Data; + + +@Data +@ApiModel("鍙樺寲浠诲姟鎻愪氦鍙傛暟") +public class SubmitActionDTO { + + private String customId; + + private String taskId; + + private String state; + + private String notifyHook; +} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitBlendDTO.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitBlendDTO.java new file mode 100644 index 0000000..3c3d8cc --- /dev/null +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitBlendDTO.java @@ -0,0 +1,21 @@ +package org.ruoyi.chat.domain.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.ruoyi.chat.enums.BlendDimensions; + +import java.util.List; + +@Data +@ApiModel("Blend鎻愪氦鍙傛暟") +@EqualsAndHashCode(callSuper = true) +public class SubmitBlendDTO extends BaseSubmitDTO { + + @ApiModelProperty(value = "鍥剧墖base64鏁扮粍", required = true, example = "[\"data:image/png;base64,xxx1\", \"data:image/png;base64,xxx2\"]") + private List<String> base64Array; + + @ApiModelProperty(value = "姣斾緥: PORTRAIT(2:3); SQUARE(1:1); LANDSCAPE(3:2)", example = "SQUARE") + private BlendDimensions dimensions = BlendDimensions.SQUARE; +} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitChangeDTO.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitChangeDTO.java new file mode 100644 index 0000000..039e15f --- /dev/null +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitChangeDTO.java @@ -0,0 +1,25 @@ +package org.ruoyi.chat.domain.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.ruoyi.chat.enums.TaskAction; + + +@Data +@ApiModel("鍙樺寲浠诲姟鎻愪氦鍙傛暟") +@EqualsAndHashCode(callSuper = true) +public class SubmitChangeDTO extends BaseSubmitDTO { + + @ApiModelProperty(value = "浠诲姟ID", required = true, example = "\"1320098173412546\"") + private String taskId; + + @ApiModelProperty(value = "UPSCALE(鏀惧ぇ); VARIATION(鍙樻崲); REROLL(閲嶆柊鐢熸垚)", required = true, + allowableValues = "UPSCALE, VARIATION, REROLL", example = "UPSCALE") + private TaskAction action; + + @ApiModelProperty(value = "搴忓彿(1~4), action涓篣PSCALE,VARIATION鏃跺繀浼�", allowableValues = "range[1, 4]", example = "1") + private Integer index; + +} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitDescribeDTO.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitDescribeDTO.java new file mode 100644 index 0000000..3be051e --- /dev/null +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitDescribeDTO.java @@ -0,0 +1,15 @@ +package org.ruoyi.chat.domain.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@ApiModel("Describe鎻愪氦鍙傛暟") +@EqualsAndHashCode(callSuper = true) +public class SubmitDescribeDTO extends BaseSubmitDTO { + + @ApiModelProperty(value = "鍥剧墖base64", required = true, example = "data:image/png;base64,xxx") + private String base64; +} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitImagineDTO.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitImagineDTO.java new file mode 100644 index 0000000..d65a0db --- /dev/null +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitImagineDTO.java @@ -0,0 +1,26 @@ +package org.ruoyi.chat.domain.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + + +@Data +@ApiModel("Imagine鎻愪氦鍙傛暟") +@EqualsAndHashCode(callSuper = true) +public class SubmitImagineDTO extends BaseSubmitDTO { + + @ApiModelProperty(value = "鎻愮ず璇�", required = true, example = "Cat") + private String prompt; + + @ApiModelProperty(value = "鍨浘base64鏁扮粍") + private List<String> base64Array; + + @ApiModelProperty(hidden = true) + @Deprecated(since = "3.0", forRemoval = true) + private String base64; + +} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitModalDTO.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitModalDTO.java new file mode 100644 index 0000000..4a321e4 --- /dev/null +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitModalDTO.java @@ -0,0 +1,19 @@ +package org.ruoyi.chat.domain.dto; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("灞�閮ㄩ噸缁樻彁浜ゅ弬鏁�") +public class SubmitModalDTO extends BaseSubmitDTO{ + + private String maskBase64; + + private String taskId; + + private String prompt; + +} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitShortenDTO.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitShortenDTO.java new file mode 100644 index 0000000..f8f7ed3 --- /dev/null +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitShortenDTO.java @@ -0,0 +1,17 @@ +package org.ruoyi.chat.domain.dto; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("prompt鍒嗘瀽鎻愪氦鍙傛暟") +public class SubmitShortenDTO extends BaseSubmitDTO{ + + private String botType; + + private String prompt; + +} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitSimpleChangeDTO.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitSimpleChangeDTO.java new file mode 100644 index 0000000..b4e09a0 --- /dev/null +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/SubmitSimpleChangeDTO.java @@ -0,0 +1,17 @@ +package org.ruoyi.chat.domain.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +@Data +@ApiModel("鍙樺寲浠诲姟鎻愪氦鍙傛暟-simple") +@EqualsAndHashCode(callSuper = true) +public class SubmitSimpleChangeDTO extends BaseSubmitDTO { + + @ApiModelProperty(value = "鍙樺寲鎻忚堪: ID $action$index", required = true, example = "1320098173412546 U2") + private String content; + +} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/TaskConditionDTO.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/TaskConditionDTO.java new file mode 100644 index 0000000..46864ce --- /dev/null +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/domain/dto/TaskConditionDTO.java @@ -0,0 +1,14 @@ +package org.ruoyi.chat.domain.dto; + +import io.swagger.annotations.ApiModel; +import lombok.Data; + +import java.util.List; + +@Data +@ApiModel("浠诲姟鏌ヨ鍙傛暟") +public class TaskConditionDTO { + + private List<String> ids; + +} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/BaseSubmitDTO.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/BaseSubmitDTO.java deleted file mode 100644 index 318fd13..0000000 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/BaseSubmitDTO.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.ruoyi.chat.dto; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -public abstract class BaseSubmitDTO { - - @ApiModelProperty("鑷畾涔夊弬鏁�") - protected String state; - - @ApiModelProperty("鍥炶皟鍦板潃, 涓虹┖鏃朵娇鐢ㄥ叏灞�notifyHook") - protected String notifyHook; -} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitActionDTO.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitActionDTO.java deleted file mode 100644 index c450169..0000000 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitActionDTO.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.ruoyi.chat.dto; - -import io.swagger.annotations.ApiModel; -import lombok.Data; - - -@Data -@ApiModel("鍙樺寲浠诲姟鎻愪氦鍙傛暟") -public class SubmitActionDTO { - - private String customId; - - private String taskId; - - private String state; - - private String notifyHook; -} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitBlendDTO.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitBlendDTO.java deleted file mode 100644 index 4e11dfe..0000000 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitBlendDTO.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.ruoyi.chat.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.ruoyi.chat.enums.BlendDimensions; - -import java.util.List; - -@Data -@ApiModel("Blend鎻愪氦鍙傛暟") -@EqualsAndHashCode(callSuper = true) -public class SubmitBlendDTO extends BaseSubmitDTO { - - @ApiModelProperty(value = "鍥剧墖base64鏁扮粍", required = true, example = "[\"data:image/png;base64,xxx1\", \"data:image/png;base64,xxx2\"]") - private List<String> base64Array; - - @ApiModelProperty(value = "姣斾緥: PORTRAIT(2:3); SQUARE(1:1); LANDSCAPE(3:2)", example = "SQUARE") - private BlendDimensions dimensions = BlendDimensions.SQUARE; -} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitChangeDTO.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitChangeDTO.java deleted file mode 100644 index 80e4245..0000000 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitChangeDTO.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.ruoyi.chat.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.ruoyi.chat.enums.TaskAction; - - -@Data -@ApiModel("鍙樺寲浠诲姟鎻愪氦鍙傛暟") -@EqualsAndHashCode(callSuper = true) -public class SubmitChangeDTO extends BaseSubmitDTO { - - @ApiModelProperty(value = "浠诲姟ID", required = true, example = "\"1320098173412546\"") - private String taskId; - - @ApiModelProperty(value = "UPSCALE(鏀惧ぇ); VARIATION(鍙樻崲); REROLL(閲嶆柊鐢熸垚)", required = true, - allowableValues = "UPSCALE, VARIATION, REROLL", example = "UPSCALE") - private TaskAction action; - - @ApiModelProperty(value = "搴忓彿(1~4), action涓篣PSCALE,VARIATION鏃跺繀浼�", allowableValues = "range[1, 4]", example = "1") - private Integer index; - -} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitDescribeDTO.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitDescribeDTO.java deleted file mode 100644 index 4becb81..0000000 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitDescribeDTO.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.ruoyi.chat.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@Data -@ApiModel("Describe鎻愪氦鍙傛暟") -@EqualsAndHashCode(callSuper = true) -public class SubmitDescribeDTO extends BaseSubmitDTO { - - @ApiModelProperty(value = "鍥剧墖base64", required = true, example = "data:image/png;base64,xxx") - private String base64; -} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitImagineDTO.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitImagineDTO.java deleted file mode 100644 index c8f306a..0000000 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitImagineDTO.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.ruoyi.chat.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.util.List; - - -@Data -@ApiModel("Imagine鎻愪氦鍙傛暟") -@EqualsAndHashCode(callSuper = true) -public class SubmitImagineDTO extends BaseSubmitDTO { - - @ApiModelProperty(value = "鎻愮ず璇�", required = true, example = "Cat") - private String prompt; - - @ApiModelProperty(value = "鍨浘base64鏁扮粍") - private List<String> base64Array; - - @ApiModelProperty(hidden = true) - @Deprecated(since = "3.0", forRemoval = true) - private String base64; - -} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitModalDTO.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitModalDTO.java deleted file mode 100644 index 38c5d86..0000000 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitModalDTO.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.ruoyi.chat.dto; - -import io.swagger.annotations.ApiModel; -import lombok.Data; -import lombok.EqualsAndHashCode; - - -@Data -@EqualsAndHashCode(callSuper = true) -@ApiModel("灞�閮ㄩ噸缁樻彁浜ゅ弬鏁�") -public class SubmitModalDTO extends BaseSubmitDTO{ - - private String maskBase64; - - private String taskId; - - private String prompt; - -} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitShortenDTO.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitShortenDTO.java deleted file mode 100644 index 8be2f8b..0000000 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitShortenDTO.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.ruoyi.chat.dto; - -import io.swagger.annotations.ApiModel; -import lombok.Data; -import lombok.EqualsAndHashCode; - - -@Data -@EqualsAndHashCode(callSuper = true) -@ApiModel("prompt鍒嗘瀽鎻愪氦鍙傛暟") -public class SubmitShortenDTO extends BaseSubmitDTO{ - - private String botType; - - private String prompt; - -} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitSimpleChangeDTO.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitSimpleChangeDTO.java deleted file mode 100644 index 62c8009..0000000 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/SubmitSimpleChangeDTO.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.ruoyi.chat.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.EqualsAndHashCode; - - -@Data -@ApiModel("鍙樺寲浠诲姟鎻愪氦鍙傛暟-simple") -@EqualsAndHashCode(callSuper = true) -public class SubmitSimpleChangeDTO extends BaseSubmitDTO { - - @ApiModelProperty(value = "鍙樺寲鎻忚堪: ID $action$index", required = true, example = "1320098173412546 U2") - private String content; - -} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/TaskConditionDTO.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/TaskConditionDTO.java deleted file mode 100644 index 8463477..0000000 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/dto/TaskConditionDTO.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.ruoyi.chat.dto; - -import io.swagger.annotations.ApiModel; -import lombok.Data; - -import java.util.List; - -@Data -@ApiModel("浠诲姟鏌ヨ鍙傛暟") -public class TaskConditionDTO { - - private List<String> ids; - -} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/listener/SSEEventSourceListener.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/listener/SSEEventSourceListener.java new file mode 100644 index 0000000..f64e615 --- /dev/null +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/listener/SSEEventSourceListener.java @@ -0,0 +1,107 @@ +package org.ruoyi.chat.listener; + + +import cn.hutool.core.collection.CollectionUtil; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import okhttp3.Response; +import okhttp3.ResponseBody; +import okhttp3.sse.EventSource; +import okhttp3.sse.EventSourceListener; +import org.jetbrains.annotations.NotNull; +import org.ruoyi.common.chat.entity.chat.ChatCompletionResponse; +import org.ruoyi.common.core.utils.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter; + +import java.util.Objects; + +/** + * 鎻忚堪锛歄penAIEventSourceListener + * + * @author https:www.unfbx.com + * @date 2023-02-22 + */ +@Slf4j +@RequiredArgsConstructor +@Component +public class SSEEventSourceListener extends EventSourceListener { + + @Autowired(required = false) + public SSEEventSourceListener(ResponseBodyEmitter emitter) { + this.emitter = emitter; + } + + private ResponseBodyEmitter emitter; + + private StringBuilder stringBuffer; + + private String modelName; + /** + * {@inheritDoc} + */ + @Override + public void onOpen(EventSource eventSource, Response response) { + log.info("OpenAI寤虹珛sse杩炴帴..."); + } + + /** + * {@inheritDoc} + */ + @SneakyThrows + @Override + public void onEvent(@NotNull EventSource eventSource, String id, String type, String data) { + try { + if ("[DONE]".equals(data)) { + //鎴愬姛鍝嶅簲 + emitter.complete(); + + // 鎵i櫎璐圭敤 (娑堣�楀瓧绗� 妯″瀷鍚嶇О) + return; + } + // 瑙f瀽杩斿洖鍐呭 + ObjectMapper mapper = new ObjectMapper(); + ChatCompletionResponse completionResponse = mapper.readValue(data, ChatCompletionResponse.class); + if(completionResponse == null || CollectionUtil.isEmpty(completionResponse.getChoices())){ + return; + } + Object content = completionResponse.getChoices().get(0).getDelta().getContent(); + if(content == null){ + content = completionResponse.getChoices().get(0).getDelta().getReasoningContent(); + if(content == null) return; + } + if(StringUtils.isEmpty(modelName)){ + modelName = completionResponse.getModel(); + } + stringBuffer.append(content); + emitter.send(data); + } catch (Exception e) { + log.error("sse淇℃伅鎺ㄩ�佸け璐}鍐呭锛歿}",e.getMessage(),data); + eventSource.cancel(); + } + } + + @Override + public void onClosed(EventSource eventSource) { + log.info("OpenAI鍏抽棴sse杩炴帴..."); + } + + @SneakyThrows + @Override + public void onFailure(EventSource eventSource, Throwable t, Response response) { + if (Objects.isNull(response)) { + return; + } + ResponseBody body = response.body(); + if (Objects.nonNull(body)) { + log.error("OpenAI sse杩炴帴寮傚父data锛歿}锛屽紓甯革細{}", body.string(), t); + } else { + log.error("OpenAI sse杩炴帴寮傚父data锛歿}锛屽紓甯革細{}", response, t); + } + eventSource.cancel(); + } + +} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/IChatCostService.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/IChatCostService.java new file mode 100644 index 0000000..234360a --- /dev/null +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/IChatCostService.java @@ -0,0 +1,43 @@ +package org.ruoyi.chat.service.chat; + +import org.ruoyi.domain.bo.ChatMessageBo; + +/** + * 璁¤垂绠$悊Service鎺ュ彛 + * + * @author ageerle + * @date 2025-04-08 + */ +public interface IChatCostService { + + /** + * 鏍规嵁娑堣�楃殑tokens鎵i櫎浣欓 + * + * @param chatMessageBo + * @return 缁撴灉 + */ + + void deductToken(ChatMessageBo chatMessageBo); + + /** + * 鎵i櫎鐢ㄦ埛鐨勪綑棰� + * + */ + void deductUserBalance(Long userId, Double numberCost); + + + /** + * 鎵i櫎浠诲姟璐圭敤骞朵笖淇濆瓨璁板綍 + * + * @param type 浠诲姟绫诲瀷 + * @param prompt 浠诲姟鎻忚堪 + * @param cost 鎵i櫎璐圭敤 + */ + void taskDeduct(String type,String prompt, double cost); + + + /** + * 鍒ゆ柇鐢ㄦ埛鏄惁浠樿垂 + */ + void checkUserGrade(); +} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/ISseService.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/ISseService.java new file mode 100644 index 0000000..84da5b4 --- /dev/null +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/ISseService.java @@ -0,0 +1,65 @@ +package org.ruoyi.chat.service.chat; + +import jakarta.servlet.http.HttpServletRequest; +import org.ruoyi.common.chat.domain.request.ChatRequest; +import org.ruoyi.common.chat.entity.Tts.TextToSpeech; +import org.ruoyi.common.chat.entity.files.UploadFileResponse; +import org.ruoyi.common.chat.entity.whisper.WhisperResponse; +import org.springframework.core.io.Resource; +import org.springframework.http.ResponseEntity; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; + + +/** + * 鐢ㄦ埛鑱婂ぉ绠$悊Service鎺ュ彛 + * + * @author ageerle + * @date 2025-04-08 + */ +public interface ISseService { + + /** + * 瀹㈡埛绔彂閫佹秷鎭埌鏈嶅姟绔� + * @param chatRequest 璇锋眰瀵硅薄 + */ + SseEmitter sseChat(ChatRequest chatRequest, HttpServletRequest request); + + /** + * 璇煶杞枃瀛� + * @param file 璇煶鏂囦欢 + */ + WhisperResponse speechToTextTranscriptionsV2(MultipartFile file); + + /** + * 鏂囧瓧杞闊� + * + * @param textToSpeech 鏂囨湰淇℃伅 + * @return 娴佸紡璇煶 + */ + ResponseEntity<Resource> textToSpeed(TextToSpeech textToSpeech); + + + /** + * 涓婁紶鏂囦欢鍒癮pi鏈嶅姟鍣� + * + * @param file 鏂囦欢淇℃伅 + * @return 杩斿洖鏂囦欢淇℃伅 + */ + UploadFileResponse upload(MultipartFile file); + + + /** + * 浣跨敤ollama璋冪敤鏈湴妯″瀷 + * @param chatRequest 瀵硅瘽淇℃伅 + * @return 娴佸紡杈撳嚭杩斿洖鍐呭 + */ + SseEmitter ollamaChat(ChatRequest chatRequest); + + /** + * 浼佷笟搴旂敤鍥炲 + * @param prompt 鎻愮ず璇� + * @return 鍥炲鍐呭 + */ + String wxCpChat(String prompt); +} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java new file mode 100644 index 0000000..2e3e294 --- /dev/null +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java @@ -0,0 +1,292 @@ +package org.ruoyi.chat.service.chat.impl; + +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.extra.servlet.ServletUtil; +import com.google.protobuf.ServiceException; +import io.github.ollama4j.OllamaAPI; +import io.github.ollama4j.models.chat.OllamaChatMessage; +import io.github.ollama4j.models.chat.OllamaChatMessageRole; +import io.github.ollama4j.models.chat.OllamaChatRequestBuilder; +import io.github.ollama4j.models.chat.OllamaChatRequestModel; +import io.github.ollama4j.models.generate.OllamaStreamHandler; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import okhttp3.*; +import org.ruoyi.chat.listener.SSEEventSourceListener; + +import org.ruoyi.chat.service.chat.ISseService; +import org.ruoyi.common.chat.config.ChatConfig; +import org.ruoyi.common.chat.domain.request.ChatRequest; +import org.ruoyi.common.chat.entity.Tts.TextToSpeech; +import org.ruoyi.common.chat.entity.chat.ChatCompletion; +import org.ruoyi.common.chat.entity.chat.ChatCompletionResponse; + +import org.ruoyi.common.chat.entity.chat.Message; +import org.ruoyi.common.chat.entity.files.UploadFileResponse; +import org.ruoyi.common.chat.entity.whisper.WhisperResponse; +import org.ruoyi.common.chat.openai.OpenAiStreamClient; +import org.ruoyi.common.core.utils.file.FileUtils; +import org.ruoyi.common.core.utils.file.MimeTypeUtils; + +import org.ruoyi.common.redis.utils.RedisUtils; +import org.ruoyi.domain.vo.ChatModelVo; +import org.ruoyi.service.IChatModelService; +import org.springframework.core.io.InputStreamResource; +import org.springframework.core.io.Resource; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.Duration; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +@Service +@Slf4j +@RequiredArgsConstructor +public class SseServiceImpl implements ISseService { + + private OpenAiStreamClient openAiStreamClient; + + private final ChatConfig chatConfig; + + private final IChatModelService chatModelService; + + @Override + public SseEmitter sseChat(ChatRequest chatRequest, HttpServletRequest request) { + SseEmitter sseEmitter = new SseEmitter(0L); + SSEEventSourceListener openAIEventSourceListener = new SSEEventSourceListener(sseEmitter); + // 鑾峰彇瀵硅瘽娑堟伅鍒楄〃 + List<Message> messages = chatRequest.getMessages(); + try { + if (StpUtil.isLogin()) { + // 閫氳繃妯″瀷鍚嶇О鏌ヨ妯″瀷淇℃伅 + ChatModelVo chatModelVo = chatModelService.selectModelByName(chatRequest.getModel()); + // 鏋勫缓api璇锋眰瀹㈡埛绔� + openAiStreamClient = chatConfig.createOpenAiStreamClient(chatModelVo.getApiHost(), chatModelVo.getApiKey()); + + // 妯″瀷璁剧疆榛樿鎻愮ず璇� + + // 鏄惁寮�鍚仈缃戞煡璇� + }else { + // 鏈櫥褰曠敤鎴烽檺鍒跺璇濇鏁�,榛樿5娆� + String clientIp = ServletUtil.getClientIP((javax.servlet.http.HttpServletRequest) request,"X-Forwarded-For"); + + int timeWindowInSeconds = 5; + + String redisKey = "visitor:" + clientIp; + int count = 0; + + if (RedisUtils.getCacheObject(redisKey) == null) { + // 褰撳墠璁块棶娆℃暟 + RedisUtils.setCacheObject(redisKey, count, Duration.ofSeconds(86400)); + }else { + count = RedisUtils.getCacheObject(redisKey); + if (count >= timeWindowInSeconds) { + throw new ServiceException("褰撴棩鍏嶈垂娆℃暟宸茬敤瀹�"); + } + count++; + RedisUtils.setCacheObject(redisKey, count); + } + } + + ChatCompletion completion = ChatCompletion + .builder() + .messages(messages) + .model(chatRequest.getModel()) + .temperature(chatRequest.getTemperature()) + .topP(chatRequest.getTop_p()) + .stream(true) + .build(); + openAiStreamClient.streamChatCompletion(completion, openAIEventSourceListener); + // 淇濆瓨娑堟伅璁板綍 骞舵墸闄よ垂鐢� + + } catch (Exception e) { + String message = e.getMessage(); + sendErrorEvent(sseEmitter, message); + return sseEmitter; + } + return sseEmitter; + } + + + /** + * 鍙戦�丼SE閿欒浜嬩欢鐨勫皝瑁呮柟娉� + * + * @param sseEmitter + * @param errorMessage + */ + private void sendErrorEvent(SseEmitter sseEmitter, String errorMessage) { + SseEmitter.SseEventBuilder event = SseEmitter.event() + .name("error") + .data(errorMessage); + try { + sseEmitter.send(event); + } catch (IOException e) { + log.error("鍙戦�佷簨浠跺け璐�: {}", e.getMessage()); + } + sseEmitter.complete(); + } + + /** + * 鏂囧瓧杞闊� + */ + @Override + public ResponseEntity<Resource> textToSpeed(TextToSpeech textToSpeech) { + ResponseBody body = openAiStreamClient.textToSpeech(textToSpeech); + if (body != null) { + // 灏哛esponseBody杞崲涓篒nputStreamResource + InputStreamResource resource = new InputStreamResource(body.byteStream()); + + // 鍒涘缓骞惰繑鍥濺esponseEntity + return ResponseEntity.ok() + .contentType(MediaType.parseMediaType("audio/mpeg")) + .body(resource); + } else { + // 濡傛灉ResponseBody涓虹┖锛岃繑鍥�404鐘舵�佺爜 + return ResponseEntity.notFound().build(); + } + } + + /** + * 璇煶杞枃瀛� + */ + @Override + public WhisperResponse speechToTextTranscriptionsV2(MultipartFile file) { + // 纭繚鏂囦欢涓嶄负绌� + if (file.isEmpty()) { + throw new IllegalStateException("Cannot convert an empty MultipartFile"); + } + if (!FileUtils.isValidFileExtention(file, MimeTypeUtils.AUDIO__EXTENSION)) { + throw new IllegalStateException("File Extention not supported"); + } + // 鍒涘缓涓�涓枃浠跺璞� + File fileA = new File(System.getProperty("java.io.tmpdir") + File.separator + file.getOriginalFilename()); + try { + // 灏� MultipartFile 鐨勫唴瀹瑰啓鍏ユ枃浠� + file.transferTo(fileA); + } catch (IOException e) { + throw new RuntimeException("Failed to convert MultipartFile to File", e); + } + return openAiStreamClient.speechToTextTranscriptions(fileA); + } + + + @Override + public UploadFileResponse upload(MultipartFile file) { + if (file.isEmpty()) { + throw new IllegalStateException("Cannot upload an empty MultipartFile"); + } + if (!FileUtils.isValidFileExtention(file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION)) { + throw new IllegalStateException("File Extention not supported"); + } + openAiStreamClient = chatConfig.getOpenAiStreamClient(); + return openAiStreamClient.uploadFile("fine-tune", convertMultiPartToFile(file)); + } + + private File convertMultiPartToFile(MultipartFile multipartFile) { + File file = null; + try { + // 鑾峰彇鍘熷鏂囦欢鍚� + String originalFileName = multipartFile.getOriginalFilename(); + // 榛樿鎵╁睍鍚� + String extension = ".tmp"; + // 灏濊瘯浠庡師濮嬫枃浠跺悕涓幏鍙栨墿灞曞悕 + if (originalFileName != null && originalFileName.contains(".")) { + extension = originalFileName.substring(originalFileName.lastIndexOf(".")); + } + + // 浣跨敤鍘熷鏂囦欢鐨勬墿灞曞悕鍒涘缓涓存椂鏂囦欢 + Path tempFile = Files.createTempFile(null, extension); + file = tempFile.toFile(); + + // 灏哅ultipartFile鐨勫唴瀹瑰啓鍏ユ枃浠� + try (InputStream inputStream = multipartFile.getInputStream(); + FileOutputStream outputStream = new FileOutputStream(file)) { + int read; + byte[] bytes = new byte[1024]; + while ((read = inputStream.read(bytes)) != -1) { + outputStream.write(bytes, 0, read); + } + } catch (IOException e) { + // 澶勭悊鏂囦欢鍐欏叆寮傚父 + e.printStackTrace(); + } + } catch (IOException e) { + // 澶勭悊涓存椂鏂囦欢鍒涘缓寮傚父 + e.printStackTrace(); + } + return file; + } + + @Override + public SseEmitter ollamaChat(ChatRequest chatRequest) { + String[] parts = chatRequest.getModel().split("ollama-"); + ChatModelVo chatModelVo = chatModelService.selectModelByName(chatRequest.getModel()); + final SseEmitter emitter = new SseEmitter(); + String host = chatModelVo.getApiHost(); + List<Message> msgList = chatRequest.getMessages(); + List<OllamaChatMessage> messages = new ArrayList<>(); + + for (Message message : msgList) { + OllamaChatMessage ollamaChatMessage = new OllamaChatMessage(); + ollamaChatMessage.setRole(OllamaChatMessageRole.USER); + ollamaChatMessage.setContent(message.getContent().toString()); + messages.add(ollamaChatMessage); + } + OllamaAPI api = new OllamaAPI(host); + api.setRequestTimeoutSeconds(100); + OllamaChatRequestBuilder builder = OllamaChatRequestBuilder.getInstance(parts[1]); + + OllamaChatRequestModel requestModel = builder + .withMessages(messages) + .build(); + + // 寮傛鎵ц OllAma API 璋冪敤 + CompletableFuture.runAsync(() -> { + try { + StringBuilder response = new StringBuilder(); + OllamaStreamHandler streamHandler = (s) -> { + String substr = s.substring(response.length()); + response.append(substr); + System.out.println(substr); + try { + emitter.send(substr); + } catch (IOException e) { + sendErrorEvent(emitter, e.getMessage()); + } + }; + api.chat(requestModel, streamHandler); + emitter.complete(); + } catch (Exception e) { + sendErrorEvent(emitter, e.getMessage()); + } + }); + return emitter; + } + + @Override + public String wxCpChat(String prompt) { + List<Message> messageList = new ArrayList<>(); + Message message = Message.builder().role(Message.Role.USER).content(prompt).build(); + messageList.add(message); + ChatCompletion chatCompletion = ChatCompletion + .builder() + .messages(messageList) + .model("gpt-4o-mini") + .stream(false) + .build(); + ChatCompletionResponse chatCompletionResponse = openAiStreamClient.chatCompletion(chatCompletion); + return chatCompletionResponse.getChoices().get(0).getMessage().getContent().toString(); + } +} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorizer/BgeLargeVectorization.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorizer/BgeLargeVectorization.java new file mode 100644 index 0000000..66a6577 --- /dev/null +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorizer/BgeLargeVectorization.java @@ -0,0 +1,64 @@ +package org.ruoyi.chat.service.knowledge.vectorizer; + +import com.google.gson.Gson; +import io.github.ollama4j.OllamaAPI; +import io.github.ollama4j.models.embeddings.OllamaEmbeddingsRequestModel; +import jakarta.annotation.Resource; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.ruoyi.domain.vo.KnowledgeInfoVo; +import org.ruoyi.service.IKnowledgeInfoService; +import org.ruoyi.service.VectorizationService; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@Component +@Slf4j +@RequiredArgsConstructor +public class BgeLargeVectorization implements VectorizationService { + + String host = "http://localhost:11434/"; + + @Lazy + @Resource + private IKnowledgeInfoService knowledgeInfoService; + + @Override + public List<List<Double>> batchVectorization(List<String> chunkList, String kid) { + OllamaAPI ollamaAPI = new OllamaAPI(host); + KnowledgeInfoVo knowledgeInfoVo = knowledgeInfoService.queryById(Long.valueOf(kid)); + List<Double> doubleVector; + try { + doubleVector = ollamaAPI.generateEmbeddings(new OllamaEmbeddingsRequestModel(knowledgeInfoVo.getVectorModel(), new Gson().toJson(chunkList))); + } catch (Exception e) { + throw new RuntimeException(e); + } + List<List<Double>> vectorList = new ArrayList<>(); + vectorList.add(doubleVector); + return vectorList; + } + + @Override + public List<Double> singleVectorization(String chunk, String kid) { + List<String> chunkList = new ArrayList<>(); + chunkList.add(chunk); + List<List<Double>> vectorList = batchVectorization(chunkList, kid); + return vectorList.get(0); + } + + public static void main(String[] args) { + OllamaAPI ollamaAPI = new OllamaAPI("http://localhost:11434/"); + List<String> chunkList = Arrays.asList("澶╁緢钃�", "娴峰緢娣�"); + List<Double> doubleVector; + try { + doubleVector = ollamaAPI.generateEmbeddings(new OllamaEmbeddingsRequestModel("quentinz/bge-large-zh-v1.5", new Gson().toJson(chunkList))); + } catch (Exception e) { + throw new RuntimeException(e); + } + System.out.println("=== " + doubleVector + " 1==="); + } +} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorizer/OpenAiVectorization.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorizer/OpenAiVectorization.java new file mode 100644 index 0000000..6365a77 --- /dev/null +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorizer/OpenAiVectorization.java @@ -0,0 +1,110 @@ +package org.ruoyi.chat.service.knowledge.vectorizer; + +import jakarta.annotation.Resource; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.ruoyi.common.chat.config.ChatConfig; +import org.ruoyi.common.chat.entity.embeddings.Embedding; +import org.ruoyi.common.chat.entity.embeddings.EmbeddingResponse; +import org.ruoyi.common.chat.openai.OpenAiStreamClient; +import org.ruoyi.domain.vo.KnowledgeInfoVo; +import org.ruoyi.service.IKnowledgeInfoService; +import org.ruoyi.service.VectorizationService; +import org.ruoyi.system.domain.SysModel; +import org.ruoyi.system.service.ISysModelService; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +@Component +@Slf4j +@RequiredArgsConstructor +public class OpenAiVectorization implements VectorizationService { + + @Lazy + @Resource + private IKnowledgeInfoService knowledgeInfoService; + + @Lazy + @Resource + private ISysModelService sysModelService; + + @Getter + private OpenAiStreamClient openAiStreamClient; + + private final ChatConfig chatConfig; + + @Override + public List<List<Double>> batchVectorization(List<String> chunkList, String kid) { + List<List<Double>> vectorList; + // 鑾峰彇鐭ヨ瘑搴撲俊鎭� + KnowledgeInfoVo knowledgeInfoVo = knowledgeInfoService.queryById(Long.valueOf(kid)); + if(knowledgeInfoVo == null){ + log.warn("鐭ヨ瘑搴撲笉瀛樺湪:璇锋煡妫�ID {}",kid); + vectorList=new ArrayList<>(); + vectorList.add(new ArrayList<>()); + return vectorList; + } + SysModel sysModel = sysModelService.selectModelByName(knowledgeInfoVo.getVectorModel()); + String apiHost= sysModel.getApiHost(); + String apiKey= sysModel.getApiKey(); + openAiStreamClient = chatConfig.createOpenAiStreamClient(apiHost,apiKey); + + Embedding embedding = buildEmbedding(chunkList, knowledgeInfoVo); + EmbeddingResponse embeddings = openAiStreamClient.embeddings(embedding); + + // 澶勭悊 OpenAI 杩斿洖鐨勫祵鍏ユ暟鎹� + vectorList = processOpenAiEmbeddings(embeddings); + + return vectorList; + } + + /** + * 鏋勫缓 Embedding 瀵硅薄 + */ + private Embedding buildEmbedding(List<String> chunkList, KnowledgeInfoVo knowledgeInfoVo) { + return Embedding.builder() + .input(chunkList) + .model(knowledgeInfoVo.getVectorModel()) + .build(); + } + + /** + * 澶勭悊 OpenAI 杩斿洖鐨勫祵鍏ユ暟鎹� + */ + private List<List<Double>> processOpenAiEmbeddings(EmbeddingResponse embeddings) { + List<List<Double>> vectorList = new ArrayList<>(); + + embeddings.getData().forEach(data -> { + List<BigDecimal> vector = data.getEmbedding(); + List<Double> doubleVector = convertToDoubleList(vector); + vectorList.add(doubleVector); + }); + + return vectorList; + } + + /** + * 灏� BigDecimal 杞崲涓� Double 鍒楄〃 + */ + private List<Double> convertToDoubleList(List<BigDecimal> vector) { + return vector.stream() + .map(BigDecimal::doubleValue) + .collect(Collectors.toList()); + } + + + @Override + public List<Double> singleVectorization(String chunk, String kid) { + List<String> chunkList = new ArrayList<>(); + chunkList.add(chunk); + List<List<Double>> vectorList = batchVectorization(chunkList, kid); + return vectorList.get(0); + } + +} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorizer/VectorizationFactory.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorizer/VectorizationFactory.java new file mode 100644 index 0000000..18a0b9a --- /dev/null +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorizer/VectorizationFactory.java @@ -0,0 +1,47 @@ +package org.ruoyi.chat.service.knowledge.vectorizer; + +import cn.hutool.core.util.StrUtil; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; + +import org.ruoyi.domain.vo.KnowledgeInfoVo; +import org.ruoyi.service.IKnowledgeInfoService; +import org.ruoyi.service.VectorizationService; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +/** + * 鏂囨湰鍚戦噺鍖� + * @author huangkh + */ +@Component +@Slf4j +public class VectorizationFactory { + + private final OpenAiVectorization openAiVectorization; + + private final BgeLargeVectorization bgeLargeVectorization; + + @Lazy + @Resource + private IKnowledgeInfoService knowledgeInfoService; + + public VectorizationFactory(OpenAiVectorization openAiVectorization, BgeLargeVectorization bgeLargeVectorization) { + this.openAiVectorization = openAiVectorization; + this.bgeLargeVectorization = bgeLargeVectorization; + } + + public VectorizationService getEmbedding(String kid){ + String vectorModel = "text-embedding-3-small"; + if (StrUtil.isNotEmpty(kid)) { + KnowledgeInfoVo knowledgeInfoVo = knowledgeInfoService.queryById(Long.valueOf(kid)); + if (knowledgeInfoVo != null && StrUtil.isNotEmpty(knowledgeInfoVo.getVectorModel())) { + vectorModel = knowledgeInfoVo.getVectorModel(); + } + } + return switch (vectorModel) { + case "quentinz/bge-large-zh-v1.5" -> bgeLargeVectorization; + default -> openAiVectorization; + }; + } +} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorstore/MilvusVectorStore.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorstore/MilvusVectorStore.java new file mode 100644 index 0000000..8a271aa --- /dev/null +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorstore/MilvusVectorStore.java @@ -0,0 +1,397 @@ +package org.ruoyi.chat.service.knowledge.vectorstore; + +import io.milvus.client.MilvusServiceClient; +import io.milvus.grpc.DataType; +import io.milvus.grpc.DescribeIndexResponse; +import io.milvus.grpc.MutationResult; +import io.milvus.grpc.SearchResults; +import io.milvus.param.*; +import io.milvus.param.collection.*; +import io.milvus.param.dml.DeleteParam; +import io.milvus.param.dml.InsertParam; +import io.milvus.param.dml.SearchParam; +import io.milvus.param.index.CreateIndexParam; +import io.milvus.param.index.DescribeIndexParam; +import io.milvus.param.partition.CreatePartitionParam; +import io.milvus.response.QueryResultsWrapper; +import io.milvus.response.SearchResultsWrapper; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.ruoyi.common.core.service.ConfigService; + +import org.ruoyi.service.VectorStoreService; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@Service +@Slf4j +public class MilvusVectorStore implements VectorStoreService { + + private volatile Integer dimension; + private volatile String collectionName; + private MilvusServiceClient milvusServiceClient; + + @Resource + private ConfigService configService; + + @PostConstruct + public void loadConfig() { + this.dimension = Integer.parseInt(configService.getConfigValue("milvus", "dimension")); + this.collectionName = configService.getConfigValue("milvus", "collection"); + } + + @PostConstruct + public void init() { + String milvusHost = configService.getConfigValue("milvus", "host"); + String milvausPort = configService.getConfigValue("milvus", "port"); + milvusServiceClient = new MilvusServiceClient( + ConnectParam.newBuilder() + .withHost(milvusHost) + .withPort(Integer.parseInt(milvausPort)) + .withDatabaseName("default") + .build() + ); + } + + private void createSchema(String kid) { + FieldType primaryField = FieldType.newBuilder() + .withName("row_id") + .withDataType(DataType.Int64) + .withPrimaryKey(true) + .withAutoID(true) + .build(); + FieldType contentField = FieldType.newBuilder() + .withName("content") + .withDataType(DataType.VarChar) + .withMaxLength(1000) + .build(); + FieldType kidField = FieldType.newBuilder() + .withName("kid") + .withDataType(DataType.VarChar) + .withMaxLength(20) + .build(); + FieldType docIdField = FieldType.newBuilder() + .withName("docId") + .withDataType(DataType.VarChar) + .withMaxLength(20) + .build(); + FieldType fidField = FieldType.newBuilder() + .withName("fid") + .withDataType(DataType.VarChar) + .withMaxLength(20) + .build(); + FieldType vectorField = FieldType.newBuilder() + .withName("fv") + .withDataType(DataType.FloatVector) + .withDimension(dimension) + .build(); + CreateCollectionParam createCollectionReq = CreateCollectionParam.newBuilder() + .withCollectionName(collectionName + kid) + .withDescription("local knowledge") + .addFieldType(primaryField) + .addFieldType(contentField) + .addFieldType(kidField) + .addFieldType(docIdField) + .addFieldType(fidField) + .addFieldType(vectorField) + .build(); + milvusServiceClient.createCollection(createCollectionReq); + + // 鍒涘缓鍚戦噺鐨勭储寮� + IndexType INDEX_TYPE = IndexType.IVF_FLAT; + String INDEX_PARAM = "{\"nlist\":1024}"; + milvusServiceClient.createIndex( + CreateIndexParam.newBuilder() + .withCollectionName(collectionName + kid) + .withFieldName("fv") + .withIndexType(INDEX_TYPE) + .withMetricType(MetricType.IP) + .withExtraParam(INDEX_PARAM) + .withSyncMode(Boolean.FALSE) + .build() + ); + + } + + @Override + public void newSchema(String kid) { + createSchema(kid); + } + + @Override + public void removeByKidAndFid(String kid, String fid) { + milvusServiceClient.delete( + DeleteParam.newBuilder() + .withCollectionName(collectionName + kid) + .withExpr("fid == " + fid) + .build() + ); + } + + @Override + public void storeEmbeddings(List<String> chunkList, List<List<Double>> vectorList, String kid, String docId, List<String> fidList) { + String fullCollectionName = collectionName + kid; + + // 妫�鏌ラ泦鍚堟槸鍚﹀瓨鍦� + HasCollectionParam hasCollectionParam = HasCollectionParam.newBuilder() + .withCollectionName(fullCollectionName) + .build(); + R<Boolean> booleanR = milvusServiceClient.hasCollection(hasCollectionParam); + + if (booleanR.getStatus() == R.Status.Success.getCode()) { + boolean collectionExists = booleanR.getData().booleanValue(); + if (!collectionExists) { + // 闆嗗悎涓嶅瓨鍦紝鍒涘缓闆嗗悎 + List<FieldType> fieldTypes = new ArrayList<>(); + // 鍋囪杩欓噷瀹氫箟 id 瀛楁锛屾牴鎹疄闄呮儏鍐典慨鏀� + FieldType idField = FieldType.newBuilder() + .withName("id") + .withDataType(DataType.Int64) + .withPrimaryKey(true) + .withAutoID(true) + .build(); + fieldTypes.add(idField); + + // 瀹氫箟鍚戦噺瀛楁 + FieldType vectorField = FieldType.newBuilder() + .withName("fv") + .withDataType(DataType.FloatVector) + .withDimension(vectorList.get(0).size()) + .build(); + fieldTypes.add(vectorField); + + // 瀹氫箟鍏朵粬瀛楁 + FieldType contentField = FieldType.newBuilder() + .withName("content") + .withDataType(DataType.VarChar) + .withMaxLength(chunkList.size() * 1024) // 鏍规嵁瀹為檯鎯呭喌淇敼 + .build(); + fieldTypes.add(contentField); + + FieldType kidField = FieldType.newBuilder() + .withName("kid") + .withDataType(DataType.VarChar) + .withMaxLength(256) // 鏍规嵁瀹為檯鎯呭喌淇敼 + .build(); + fieldTypes.add(kidField); + + FieldType docIdField = FieldType.newBuilder() + .withName("docId") + .withDataType(DataType.VarChar) + .withMaxLength(256) // 鏍规嵁瀹為檯鎯呭喌淇敼 + .build(); + fieldTypes.add(docIdField); + + FieldType fidField = FieldType.newBuilder() + .withName("fid") + .withDataType(DataType.VarChar) + .withMaxLength(256) // 鏍规嵁瀹為檯鎯呭喌淇敼 + .build(); + fieldTypes.add(fidField); + + CreateCollectionParam createCollectionParam = CreateCollectionParam.newBuilder() + .withCollectionName(fullCollectionName) + .withFieldTypes(fieldTypes) + .build(); + + R<RpcStatus> collection = milvusServiceClient.createCollection(createCollectionParam); + if (collection.getStatus() == R.Status.Success.getCode()) { + System.out.println("闆嗗悎 " + fullCollectionName + " 鍒涘缓鎴愬姛"); + + // 鍒涘缓绱㈠紩 + CreateIndexParam createIndexParam = CreateIndexParam.newBuilder() + .withCollectionName(fullCollectionName) + .withFieldName("fv") // 鍚戦噺瀛楁鍚� + .withIndexType(IndexType.IVF_FLAT) // 绱㈠紩绫诲瀷 + .withMetricType(MetricType.IP) + .withExtraParam("{\"nlist\":1024}") // 绱㈠紩鍙傛暟 + .build(); + R<RpcStatus> indexResponse = milvusServiceClient.createIndex(createIndexParam); + if (indexResponse.getStatus() == R.Status.Success.getCode()) { + System.out.println("绱㈠紩鍒涘缓鎴愬姛"); + } else { + System.err.println("绱㈠紩鍒涘缓澶辫触: " + indexResponse.getMessage()); + return; + } + } else { + System.err.println("闆嗗悎鍒涘缓澶辫触: " + collection.getMessage()); + return; + } + } + } else { + System.err.println("妫�鏌ラ泦鍚堟槸鍚﹀瓨鍦ㄦ椂鍑洪敊: " + booleanR.getMessage()); + return; + } + + if (StringUtils.isNotBlank(docId)) { + milvusServiceClient.createPartition( + CreatePartitionParam.newBuilder() + .withCollectionName(fullCollectionName) + .withPartitionName(docId) + .build() + ); + } + + List<List<Float>> vectorFloatList = new ArrayList<>(); + List<String> kidList = new ArrayList<>(); + List<String> docIdList = new ArrayList<>(); + for (int i = 0; i < Math.min(chunkList.size(), vectorList.size()); i++) { + List<Double> vector = vectorList.get(i); + List<Float> vfList = new ArrayList<>(); + for (int j = 0; j < vector.size(); j++) { + Double value = vector.get(j); + vfList.add(value.floatValue()); + } + vectorFloatList.add(vfList); + kidList.add(kid); + docIdList.add(docId); + } + List<InsertParam.Field> fields = new ArrayList<>(); + fields.add(new InsertParam.Field("content", chunkList)); + fields.add(new InsertParam.Field("kid", kidList)); + fields.add(new InsertParam.Field("docId", docIdList)); + fields.add(new InsertParam.Field("fid", fidList)); + fields.add(new InsertParam.Field("fv", vectorFloatList)); + + InsertParam insertParam = InsertParam.newBuilder() + .withCollectionName(fullCollectionName) + .withPartitionName(docId) + .withFields(fields) + .build(); + System.out.println("========================="); + + R<MutationResult> insert = milvusServiceClient.insert(insertParam); + if (insert.getStatus() == R.Status.Success.getCode()) { + System.out.println("鎻掑叆鎴愬姛锛屾彃鍏ョ殑琛屾暟: " + insert.getData().getInsertCnt()); + } else { + System.err.println("鎻掑叆澶辫触: " + insert.getMessage()); + } + System.out.println("========================="); + // milvus鍦ㄥ皢鏁版嵁瑁呰浇鍒板唴瀛樺悗鎵嶈兘杩涜鍚戦噺璁$畻. + LoadCollectionParam loadCollectionParam = LoadCollectionParam.newBuilder() + .withCollectionName(fullCollectionName) + .build(); + R<RpcStatus> loadResponse = milvusServiceClient.loadCollection(loadCollectionParam); + if (loadResponse.getStatus() != R.Status.Success.getCode()) { + System.err.println("鍔犺浇闆嗗悎 " + fullCollectionName + " 鍒板唴瀛樻椂鍑洪敊锛�" + loadResponse.getMessage()); + } +// milvusServiceClient.loadCollection(LoadCollectionParam.newBuilder().withCollectionName(fullCollectionName).build()); + } + + + @Override + public void removeByDocId(String kid, String docId) { + milvusServiceClient.delete( + DeleteParam.newBuilder() + .withCollectionName(collectionName + kid) + .withExpr("1 == 1") + .withPartitionName(docId) + .build() + ); + } + + @Override + public void removeByKid(String kid) { + milvusServiceClient.dropCollection( + DropCollectionParam.newBuilder() + .withCollectionName(collectionName + kid) + .build() + ); + } + + @Override + public List<String> nearest(List<Double> queryVector, String kid) { + String fullCollectionName = collectionName + kid; + + HasCollectionParam hasCollectionParam = HasCollectionParam.newBuilder() + .withCollectionName(fullCollectionName) + .build(); + + R<Boolean> booleanR = milvusServiceClient.hasCollection(hasCollectionParam); + if (booleanR.getStatus() != R.Status.Success.getCode() || !booleanR.getData().booleanValue()) { + System.err.println("闆嗗悎 " + fullCollectionName + " 涓嶅瓨鍦ㄦ垨妫�鏌ラ泦鍚堝瓨鍦ㄦ�ф椂鍑洪敊銆�"); + return new ArrayList<>(); + } + + DescribeIndexParam describeIndexParam = DescribeIndexParam.newBuilder().withCollectionName(fullCollectionName).build(); + + R<DescribeIndexResponse> describeIndexResponseR = milvusServiceClient.describeIndex(describeIndexParam); + + if (describeIndexResponseR.getStatus() == R.Status.Success.getCode()) { + System.out.println("绱㈠紩淇℃伅: " + describeIndexResponseR.getData().getIndexDescriptionsCount()); + } else { + System.err.println("鑾峰彇绱㈠紩澶辫触: " + describeIndexResponseR.getMessage()); + } + +// // 鍔犺浇闆嗗悎鍒板唴瀛� +// LoadCollectionParam loadCollectionParam = LoadCollectionParam.newBuilder() +// .withCollectionName(fullCollectionName) +// .build(); +// R<RpcStatus> loadResponse = milvusServiceClient.loadCollection(loadCollectionParam); +// if (loadResponse.getStatus() != R.Status.Success.getCode()) { +// System.err.println("鍔犺浇闆嗗悎 " + fullCollectionName + " 鍒板唴瀛樻椂鍑洪敊锛�" + loadResponse.getMessage()); +// return new ArrayList<>(); +// } + + List<String> search_output_fields = Arrays.asList("content", "fv"); + List<Float> fv = new ArrayList<>(); + for (int i = 0; i < queryVector.size(); i++) { + fv.add(queryVector.get(i).floatValue()); + } + List<List<Float>> vectors = new ArrayList<>(); + vectors.add(fv); + String search_param = "{\"nprobe\":10, \"offset\":0}"; + SearchParam searchParam = SearchParam.newBuilder() + .withCollectionName(collectionName + kid) + .withMetricType(MetricType.IP) + .withOutFields(search_output_fields) + .withTopK(10) + .withVectors(vectors) + .withVectorFieldName("fv") + .withParams(search_param) + .build(); + System.out.println("SearchParam: " + searchParam.toString()); + R<SearchResults> respSearch = milvusServiceClient.search(searchParam); + if (respSearch.getStatus() == R.Status.Success.getCode()) { + SearchResults searchResults = respSearch.getData(); + if (searchResults != null) { + System.out.println(searchResults.getResults()); + SearchResultsWrapper wrapperSearch = new SearchResultsWrapper(searchResults.getResults()); + List<QueryResultsWrapper.RowRecord> rowRecords = wrapperSearch.getRowRecords(); + + List<String> resultList = new ArrayList<>(); + if (rowRecords != null && !rowRecords.isEmpty()) { + for (QueryResultsWrapper.RowRecord rowRecord : rowRecords) { + String content = rowRecord.get("content").toString(); + resultList.add(content); + } + } + return resultList; + } else { + System.err.println("鎼滅储缁撴灉涓虹┖"); + } + } else { + System.err.println("鎼滅储鎿嶄綔澶辫触: " + respSearch.getMessage()); + } + return new ArrayList<>(); + + } + + /** + * milvus 涓嶆敮鎸侀�氳繃鏂囨湰妫�绱㈢浉浼兼�� + * + * @param query + * @param kid + * @return + */ + @Override + public List<String> nearest(String query, String kid) { + return null; + } + +} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorstore/VectorStoreFactory.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorstore/VectorStoreFactory.java new file mode 100644 index 0000000..10ce84d --- /dev/null +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorstore/VectorStoreFactory.java @@ -0,0 +1,42 @@ +package org.ruoyi.chat.service.knowledge.vectorstore; + +import cn.hutool.core.util.StrUtil; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.ruoyi.domain.vo.KnowledgeInfoVo; +import org.ruoyi.mapper.KnowledgeInfoMapper; +import org.ruoyi.service.VectorStoreService; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class VectorStoreFactory { + + private final WeaviateVectorStore weaviateVectorStore; + + private final MilvusVectorStore milvusVectorStore; + + @Resource + private KnowledgeInfoMapper knowledgeInfoMapper; + + public VectorStoreFactory(WeaviateVectorStore weaviateVectorStore, MilvusVectorStore milvusVectorStore) { + this.weaviateVectorStore = weaviateVectorStore; + this.milvusVectorStore = milvusVectorStore; + } + + public VectorStoreService getVectorStore(String kid){ + String vectorModel = "weaviate"; + if (StrUtil.isNotEmpty(kid)) { + KnowledgeInfoVo knowledgeInfoVo = knowledgeInfoMapper.selectVoById(Long.valueOf(kid)); + if (knowledgeInfoVo != null && StrUtil.isNotEmpty(knowledgeInfoVo.getVector())) { + vectorModel = knowledgeInfoVo.getVector(); + } + } + if ("weaviate".equals(vectorModel)){ + return weaviateVectorStore; + }else if ("milvus".equals(vectorModel)){ + return milvusVectorStore; + } + return null; + } +} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorstore/WeaviateVectorStore.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorstore/WeaviateVectorStore.java new file mode 100644 index 0000000..147fc50 --- /dev/null +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/vectorstore/WeaviateVectorStore.java @@ -0,0 +1,402 @@ +package org.ruoyi.chat.service.knowledge.vectorstore; + +import cn.hutool.core.lang.UUID; +import cn.hutool.json.JSONObject; +import com.google.gson.internal.LinkedTreeMap; +import io.weaviate.client.Config; +import io.weaviate.client.WeaviateClient; +import io.weaviate.client.base.Result; +import io.weaviate.client.v1.data.model.WeaviateObject; +import io.weaviate.client.v1.data.replication.model.ConsistencyLevel; +import io.weaviate.client.v1.filters.Operator; +import io.weaviate.client.v1.filters.WhereFilter; +import io.weaviate.client.v1.graphql.model.GraphQLResponse; +import io.weaviate.client.v1.graphql.query.argument.NearTextArgument; +import io.weaviate.client.v1.graphql.query.argument.NearVectorArgument; +import io.weaviate.client.v1.graphql.query.fields.Field; +import io.weaviate.client.v1.misc.model.Meta; +import io.weaviate.client.v1.misc.model.ReplicationConfig; +import io.weaviate.client.v1.misc.model.ShardingConfig; +import io.weaviate.client.v1.misc.model.VectorIndexConfig; +import io.weaviate.client.v1.schema.model.DataType; +import io.weaviate.client.v1.schema.model.Property; +import io.weaviate.client.v1.schema.model.Schema; +import io.weaviate.client.v1.schema.model.WeaviateClass; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.ruoyi.common.core.service.ConfigService; +import org.ruoyi.domain.vo.KnowledgeInfoVo; +import org.ruoyi.service.IKnowledgeInfoService; +import org.ruoyi.service.VectorStoreService; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +@Slf4j +public class WeaviateVectorStore implements VectorStoreService { + + private volatile String protocol; + private volatile String host; + private volatile String className; + + @Lazy + @Resource + private IKnowledgeInfoService knowledgeInfoService; + + @Lazy + @Resource + private ConfigService configService; + + @PostConstruct + public void loadConfig() { + this.protocol = configService.getConfigValue("weaviate", "protocol"); + this.host = configService.getConfigValue("weaviate", "host"); + this.className = configService.getConfigValue("weaviate", "classname"); + } + + public WeaviateClient getClient() { + Config config = new Config(protocol, host); + WeaviateClient client = new WeaviateClient(config); + return client; + } + + public Result<Meta> getMeta() { + WeaviateClient client = getClient(); + Result<Meta> meta = client.misc().metaGetter().run(); + if (meta.getError() == null) { + System.out.printf("meta.hostname: %s\n", meta.getResult().getHostname()); + System.out.printf("meta.version: %s\n", meta.getResult().getVersion()); + System.out.printf("meta.modules: %s\n", meta.getResult().getModules()); + } else { + System.out.printf("Error: %s\n", meta.getError().getMessages()); + } + return meta; + } + + public Result<Schema> getSchemas() { + WeaviateClient client = getClient(); + Result<Schema> result = client.schema().getter().run(); + if (result.hasErrors()) { + System.out.println(result.getError()); + } else { + System.out.println(result.getResult()); + } + return result; + } + + + public Result<Boolean> createSchema(String kid) { + WeaviateClient client = getClient(); + + VectorIndexConfig vectorIndexConfig = VectorIndexConfig.builder() + .distance("cosine") + .cleanupIntervalSeconds(300) + .efConstruction(128) + .maxConnections(64) + .vectorCacheMaxObjects(500000L) + .ef(-1) + .skip(false) + .dynamicEfFactor(8) + .dynamicEfMax(500) + .dynamicEfMin(100) + .flatSearchCutoff(40000) + .build(); + + ShardingConfig shardingConfig = ShardingConfig.builder() + .desiredCount(3) + .desiredVirtualCount(128) + .function("murmur3") + .key("_id") + .strategy("hash") + .virtualPerPhysical(128) + .build(); + + ReplicationConfig replicationConfig = ReplicationConfig.builder() + .factor(1) + .build(); + + JSONObject classModuleConfigValue = new JSONObject(); + classModuleConfigValue.put("vectorizeClassName", false); + JSONObject classModuleConfig = new JSONObject(); + classModuleConfig.put("text2vec-transformers", classModuleConfigValue); + + JSONObject propertyModuleConfigValueSkipTrue = new JSONObject(); + propertyModuleConfigValueSkipTrue.put("vectorizePropertyName", false); + propertyModuleConfigValueSkipTrue.put("skip", true); + JSONObject propertyModuleConfigSkipTrue = new JSONObject(); + propertyModuleConfigSkipTrue.put("text2vec-transformers", propertyModuleConfigValueSkipTrue); + + JSONObject propertyModuleConfigValueSkipFalse = new JSONObject(); + propertyModuleConfigValueSkipFalse.put("vectorizePropertyName", false); + propertyModuleConfigValueSkipFalse.put("skip", false); + JSONObject propertyModuleConfigSkipFalse = new JSONObject(); + propertyModuleConfigSkipFalse.put("text2vec-transformers", propertyModuleConfigValueSkipFalse); + + WeaviateClass clazz = WeaviateClass.builder() + .className(className + kid) + .description("local knowledge") + .vectorIndexType("hnsw") + .vectorizer("text2vec-transformers") + .shardingConfig(shardingConfig) + .vectorIndexConfig(vectorIndexConfig) + .replicationConfig(replicationConfig) + .moduleConfig(classModuleConfig) + .properties(new ArrayList() { + { + add(Property.builder() + .dataType(new ArrayList() { + { + add(DataType.TEXT); + } + }) + .name("content") + .description("The content of the local knowledge,for search") + .moduleConfig(propertyModuleConfigSkipFalse) + .build()); + add(Property.builder() + .dataType(new ArrayList() { + { + add(DataType.TEXT); + } + }) + .name("kid") + .description("The knowledge id of the local knowledge,for search") + .moduleConfig(propertyModuleConfigSkipTrue) + .build()); + add(Property.builder() + .dataType(new ArrayList() { + { + add(DataType.TEXT); + } + }) + .name("docId") + .description("The doc id of the local knowledge,for search") + .moduleConfig(propertyModuleConfigSkipTrue) + .build()); + add(Property.builder() + .dataType(new ArrayList() { + { + add(DataType.TEXT); + } + }) + .name("fid") + .description("The fragment id of the local knowledge,for search") + .moduleConfig(propertyModuleConfigSkipTrue) + .build()); + add(Property.builder() + .dataType(new ArrayList() { + { + add(DataType.TEXT); + } + }) + .name("uuid") + .description("The uuid id of the local knowledge fragment(same with id properties),for search") + .moduleConfig(propertyModuleConfigSkipTrue) + .build()); + } }) + .build(); + + Result<Boolean> result = client.schema().classCreator().withClass(clazz).run(); + if (result.hasErrors()) { + System.out.println(result.getError()); + } + System.out.println(result.getResult()); + return result; + } + + @Override + public void newSchema(String kid) { + createSchema(kid); + } + + @Override + public void removeByKidAndFid(String kid, String fid) { + List<String> resultList = new ArrayList<>(); + WeaviateClient client = getClient(); + Field fieldId = Field.builder().name("uuid").build(); + WhereFilter where = WhereFilter.builder() + .path(new String[]{"fid"}) + .operator(Operator.Equal) + .valueString(fid) + .build(); + Result<GraphQLResponse> result = client.graphQL().get() + .withClassName(className + kid) + .withFields(fieldId) + .withWhere(where) + .run(); + LinkedTreeMap<String, Object> t = (LinkedTreeMap<String, Object>) result.getResult().getData(); + LinkedTreeMap<String, ArrayList<LinkedTreeMap>> l = (LinkedTreeMap<String, ArrayList<LinkedTreeMap>>) t.get("Get"); + ArrayList<LinkedTreeMap> m = l.get(className + kid); + for (LinkedTreeMap linkedTreeMap : m) { + String uuid = linkedTreeMap.get("uuid").toString(); + resultList.add(uuid); + } + for (String uuid : resultList) { + Result<Boolean> deleteResult = client.data().deleter() + .withID(uuid) + .withClassName(className + kid) + .withConsistencyLevel(ConsistencyLevel.ALL) // default QUORUM + .run(); + } + } + + @Override + public void storeEmbeddings(List<String> chunkList, List<List<Double>> vectorList, String kid, String docId, List<String> fidList) { + WeaviateClient client = getClient(); + + for (int i = 0; i < Math.min(chunkList.size(), vectorList.size()); i++) { + List<Double> vector = vectorList.get(i); + Float[] vf = vector.stream().map(Double::floatValue).toArray(Float[]::new); + + Map<String, Object> dataSchema = new HashMap<>(); + dataSchema.put("content", chunkList.get(i)); + dataSchema.put("kid", kid); + dataSchema.put("docId", docId); + dataSchema.put("fid", fidList.get(i)); + String uuid = UUID.randomUUID().toString(); + dataSchema.put("uuid", uuid); + + Result<WeaviateObject> result = client.data().creator() + .withClassName(className + kid) + .withID(uuid) + .withVector(vf) + .withProperties(dataSchema) + .run(); + } + + } + + @Override + public void removeByDocId(String kid, String docId) { + List<String> resultList = new ArrayList<>(); + WeaviateClient client = getClient(); + Field fieldId = Field.builder().name("uuid").build(); + WhereFilter where = WhereFilter.builder() + .path(new String[]{"docId"}) + .operator(Operator.Equal) + .valueString(docId) + .build(); + Result<GraphQLResponse> result = client.graphQL().get() + .withClassName(className + kid) + .withFields(fieldId) + .withWhere(where) + .run(); + LinkedTreeMap<String, Object> t = (LinkedTreeMap<String, Object>) result.getResult().getData(); + LinkedTreeMap<String, ArrayList<LinkedTreeMap>> l = (LinkedTreeMap<String, ArrayList<LinkedTreeMap>>) t.get("Get"); + ArrayList<LinkedTreeMap> m = l.get(className + kid); + for (LinkedTreeMap linkedTreeMap : m) { + String uuid = linkedTreeMap.get("uuid").toString(); + resultList.add(uuid); + } + for (String uuid : resultList) { + Result<Boolean> deleteResult = client.data().deleter() + .withID(uuid) + .withClassName(className + kid) + .withConsistencyLevel(ConsistencyLevel.ALL) // default QUORUM + .run(); + } + } + + @Override + public void removeByKid(String kid) { + WeaviateClient client = getClient(); + Result<Boolean> result = client.schema().classDeleter().withClassName(className + kid).run(); + if (result.hasErrors()) { + System.out.println("鍒犻櫎schema澶辫触" + result.getError()); + } else { + System.out.println("鍒犻櫎schema鎴愬姛" + result.getResult()); + } + log.info("drop schema by kid, result = {}", result); + } + + @Override + public List<String> nearest(List<Double> queryVector, String kid) { + if (StringUtils.isBlank(kid)) { + return new ArrayList<String>(); + } + List<String> resultList = new ArrayList<>(); + Float[] vf = new Float[queryVector.size()]; + for (int j = 0; j < queryVector.size(); j++) { + Double value = queryVector.get(j); + vf[j] = value.floatValue(); + } + WeaviateClient client = getClient(); + Field contentField = Field.builder().name("content").build(); + Field _additional = Field.builder() + .name("_additional") + .fields(new Field[]{ + Field.builder().name("distance").build() + }).build(); + NearVectorArgument nearVector = NearVectorArgument.builder() + .vector(vf) + .distance(1.6f) // certainty = 1f - distance /2f + .build(); + KnowledgeInfoVo knowledgeInfoVo = knowledgeInfoService.queryById(Long.valueOf(kid)); + Result<GraphQLResponse> result = client.graphQL().get() + .withClassName(className + kid) + .withFields(contentField, _additional) + .withNearVector(nearVector) + .withLimit(knowledgeInfoVo.getRetrieveLimit()) + .run(); + LinkedTreeMap<String, Object> t = (LinkedTreeMap<String, Object>) result.getResult().getData(); + LinkedTreeMap<String, ArrayList<LinkedTreeMap>> l = (LinkedTreeMap<String, ArrayList<LinkedTreeMap>>) t.get("Get"); + ArrayList<LinkedTreeMap> m = l.get(className + kid); + for (LinkedTreeMap linkedTreeMap : m) { + String content = linkedTreeMap.get("content").toString(); + resultList.add(content); + } + return resultList; + } + + @Override + public List<String> nearest(String query, String kid) { + if (StringUtils.isBlank(kid)) { + return new ArrayList<String>(); + } + List<String> resultList = new ArrayList<>(); + WeaviateClient client = getClient(); + Field contentField = Field.builder().name("content").build(); + Field _additional = Field.builder() + .name("_additional") + .fields(new Field[]{ + Field.builder().name("distance").build() + }).build(); + NearTextArgument nearText = client.graphQL().arguments().nearTextArgBuilder() + .concepts(new String[]{query}) + .distance(1.6f) // certainty = 1f - distance /2f + .build(); + KnowledgeInfoVo knowledgeInfoVo = knowledgeInfoService.queryById(Long.valueOf(kid)); + Result<GraphQLResponse> result = client.graphQL().get() + .withClassName(className + kid) + .withFields(contentField, _additional) + .withNearText(nearText) + .withLimit(knowledgeInfoVo.getRetrieveLimit()) + .run(); + LinkedTreeMap<String, Object> t = (LinkedTreeMap<String, Object>) result.getResult().getData(); + LinkedTreeMap<String, ArrayList<LinkedTreeMap>> l = (LinkedTreeMap<String, ArrayList<LinkedTreeMap>>) t.get("Get"); + ArrayList<LinkedTreeMap> m = l.get(className + kid); + for (LinkedTreeMap linkedTreeMap : m) { + String content = linkedTreeMap.get("content").toString(); + resultList.add(content); + } + return resultList; + } + + public Result<Boolean> deleteSchema(String kid) { + WeaviateClient client = getClient(); + Result<Boolean> result = client.schema().classDeleter().withClassName(className + kid).run(); + if (result.hasErrors()) { + System.out.println(result.getError()); + } else { + System.out.println(result.getResult()); + } + return result; + } +} diff --git a/ruoyi-modules/ruoyi-device/pom.xml b/ruoyi-modules/ruoyi-device/pom.xml deleted file mode 100644 index ec4cbc4..0000000 --- a/ruoyi-modules/ruoyi-device/pom.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.ruoyi</groupId> - <artifactId>ruoyi-ai</artifactId> - <version>1.0.0</version> - <relativePath>../../pom.xml</relativePath> - </parent> - - <artifactId>ruoyi-device</artifactId> - - <properties> - <maven.compiler.source>17</maven.compiler.source> - <maven.compiler.target>17</maven.compiler.target> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - </properties> - -</project> diff --git a/ruoyi-modules/ruoyi-knowledge/pom.xml b/ruoyi-modules/ruoyi-knowledge/pom.xml deleted file mode 100644 index 46576f8..0000000 --- a/ruoyi-modules/ruoyi-knowledge/pom.xml +++ /dev/null @@ -1,203 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.ruoyi</groupId> - <artifactId>ruoyi-modules</artifactId> - <version>${revision}</version> - <relativePath>../pom.xml</relativePath> - </parent> - - <artifactId>ruoyi-knowledge</artifactId> - - <properties> - <maven.compiler.source>17</maven.compiler.source> - <maven.compiler.target>17</maven.compiler.target> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - </properties> - - <dependencies> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-data-redis</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-freemarker</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-validation</artifactId> - </dependency> - - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-aop</artifactId> - </dependency> - - <dependency> - <groupId>org.webjars</groupId> - <artifactId>webjars-locator-core</artifactId> - </dependency> - <dependency> - <groupId>org.webjars</groupId> - <artifactId>sockjs-client</artifactId> - <version>1.0.2</version> - </dependency> - - <dependency> - <groupId>org.webjars</groupId> - <artifactId>bootstrap</artifactId> - <version>3.3.7</version> - </dependency> - <dependency> - <groupId>org.webjars</groupId> - <artifactId>jquery</artifactId> - <version>3.1.1-1</version> - </dependency> - <dependency> - <groupId>org.mybatis.spring.boot</groupId> - <artifactId>mybatis-spring-boot-starter</artifactId> - <version>3.0.2</version> - </dependency> - <dependency> - <groupId>com.baomidou</groupId> - <artifactId>mybatis-plus-boot-starter</artifactId> - <version>3.5.3</version> - </dependency> - <dependency> - <groupId>cn.hutool</groupId> - <artifactId>hutool-all</artifactId> - <version>5.8.10</version> - </dependency> - <dependency> - <groupId>com.github.xiaoymin</groupId> - <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId> - <version>4.0.0</version> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-devtools</artifactId> - <scope>runtime</scope> - <optional>true</optional> - </dependency> - - - - <dependency> - <groupId>com.mysql</groupId> - <artifactId>mysql-connector-j</artifactId> - <scope>runtime</scope> - </dependency> - <dependency> - <groupId>io.projectreactor.netty</groupId> - <artifactId>reactor-netty-core</artifactId> - <version>1.1.16</version> - </dependency> - <dependency> - <groupId>io.projectreactor.netty</groupId> - <artifactId>reactor-netty-http</artifactId> - <version>1.1.16</version> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-configuration-processor</artifactId> - <optional>true</optional> - </dependency> - <dependency> - <groupId>org.projectlombok</groupId> - <artifactId>lombok</artifactId> - <optional>true</optional> - </dependency> - - <dependency> - <groupId>com.theokanning.openai-gpt3-java</groupId> - <artifactId>api</artifactId> - <version>0.18.0</version> - </dependency> - <dependency> - <groupId>com.theokanning.openai-gpt3-java</groupId> - <artifactId>client</artifactId> - <version>0.18.0</version> - </dependency> - <dependency> - <groupId>com.theokanning.openai-gpt3-java</groupId> - <artifactId>service</artifactId> - <version>0.18.0</version> - </dependency> - <dependency> - <groupId>org.springframework.boot</groupId> - <artifactId>spring-boot-starter-test</artifactId> - <scope>test</scope> - </dependency> - - <!-- 闃块噷JSON瑙f瀽鍣� --> - <dependency> - <groupId>com.alibaba.fastjson2</groupId> - <artifactId>fastjson2</artifactId> - <version>2.0.24</version> - </dependency> - <dependency> - <groupId>com.knuddels</groupId> - <artifactId>jtokkit</artifactId> - <version>0.5.0</version> - </dependency> - <dependency> - <groupId>io.weaviate</groupId> - <artifactId>client</artifactId> - <version>4.0.0</version> <!-- Check latest version --> - </dependency> - <dependency> - <groupId>org.apache.poi</groupId> - <artifactId>poi</artifactId> - <version>3.8</version> - </dependency> - <dependency> - <groupId>org.apache.poi</groupId> - <artifactId>poi-ooxml</artifactId> - <version>3.8</version> - </dependency> - <dependency> - <groupId>org.apache.poi</groupId> - <artifactId>poi-ooxml-schemas</artifactId> - <version>3.8</version> - </dependency> - <dependency> - <groupId>org.apache.pdfbox</groupId> - <artifactId>pdfbox</artifactId> - <version>2.0.27</version> - </dependency> - <dependency> - <groupId>com.squareup.retrofit2</groupId> - <artifactId>converter-jackson</artifactId> - <version>2.9.0</version> - </dependency> - <dependency> - <groupId>io.milvus</groupId> - <artifactId>milvus-sdk-java</artifactId> - <version>2.3.2</version> - </dependency> - <dependency> - <groupId>com.github.pagehelper</groupId> - <artifactId>pagehelper-spring-boot-starter</artifactId> - <version>1.4.6</version> - </dependency> - <dependency> - <groupId>com.belerweb</groupId> - <artifactId>pinyin4j</artifactId> - <version>2.5.1</version> - </dependency> - - - <dependency> - <groupId>org.ruoyi</groupId> - <artifactId>ruoyi-system</artifactId> - </dependency> - - - </dependencies> - - -</project> diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/CodeFileLoader.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/CodeFileLoader.java deleted file mode 100644 index 5a74978..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/CodeFileLoader.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.ruoyi.knowledge.chain.loader; - -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.ruoyi.knowledge.chain.split.TextSplitter; -import org.springframework.stereotype.Component; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.List; - -@Component -@AllArgsConstructor -@Slf4j -public class CodeFileLoader implements ResourceLoader{ - private final TextSplitter textSplitter; - @Override - public String getContent(InputStream inputStream) { - StringBuffer stringBuffer = new StringBuffer(); - try (InputStreamReader reader = new InputStreamReader(inputStream); - BufferedReader bufferedReader = new BufferedReader(reader)){ - String line; - while ((line = bufferedReader.readLine()) != null) { - stringBuffer.append(line).append("\n"); - } - } catch (IOException e) { - e.printStackTrace(); - } - return stringBuffer.toString(); - } - @Override - public List<String> getChunkList(String content, String kid){ - return textSplitter.split(content, kid); - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/CsvFileLoader.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/CsvFileLoader.java deleted file mode 100644 index cec04fe..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/CsvFileLoader.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.ruoyi.knowledge.chain.loader; - -import java.io.InputStream; -import java.util.List; - -public class CsvFileLoader implements ResourceLoader{ - @Override - public String getContent(InputStream inputStream) { - return null; - } - - @Override - public List<String> getChunkList(String content, String kid) { - return null; - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/FolderLoader.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/FolderLoader.java deleted file mode 100644 index 1bbbc7c..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/FolderLoader.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.ruoyi.knowledge.chain.loader; - -import java.io.InputStream; -import java.util.List; - -public class FolderLoader implements ResourceLoader{ - @Override - public String getContent(InputStream inputStream) { - return null; - } - - @Override - public List<String> getChunkList(String content, String kid) { - return null; - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/GithubLoader.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/GithubLoader.java deleted file mode 100644 index dd6b449..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/GithubLoader.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.ruoyi.knowledge.chain.loader; - -import java.io.InputStream; -import java.util.List; - -public class GithubLoader implements ResourceLoader{ - @Override - public String getContent(InputStream inputStream) { - return null; - } - - @Override - public List<String> getChunkList(String content, String kid) { - return null; - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/JsonFileLoader.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/JsonFileLoader.java deleted file mode 100644 index 5c69389..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/JsonFileLoader.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.ruoyi.knowledge.chain.loader; - -import java.io.InputStream; -import java.util.List; - -public class JsonFileLoader implements ResourceLoader{ - @Override - public String getContent(InputStream inputStream) { - return null; - } - - @Override - public List<String> getChunkList(String content, String kid) { - return null; - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/MarkDownFileLoader.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/MarkDownFileLoader.java deleted file mode 100644 index 24d43ff..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/MarkDownFileLoader.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.ruoyi.knowledge.chain.loader; - -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.ruoyi.knowledge.chain.split.TextSplitter; -import org.springframework.stereotype.Component; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.List; - -@Component -@AllArgsConstructor -@Slf4j -public class MarkDownFileLoader implements ResourceLoader{ - private final TextSplitter textSplitter; - @Override - public String getContent(InputStream inputStream) { - StringBuffer stringBuffer = new StringBuffer(); - try (InputStreamReader reader = new InputStreamReader(inputStream); - BufferedReader bufferedReader = new BufferedReader(reader)){ - String line; - while ((line = bufferedReader.readLine()) != null) { - stringBuffer.append(line).append("\n"); - } - } catch (IOException e) { - e.printStackTrace(); - } - return stringBuffer.toString(); - } - @Override - public List<String> getChunkList(String content, String kid){ - return textSplitter.split(content, kid); - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/PdfFileLoader.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/PdfFileLoader.java deleted file mode 100644 index 0acf355..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/PdfFileLoader.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.ruoyi.knowledge.chain.loader; - -import lombok.AllArgsConstructor; -import org.apache.pdfbox.pdmodel.PDDocument; -import org.apache.pdfbox.text.PDFTextStripper; -import org.ruoyi.knowledge.chain.split.TextSplitter; -import org.springframework.stereotype.Component; - -import java.io.IOException; -import java.io.InputStream; -import java.util.List; - -@Component -@AllArgsConstructor -public class PdfFileLoader implements ResourceLoader{ - private final TextSplitter characterTextSplitter; - @Override - public String getContent(InputStream inputStream) { - PDDocument document = null; - try { - document = PDDocument.load(inputStream); - PDFTextStripper textStripper = new PDFTextStripper(); - String content = textStripper.getText(document); - return content; - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - @Override - public List<String> getChunkList(String content, String kid) { - return characterTextSplitter.split(content, kid); - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/ResourceLoader.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/ResourceLoader.java deleted file mode 100644 index 9ef4b11..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/ResourceLoader.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.ruoyi.knowledge.chain.loader; - -import java.io.InputStream; -import java.util.List; - -/** - * 璧勬簮杞藉叆 - */ -public interface ResourceLoader { - - String getContent(InputStream inputStream); - - List<String> getChunkList(String content, String kid); -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/ResourceLoaderFactory.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/ResourceLoaderFactory.java deleted file mode 100644 index 6a29b25..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/ResourceLoaderFactory.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.ruoyi.knowledge.chain.loader; - -import lombok.AllArgsConstructor; -import org.ruoyi.knowledge.chain.split.CharacterTextSplitter; -import org.ruoyi.knowledge.chain.split.CodeTextSplitter; -import org.ruoyi.knowledge.chain.split.MarkdownTextSplitter; -import org.ruoyi.knowledge.chain.split.TokenTextSplitter; -import org.ruoyi.knowledge.constant.FileType; -import org.springframework.stereotype.Component; - -@AllArgsConstructor -@Component -public class ResourceLoaderFactory { - private final CharacterTextSplitter characterTextSplitter; - private final CodeTextSplitter codeTextSplitter; - private final MarkdownTextSplitter markdownTextSplitter; - private final TokenTextSplitter tokenTextSplitter; - public ResourceLoader getLoaderByFileType(String fileType){ - if (FileType.isTextFile(fileType)){ - return new TextFileLoader(characterTextSplitter); - } else if (FileType.isWord(fileType)) { - return new WordLoader(characterTextSplitter); - } else if (FileType.isPdf(fileType)) { - return new PdfFileLoader(characterTextSplitter); - } else if (FileType.isMdFile(fileType)) { - return new MarkDownFileLoader(markdownTextSplitter); - }else if (FileType.isCodeFile(fileType)) { - return new CodeFileLoader(codeTextSplitter); - }else { - return new TextFileLoader(characterTextSplitter); - } - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/TextFileLoader.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/TextFileLoader.java deleted file mode 100644 index 95b8929..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/TextFileLoader.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.ruoyi.knowledge.chain.loader; - -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.ruoyi.knowledge.chain.split.TextSplitter; -import org.springframework.stereotype.Component; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.List; - -@Component -@AllArgsConstructor -@Slf4j -public class TextFileLoader implements ResourceLoader{ - private final TextSplitter textSplitter; - @Override - public String getContent(InputStream inputStream) { - StringBuffer stringBuffer = new StringBuffer(); - try (InputStreamReader reader = new InputStreamReader(inputStream, "UTF-8"); - BufferedReader bufferedReader = new BufferedReader(reader)){ - String line; - while ((line = bufferedReader.readLine()) != null) { - stringBuffer.append(line).append("\n"); - } - } catch (IOException e) { - e.printStackTrace(); - } - return stringBuffer.toString(); - } - @Override - public List<String> getChunkList(String content, String kid){ - return textSplitter.split(content, kid); - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/WordLoader.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/WordLoader.java deleted file mode 100644 index c31b9e6..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/loader/WordLoader.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.ruoyi.knowledge.chain.loader; - -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.apache.poi.xwpf.extractor.XWPFWordExtractor; -import org.apache.poi.xwpf.usermodel.XWPFDocument; -import org.ruoyi.knowledge.chain.split.TextSplitter; -import org.springframework.stereotype.Component; - -import java.io.IOException; -import java.io.InputStream; -import java.util.List; - -@Component -@AllArgsConstructor -@Slf4j -public class WordLoader implements ResourceLoader{ - private final TextSplitter textSplitter; - @Override - public String getContent(InputStream inputStream) { - XWPFDocument document = null; - try { - document = new XWPFDocument(inputStream); - XWPFWordExtractor extractor = new XWPFWordExtractor(document); - String content = extractor.getText(); - return content; - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - @Override - public List<String> getChunkList(String content, String kid) { - return textSplitter.split(content, kid); - } - -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/split/CharacterTextSplitter.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/split/CharacterTextSplitter.java deleted file mode 100644 index 4b8f4af..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/split/CharacterTextSplitter.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.ruoyi.knowledge.chain.split; - -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.ruoyi.common.core.utils.StringUtils; -import org.ruoyi.knowledge.domain.vo.KnowledgeInfoVo; -import org.ruoyi.knowledge.service.IKnowledgeInfoService; -import org.springframework.context.annotation.Lazy; -import org.springframework.context.annotation.Primary; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -@Component -@Slf4j -@Primary -public class CharacterTextSplitter implements TextSplitter { - - @Lazy - @Resource - private IKnowledgeInfoService knowledgeInfoService; - - @Override - public List<String> split(String content, String kid) { - // 浠庣煡璇嗗簱琛ㄤ腑鑾峰彇閰嶇疆 - KnowledgeInfoVo knowledgeInfoVo = knowledgeInfoService.queryById(Long.valueOf(kid)); - String knowledgeSeparator = knowledgeInfoVo.getKnowledgeSeparator(); - int textBlockSize = knowledgeInfoVo.getTextBlockSize(); - int overlapChar = knowledgeInfoVo.getOverlapChar(); - List<String> chunkList = new ArrayList<>(); - if (content.contains(knowledgeSeparator) && StringUtils.isNotBlank(knowledgeSeparator)) { - // 鎸夎嚜瀹氫箟鍒嗛殧绗﹀垏鍒� - String[] chunks = content.split(knowledgeSeparator); - chunkList.addAll(Arrays.asList(chunks)); - } else { - int indexMin = 0; - int len = content.length(); - int i = 0; - int right = 0; - while (true) { - if (len > right) { - int begin = i * textBlockSize - overlapChar; - if (begin < indexMin) { - begin = indexMin; - } - int end = textBlockSize * (i + 1) + overlapChar; - if (end > len) { - end = len; - } - String chunk = content.substring(begin, end); - chunkList.add(chunk); - i++; - right = right + textBlockSize; - } else { - break; - } - } - } - return chunkList; - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/split/CodeTextSplitter.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/split/CodeTextSplitter.java deleted file mode 100644 index 209f5de..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/split/CodeTextSplitter.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.ruoyi.knowledge.chain.split; - -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.List; - -@Component -@AllArgsConstructor -@Slf4j -public class CodeTextSplitter implements TextSplitter{ - @Override - public List<String> split(String content, String kid) { - return null; - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/split/MarkdownTextSplitter.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/split/MarkdownTextSplitter.java deleted file mode 100644 index 89ea653..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/split/MarkdownTextSplitter.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.ruoyi.knowledge.chain.split; - -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.List; - -@Component -@AllArgsConstructor -@Slf4j -public class MarkdownTextSplitter implements TextSplitter{ - @Override - public List<String> split(String content, String kid) { - return null; - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/split/TextSplitter.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/split/TextSplitter.java deleted file mode 100644 index 86b3aaf..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/split/TextSplitter.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.ruoyi.knowledge.chain.split; - -import java.util.List; - -/** - * 鏂囨湰鍒囧垎 - */ -public interface TextSplitter { - - /** - * 鏂囨湰鍒囧垎 - * - * @param content 鏂囨湰鍐呭 - * @param kid 鐭ヨ瘑搴搃d - * @return 鍒囧垎鍚庣殑鏂囨湰鍒楄〃 - */ - List<String> split(String content, String kid); -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/split/TokenTextSplitter.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/split/TokenTextSplitter.java deleted file mode 100644 index 696f261..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/split/TokenTextSplitter.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.ruoyi.knowledge.chain.split; - -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.util.List; - -@Component -@AllArgsConstructor -@Slf4j -public class TokenTextSplitter implements TextSplitter{ - @Override - public List<String> split(String content, String kid) { - return null; - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorizer/BgeLargeVectorization.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorizer/BgeLargeVectorization.java deleted file mode 100644 index 840b62f..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorizer/BgeLargeVectorization.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.ruoyi.knowledge.chain.vectorizer; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import com.google.gson.Gson; -import io.github.ollama4j.OllamaAPI; -import io.github.ollama4j.models.embeddings.OllamaEmbeddingsRequestModel; -import jakarta.annotation.Resource; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.ruoyi.knowledge.domain.vo.KnowledgeInfoVo; -import org.ruoyi.knowledge.service.IKnowledgeInfoService; -import org.springframework.context.annotation.Lazy; -import org.springframework.stereotype.Component; - -@Component -@Slf4j -@RequiredArgsConstructor -public class BgeLargeVectorization implements Vectorization { - - String host = "http://localhost:11434/"; - - @Lazy - @Resource - private IKnowledgeInfoService knowledgeInfoService; - - @Override - public List<List<Double>> batchVectorization(List<String> chunkList, String kid) { - OllamaAPI ollamaAPI = new OllamaAPI(host); - KnowledgeInfoVo knowledgeInfoVo = knowledgeInfoService.queryById(Long.valueOf(kid)); - List<Double> doubleVector; - try { - doubleVector = ollamaAPI.generateEmbeddings(new OllamaEmbeddingsRequestModel(knowledgeInfoVo.getVectorModel(), new Gson().toJson(chunkList))); - } catch (Exception e) { - throw new RuntimeException(e); - } - List<List<Double>> vectorList = new ArrayList<>(); - vectorList.add(doubleVector); - return vectorList; - } - - @Override - public List<Double> singleVectorization(String chunk, String kid) { - List<String> chunkList = new ArrayList<>(); - chunkList.add(chunk); - List<List<Double>> vectorList = batchVectorization(chunkList, kid); - return vectorList.get(0); - } - - public static void main(String[] args) { - OllamaAPI ollamaAPI = new OllamaAPI("http://localhost:11434/"); - List<String> chunkList = Arrays.asList("澶╁緢钃�", "娴峰緢娣�"); - List<Double> doubleVector; - try { - doubleVector = ollamaAPI.generateEmbeddings(new OllamaEmbeddingsRequestModel("quentinz/bge-large-zh-v1.5", new Gson().toJson(chunkList))); - } catch (Exception e) { - throw new RuntimeException(e); - } - System.out.println("=== " + doubleVector + " 1==="); - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorizer/LocalModelsVectorization.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorizer/LocalModelsVectorization.java deleted file mode 100644 index 306d823..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorizer/LocalModelsVectorization.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.ruoyi.knowledge.chain.vectorizer; - -import jakarta.annotation.Resource; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.ruoyi.common.chat.config.ChatConfig; -import org.ruoyi.common.chat.localModels.LocalModelsofitClient; -import org.ruoyi.common.chat.openai.OpenAiStreamClient; -import org.ruoyi.knowledge.domain.vo.KnowledgeInfoVo; -import org.ruoyi.knowledge.service.IKnowledgeInfoService; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.List; - -@Component -@Slf4j -@RequiredArgsConstructor -public class LocalModelsVectorization { - @Resource - private IKnowledgeInfoService knowledgeInfoService; - - @Resource - private LocalModelsofitClient localModelsofitClient; - - @Getter - private OpenAiStreamClient openAiStreamClient; - - private final ChatConfig chatConfig; - - /** - * 鎵归噺鍚戦噺鍖� - * - * @param chunkList 鏂囨湰鍧楀垪琛� - * @param kid 鐭ヨ瘑 ID - * @return 鍚戦噺鍖栫粨鏋� - */ - - public List<List<Double>> batchVectorization(List<String> chunkList, String kid) { - logVectorizationRequest(kid, chunkList); // 鍦ㄥ悜閲忓寲寮�濮嬪墠璁板綍鏃ュ織 - openAiStreamClient = chatConfig.getOpenAiStreamClient(); // 鑾峰彇 OpenAi 瀹㈡埛绔� - KnowledgeInfoVo knowledgeInfoVo = knowledgeInfoService.queryById(Long.valueOf(kid)); // 鏌ヨ鐭ヨ瘑淇℃伅 - // 璋冪敤 localModelsofitClient 鑾峰彇 Top K 宓屽叆鍚戦噺 - try { - return localModelsofitClient.getTopKEmbeddings( - chunkList, - knowledgeInfoVo.getVectorModel(), - knowledgeInfoVo.getKnowledgeSeparator(), - knowledgeInfoVo.getRetrieveLimit(), - knowledgeInfoVo.getTextBlockSize(), - knowledgeInfoVo.getOverlapChar() - ); - } catch (Exception e) { - log.error("Failed to perform batch vectorization for knowledgeId: {}", kid, e); - throw new RuntimeException("Batch vectorization failed", e); - } - } - - /** - * 鍗曚竴鏂囨湰鍧楀悜閲忓寲 - * - * @param chunk 鍗曚竴鏂囨湰鍧� - * @param kid 鐭ヨ瘑 ID - * @return 鍚戦噺鍖栫粨鏋� - */ - - public List<Double> singleVectorization(String chunk, String kid) { - List<String> chunkList = new ArrayList<>(); - chunkList.add(chunk); - - // 璋冪敤鎵归噺鍚戦噺鍖栨柟娉� - List<List<Double>> vectorList = batchVectorization(chunkList, kid); - - if (vectorList.isEmpty()) { - log.warn("Vectorization returned empty list for chunk: {}", chunk); - return new ArrayList<>(); - } - - return vectorList.get(0); // 杩斿洖绗竴涓悜閲� - } - - /** - * 鎻愪緵鏇寸畝娲佺殑鏃ュ織璁板綍鏂规硶 - * - * @param kid 鐭ヨ瘑 ID - * @param chunkList 鏂囨湰鍧楀垪琛� - */ - private void logVectorizationRequest(String kid, List<String> chunkList) { - log.info("Starting vectorization for Knowledge ID: {} with {} chunks.", kid, chunkList.size()); - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorizer/OpenAiVectorization.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorizer/OpenAiVectorization.java deleted file mode 100644 index bc82dbf..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorizer/OpenAiVectorization.java +++ /dev/null @@ -1,113 +0,0 @@ -package org.ruoyi.knowledge.chain.vectorizer; - -import jakarta.annotation.Resource; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.ruoyi.common.chat.config.ChatConfig; -import org.ruoyi.common.chat.entity.embeddings.Embedding; - -import org.ruoyi.common.chat.entity.embeddings.EmbeddingResponse; -import org.ruoyi.common.chat.openai.OpenAiStreamClient; -import org.ruoyi.knowledge.domain.vo.KnowledgeInfoVo; -import org.ruoyi.knowledge.service.IKnowledgeInfoService; -import org.ruoyi.system.domain.SysModel; -import org.ruoyi.system.service.ISysModelService; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Lazy; -import org.springframework.stereotype.Component; - -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -@Component -@Slf4j -@RequiredArgsConstructor -public class OpenAiVectorization implements Vectorization { - - @Lazy - @Resource - private IKnowledgeInfoService knowledgeInfoService; - @Lazy - @Resource - private LocalModelsVectorization localModelsVectorization; - @Lazy - @Resource - private ISysModelService sysModelService; - - @Getter - private OpenAiStreamClient openAiStreamClient; - - private final ChatConfig chatConfig; - - @Override - public List<List<Double>> batchVectorization(List<String> chunkList, String kid) { - List<List<Double>> vectorList; - // 鑾峰彇鐭ヨ瘑搴撲俊鎭� - KnowledgeInfoVo knowledgeInfoVo = knowledgeInfoService.queryById(Long.valueOf(kid)); - if(knowledgeInfoVo == null){ - log.warn("鐭ヨ瘑搴撲笉瀛樺湪:璇锋煡妫�ID {}",kid); - vectorList=new ArrayList<>(); - vectorList.add(new ArrayList<>()); - return vectorList; - } - SysModel sysModel = sysModelService.selectModelByName(knowledgeInfoVo.getVectorModel()); - String apiHost= sysModel.getApiHost(); - String apiKey= sysModel.getApiKey(); - openAiStreamClient = chatConfig.createOpenAiStreamClient(apiHost,apiKey); - - Embedding embedding = buildEmbedding(chunkList, knowledgeInfoVo); - EmbeddingResponse embeddings = openAiStreamClient.embeddings(embedding); - - // 澶勭悊 OpenAI 杩斿洖鐨勫祵鍏ユ暟鎹� - vectorList = processOpenAiEmbeddings(embeddings); - - return vectorList; - } - - /** - * 鏋勫缓 Embedding 瀵硅薄 - */ - private Embedding buildEmbedding(List<String> chunkList, KnowledgeInfoVo knowledgeInfoVo) { - return Embedding.builder() - .input(chunkList) - .model(knowledgeInfoVo.getVectorModel()) - .build(); - } - - /** - * 澶勭悊 OpenAI 杩斿洖鐨勫祵鍏ユ暟鎹� - */ - private List<List<Double>> processOpenAiEmbeddings(EmbeddingResponse embeddings) { - List<List<Double>> vectorList = new ArrayList<>(); - - embeddings.getData().forEach(data -> { - List<BigDecimal> vector = data.getEmbedding(); - List<Double> doubleVector = convertToDoubleList(vector); - vectorList.add(doubleVector); - }); - - return vectorList; - } - - /** - * 灏� BigDecimal 杞崲涓� Double 鍒楄〃 - */ - private List<Double> convertToDoubleList(List<BigDecimal> vector) { - return vector.stream() - .map(BigDecimal::doubleValue) - .collect(Collectors.toList()); - } - - - @Override - public List<Double> singleVectorization(String chunk, String kid) { - List<String> chunkList = new ArrayList<>(); - chunkList.add(chunk); - List<List<Double>> vectorList = batchVectorization(chunkList, kid); - return vectorList.get(0); - } - -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorizer/Vectorization.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorizer/Vectorization.java deleted file mode 100644 index 1c25dde..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorizer/Vectorization.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.ruoyi.knowledge.chain.vectorizer; - -import java.util.List; - -/** - * 鍚戦噺鍖� - */ -public interface Vectorization { - List<List<Double>> batchVectorization(List<String> chunkList, String kid); - - List<Double> singleVectorization(String chunk, String kid); -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorizer/VectorizationFactory.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorizer/VectorizationFactory.java deleted file mode 100644 index 87a09b7..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorizer/VectorizationFactory.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.ruoyi.knowledge.chain.vectorizer; - -import cn.hutool.core.util.StrUtil; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.ruoyi.knowledge.domain.vo.KnowledgeInfoVo; -import org.ruoyi.knowledge.service.IKnowledgeInfoService; -import org.springframework.context.annotation.Lazy; -import org.springframework.stereotype.Component; - -/** - * 鏂囨湰鍚戦噺鍖� - * @author huangkh - */ -@Component -@Slf4j -public class VectorizationFactory { - - private final OpenAiVectorization openAiVectorization; - - private final BgeLargeVectorization bgeLargeVectorization; - - @Lazy - @Resource - private IKnowledgeInfoService knowledgeInfoService; - - public VectorizationFactory(OpenAiVectorization openAiVectorization,BgeLargeVectorization bgeLargeVectorization) { - this.openAiVectorization = openAiVectorization; - this.bgeLargeVectorization = bgeLargeVectorization; - } - - public Vectorization getEmbedding(String kid){ - String vectorModel = "text-embedding-3-small"; - if (StrUtil.isNotEmpty(kid)) { - KnowledgeInfoVo knowledgeInfoVo = knowledgeInfoService.queryById(Long.valueOf(kid)); - if (knowledgeInfoVo != null && StrUtil.isNotEmpty(knowledgeInfoVo.getVectorModel())) { - vectorModel = knowledgeInfoVo.getVectorModel(); - } - } - return switch (vectorModel) { - case "quentinz/bge-large-zh-v1.5" -> bgeLargeVectorization; - default -> openAiVectorization; - }; - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorizer/VectorizationType.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorizer/VectorizationType.java deleted file mode 100644 index a9d370d..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorizer/VectorizationType.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.ruoyi.knowledge.chain.vectorizer; - -public enum VectorizationType { - OPENAI, // OpenAI 鍚戦噺鍖� - LOCAL; // 鏈湴妯″瀷鍚戦噺鍖� - - public static VectorizationType fromString(String type) { - for (VectorizationType v : values()) { - if (v.name().equalsIgnoreCase(type)) { - return v; - } - } - throw new IllegalArgumentException("Unknown VectorizationType: " + type); - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorizer/VectorizationWrapper.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorizer/VectorizationWrapper.java deleted file mode 100644 index e25d331..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorizer/VectorizationWrapper.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.ruoyi.knowledge.chain.vectorizer; - -import jakarta.annotation.Resource; -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.ruoyi.knowledge.domain.vo.KnowledgeInfoVo; -import org.ruoyi.knowledge.service.IKnowledgeInfoService; -import org.springframework.context.annotation.Lazy; -import org.springframework.context.annotation.Primary; -import org.springframework.stereotype.Component; - -import java.util.List; - -@Component -@Slf4j -@Primary -@AllArgsConstructor -public class VectorizationWrapper implements Vectorization{ - - private final VectorizationFactory vectorizationFactory; - @Override - public List<List<Double>> batchVectorization(List<String> chunkList, String kid) { - Vectorization embedding = vectorizationFactory.getEmbedding(kid); - return embedding.batchVectorization(chunkList, kid); - } - - @Override - public List<Double> singleVectorization(String chunk, String kid) { - Vectorization embedding = vectorizationFactory.getEmbedding(kid); - return embedding.singleVectorization(chunk, kid); - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorstore/MilvusVectorStore.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorstore/MilvusVectorStore.java deleted file mode 100644 index 32e6216..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorstore/MilvusVectorStore.java +++ /dev/null @@ -1,396 +0,0 @@ -package org.ruoyi.knowledge.chain.vectorstore; - -import io.milvus.client.MilvusServiceClient; -import io.milvus.grpc.DataType; -import io.milvus.grpc.DescribeIndexResponse; -import io.milvus.grpc.MutationResult; -import io.milvus.grpc.SearchResults; -import io.milvus.param.*; -import io.milvus.param.collection.*; -import io.milvus.param.dml.DeleteParam; -import io.milvus.param.dml.InsertParam; -import io.milvus.param.dml.SearchParam; -import io.milvus.param.index.CreateIndexParam; -import io.milvus.param.index.DescribeIndexParam; -import io.milvus.param.partition.CreatePartitionParam; -import io.milvus.response.QueryResultsWrapper; -import io.milvus.response.SearchResultsWrapper; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.ruoyi.common.core.service.ConfigService; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -@Service -@Slf4j -public class MilvusVectorStore implements VectorStore { - - private volatile Integer dimension; - private volatile String collectionName; - private MilvusServiceClient milvusServiceClient; - - @Resource - private ConfigService configService; - - @PostConstruct - public void loadConfig() { - this.dimension = Integer.parseInt(configService.getConfigValue("milvus", "dimension")); - this.collectionName = configService.getConfigValue("milvus", "collection"); - } - - @PostConstruct - public void init() { - String milvusHost = configService.getConfigValue("milvus", "host"); - String milvausPort = configService.getConfigValue("milvus", "port"); - milvusServiceClient = new MilvusServiceClient( - ConnectParam.newBuilder() - .withHost(milvusHost) - .withPort(Integer.parseInt(milvausPort)) - .withDatabaseName("default") - .build() - ); - } - - private void createSchema(String kid) { - FieldType primaryField = FieldType.newBuilder() - .withName("row_id") - .withDataType(DataType.Int64) - .withPrimaryKey(true) - .withAutoID(true) - .build(); - FieldType contentField = FieldType.newBuilder() - .withName("content") - .withDataType(DataType.VarChar) - .withMaxLength(1000) - .build(); - FieldType kidField = FieldType.newBuilder() - .withName("kid") - .withDataType(DataType.VarChar) - .withMaxLength(20) - .build(); - FieldType docIdField = FieldType.newBuilder() - .withName("docId") - .withDataType(DataType.VarChar) - .withMaxLength(20) - .build(); - FieldType fidField = FieldType.newBuilder() - .withName("fid") - .withDataType(DataType.VarChar) - .withMaxLength(20) - .build(); - FieldType vectorField = FieldType.newBuilder() - .withName("fv") - .withDataType(DataType.FloatVector) - .withDimension(dimension) - .build(); - CreateCollectionParam createCollectionReq = CreateCollectionParam.newBuilder() - .withCollectionName(collectionName + kid) - .withDescription("local knowledge") - .addFieldType(primaryField) - .addFieldType(contentField) - .addFieldType(kidField) - .addFieldType(docIdField) - .addFieldType(fidField) - .addFieldType(vectorField) - .build(); - milvusServiceClient.createCollection(createCollectionReq); - - // 鍒涘缓鍚戦噺鐨勭储寮� - IndexType INDEX_TYPE = IndexType.IVF_FLAT; - String INDEX_PARAM = "{\"nlist\":1024}"; - milvusServiceClient.createIndex( - CreateIndexParam.newBuilder() - .withCollectionName(collectionName + kid) - .withFieldName("fv") - .withIndexType(INDEX_TYPE) - .withMetricType(MetricType.IP) - .withExtraParam(INDEX_PARAM) - .withSyncMode(Boolean.FALSE) - .build() - ); - - } - - @Override - public void newSchema(String kid) { - createSchema(kid); - } - - @Override - public void removeByKidAndFid(String kid, String fid) { - milvusServiceClient.delete( - DeleteParam.newBuilder() - .withCollectionName(collectionName + kid) - .withExpr("fid == " + fid) - .build() - ); - } - - @Override - public void storeEmbeddings(List<String> chunkList, List<List<Double>> vectorList, String kid, String docId, List<String> fidList) { - String fullCollectionName = collectionName + kid; - - // 妫�鏌ラ泦鍚堟槸鍚﹀瓨鍦� - HasCollectionParam hasCollectionParam = HasCollectionParam.newBuilder() - .withCollectionName(fullCollectionName) - .build(); - R<Boolean> booleanR = milvusServiceClient.hasCollection(hasCollectionParam); - - if (booleanR.getStatus() == R.Status.Success.getCode()) { - boolean collectionExists = booleanR.getData().booleanValue(); - if (!collectionExists) { - // 闆嗗悎涓嶅瓨鍦紝鍒涘缓闆嗗悎 - List<FieldType> fieldTypes = new ArrayList<>(); - // 鍋囪杩欓噷瀹氫箟 id 瀛楁锛屾牴鎹疄闄呮儏鍐典慨鏀� - FieldType idField = FieldType.newBuilder() - .withName("id") - .withDataType(DataType.Int64) - .withPrimaryKey(true) - .withAutoID(true) - .build(); - fieldTypes.add(idField); - - // 瀹氫箟鍚戦噺瀛楁 - FieldType vectorField = FieldType.newBuilder() - .withName("fv") - .withDataType(DataType.FloatVector) - .withDimension(vectorList.get(0).size()) - .build(); - fieldTypes.add(vectorField); - - // 瀹氫箟鍏朵粬瀛楁 - FieldType contentField = FieldType.newBuilder() - .withName("content") - .withDataType(DataType.VarChar) - .withMaxLength(chunkList.size() * 1024) // 鏍规嵁瀹為檯鎯呭喌淇敼 - .build(); - fieldTypes.add(contentField); - - FieldType kidField = FieldType.newBuilder() - .withName("kid") - .withDataType(DataType.VarChar) - .withMaxLength(256) // 鏍规嵁瀹為檯鎯呭喌淇敼 - .build(); - fieldTypes.add(kidField); - - FieldType docIdField = FieldType.newBuilder() - .withName("docId") - .withDataType(DataType.VarChar) - .withMaxLength(256) // 鏍规嵁瀹為檯鎯呭喌淇敼 - .build(); - fieldTypes.add(docIdField); - - FieldType fidField = FieldType.newBuilder() - .withName("fid") - .withDataType(DataType.VarChar) - .withMaxLength(256) // 鏍规嵁瀹為檯鎯呭喌淇敼 - .build(); - fieldTypes.add(fidField); - - CreateCollectionParam createCollectionParam = CreateCollectionParam.newBuilder() - .withCollectionName(fullCollectionName) - .withFieldTypes(fieldTypes) - .build(); - - R<RpcStatus> collection = milvusServiceClient.createCollection(createCollectionParam); - if (collection.getStatus() == R.Status.Success.getCode()) { - System.out.println("闆嗗悎 " + fullCollectionName + " 鍒涘缓鎴愬姛"); - - // 鍒涘缓绱㈠紩 - CreateIndexParam createIndexParam = CreateIndexParam.newBuilder() - .withCollectionName(fullCollectionName) - .withFieldName("fv") // 鍚戦噺瀛楁鍚� - .withIndexType(IndexType.IVF_FLAT) // 绱㈠紩绫诲瀷 - .withMetricType(MetricType.IP) - .withExtraParam("{\"nlist\":1024}") // 绱㈠紩鍙傛暟 - .build(); - R<RpcStatus> indexResponse = milvusServiceClient.createIndex(createIndexParam); - if (indexResponse.getStatus() == R.Status.Success.getCode()) { - System.out.println("绱㈠紩鍒涘缓鎴愬姛"); - } else { - System.err.println("绱㈠紩鍒涘缓澶辫触: " + indexResponse.getMessage()); - return; - } - } else { - System.err.println("闆嗗悎鍒涘缓澶辫触: " + collection.getMessage()); - return; - } - } - } else { - System.err.println("妫�鏌ラ泦鍚堟槸鍚﹀瓨鍦ㄦ椂鍑洪敊: " + booleanR.getMessage()); - return; - } - - if (StringUtils.isNotBlank(docId)) { - milvusServiceClient.createPartition( - CreatePartitionParam.newBuilder() - .withCollectionName(fullCollectionName) - .withPartitionName(docId) - .build() - ); - } - - List<List<Float>> vectorFloatList = new ArrayList<>(); - List<String> kidList = new ArrayList<>(); - List<String> docIdList = new ArrayList<>(); - for (int i = 0; i < Math.min(chunkList.size(), vectorList.size()); i++) { - List<Double> vector = vectorList.get(i); - List<Float> vfList = new ArrayList<>(); - for (int j = 0; j < vector.size(); j++) { - Double value = vector.get(j); - vfList.add(value.floatValue()); - } - vectorFloatList.add(vfList); - kidList.add(kid); - docIdList.add(docId); - } - List<InsertParam.Field> fields = new ArrayList<>(); - fields.add(new InsertParam.Field("content", chunkList)); - fields.add(new InsertParam.Field("kid", kidList)); - fields.add(new InsertParam.Field("docId", docIdList)); - fields.add(new InsertParam.Field("fid", fidList)); - fields.add(new InsertParam.Field("fv", vectorFloatList)); - - InsertParam insertParam = InsertParam.newBuilder() - .withCollectionName(fullCollectionName) - .withPartitionName(docId) - .withFields(fields) - .build(); - System.out.println("========================="); - - R<MutationResult> insert = milvusServiceClient.insert(insertParam); - if (insert.getStatus() == R.Status.Success.getCode()) { - System.out.println("鎻掑叆鎴愬姛锛屾彃鍏ョ殑琛屾暟: " + insert.getData().getInsertCnt()); - } else { - System.err.println("鎻掑叆澶辫触: " + insert.getMessage()); - } - System.out.println("========================="); - // milvus鍦ㄥ皢鏁版嵁瑁呰浇鍒板唴瀛樺悗鎵嶈兘杩涜鍚戦噺璁$畻. - LoadCollectionParam loadCollectionParam = LoadCollectionParam.newBuilder() - .withCollectionName(fullCollectionName) - .build(); - R<RpcStatus> loadResponse = milvusServiceClient.loadCollection(loadCollectionParam); - if (loadResponse.getStatus() != R.Status.Success.getCode()) { - System.err.println("鍔犺浇闆嗗悎 " + fullCollectionName + " 鍒板唴瀛樻椂鍑洪敊锛�" + loadResponse.getMessage()); - } -// milvusServiceClient.loadCollection(LoadCollectionParam.newBuilder().withCollectionName(fullCollectionName).build()); - } - - - @Override - public void removeByDocId(String kid, String docId) { - milvusServiceClient.delete( - DeleteParam.newBuilder() - .withCollectionName(collectionName + kid) - .withExpr("1 == 1") - .withPartitionName(docId) - .build() - ); - } - - @Override - public void removeByKid(String kid) { - milvusServiceClient.dropCollection( - DropCollectionParam.newBuilder() - .withCollectionName(collectionName + kid) - .build() - ); - } - - @Override - public List<String> nearest(List<Double> queryVector, String kid) { - String fullCollectionName = collectionName + kid; - - HasCollectionParam hasCollectionParam = HasCollectionParam.newBuilder() - .withCollectionName(fullCollectionName) - .build(); - - R<Boolean> booleanR = milvusServiceClient.hasCollection(hasCollectionParam); - if (booleanR.getStatus() != R.Status.Success.getCode() || !booleanR.getData().booleanValue()) { - System.err.println("闆嗗悎 " + fullCollectionName + " 涓嶅瓨鍦ㄦ垨妫�鏌ラ泦鍚堝瓨鍦ㄦ�ф椂鍑洪敊銆�"); - return new ArrayList<>(); - } - - DescribeIndexParam describeIndexParam = DescribeIndexParam.newBuilder().withCollectionName(fullCollectionName).build(); - - R<DescribeIndexResponse> describeIndexResponseR = milvusServiceClient.describeIndex(describeIndexParam); - - if (describeIndexResponseR.getStatus() == R.Status.Success.getCode()) { - System.out.println("绱㈠紩淇℃伅: " + describeIndexResponseR.getData().getIndexDescriptionsCount()); - } else { - System.err.println("鑾峰彇绱㈠紩澶辫触: " + describeIndexResponseR.getMessage()); - } - -// // 鍔犺浇闆嗗悎鍒板唴瀛� -// LoadCollectionParam loadCollectionParam = LoadCollectionParam.newBuilder() -// .withCollectionName(fullCollectionName) -// .build(); -// R<RpcStatus> loadResponse = milvusServiceClient.loadCollection(loadCollectionParam); -// if (loadResponse.getStatus() != R.Status.Success.getCode()) { -// System.err.println("鍔犺浇闆嗗悎 " + fullCollectionName + " 鍒板唴瀛樻椂鍑洪敊锛�" + loadResponse.getMessage()); -// return new ArrayList<>(); -// } - - List<String> search_output_fields = Arrays.asList("content", "fv"); - List<Float> fv = new ArrayList<>(); - for (int i = 0; i < queryVector.size(); i++) { - fv.add(queryVector.get(i).floatValue()); - } - List<List<Float>> vectors = new ArrayList<>(); - vectors.add(fv); - String search_param = "{\"nprobe\":10, \"offset\":0}"; - SearchParam searchParam = SearchParam.newBuilder() - .withCollectionName(collectionName + kid) - .withMetricType(MetricType.IP) - .withOutFields(search_output_fields) - .withTopK(10) - .withVectors(vectors) - .withVectorFieldName("fv") - .withParams(search_param) - .build(); - System.out.println("SearchParam: " + searchParam.toString()); - R<SearchResults> respSearch = milvusServiceClient.search(searchParam); - if (respSearch.getStatus() == R.Status.Success.getCode()) { - SearchResults searchResults = respSearch.getData(); - if (searchResults != null) { - System.out.println(searchResults.getResults()); - SearchResultsWrapper wrapperSearch = new SearchResultsWrapper(searchResults.getResults()); - List<QueryResultsWrapper.RowRecord> rowRecords = wrapperSearch.getRowRecords(); - - List<String> resultList = new ArrayList<>(); - if (rowRecords != null && !rowRecords.isEmpty()) { - for (QueryResultsWrapper.RowRecord rowRecord : rowRecords) { - String content = rowRecord.get("content").toString(); - resultList.add(content); - } - } - return resultList; - } else { - System.err.println("鎼滅储缁撴灉涓虹┖"); - } - } else { - System.err.println("鎼滅储鎿嶄綔澶辫触: " + respSearch.getMessage()); - } - return new ArrayList<>(); - - } - - /** - * milvus 涓嶆敮鎸侀�氳繃鏂囨湰妫�绱㈢浉浼兼�� - * - * @param query - * @param kid - * @return - */ - @Override - public List<String> nearest(String query, String kid) { - return null; - } - -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorstore/VectorStore.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorstore/VectorStore.java deleted file mode 100644 index 6be022d..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorstore/VectorStore.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.ruoyi.knowledge.chain.vectorstore; - -import java.util.List; - -/** - * 鍚戦噺瀛樺偍 - */ -public interface VectorStore { - - void storeEmbeddings(List<String> chunkList, List<List<Double>> vectorList, String kid, String docId, List<String> fidList); - - void removeByDocId(String kid, String docId); - - void removeByKid(String kid); - - List<String> nearest(List<Double> queryVector, String kid); - - List<String> nearest(String query, String kid); - - void newSchema(String kid); - - void removeByKidAndFid(String kid, String fid); -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorstore/VectorStoreFactory.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorstore/VectorStoreFactory.java deleted file mode 100644 index 4471fca..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorstore/VectorStoreFactory.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.ruoyi.knowledge.chain.vectorstore; - -import cn.hutool.core.util.StrUtil; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.ruoyi.knowledge.domain.vo.KnowledgeInfoVo; -import org.ruoyi.knowledge.mapper.KnowledgeInfoMapper; -import org.springframework.stereotype.Component; - -@Component -@Slf4j -public class VectorStoreFactory { - - private final WeaviateVectorStore weaviateVectorStore; - - private final MilvusVectorStore milvusVectorStore; - - @Resource - private KnowledgeInfoMapper knowledgeInfoMapper; - - public VectorStoreFactory(WeaviateVectorStore weaviateVectorStore, MilvusVectorStore milvusVectorStore) { - this.weaviateVectorStore = weaviateVectorStore; - this.milvusVectorStore = milvusVectorStore; - } - - public VectorStore getVectorStore(String kid){ - String vectorModel = "weaviate"; - if (StrUtil.isNotEmpty(kid)) { - KnowledgeInfoVo knowledgeInfoVo = knowledgeInfoMapper.selectVoById(Long.valueOf(kid)); - if (knowledgeInfoVo != null && StrUtil.isNotEmpty(knowledgeInfoVo.getVector())) { - vectorModel = knowledgeInfoVo.getVector(); - } - } - if ("weaviate".equals(vectorModel)){ - return weaviateVectorStore; - }else if ("milvus".equals(vectorModel)){ - return milvusVectorStore; - } - return null; - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorstore/VectorStoreWrapper.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorstore/VectorStoreWrapper.java deleted file mode 100644 index e1daa61..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorstore/VectorStoreWrapper.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.ruoyi.knowledge.chain.vectorstore; - -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Primary; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -@Slf4j -@Primary -@AllArgsConstructor -public class VectorStoreWrapper implements VectorStore { - - private final VectorStoreFactory vectorStoreFactory; - - @Override - public void storeEmbeddings(List<String> chunkList, List<List<Double>> vectorList, String kid, String docId, List<String> fidList) { - VectorStore vectorStore = vectorStoreFactory.getVectorStore(kid); - vectorStore.storeEmbeddings(chunkList, vectorList, kid, docId, fidList); - } - - @Override - public void removeByDocId(String kid, String docId) { - VectorStore vectorStore = vectorStoreFactory.getVectorStore(kid); - vectorStore.removeByDocId(kid, docId); - } - - @Override - public void removeByKid(String kid) { - VectorStore vectorStore = vectorStoreFactory.getVectorStore(kid); - vectorStore.removeByKid(kid); - } - - @Override - public List<String> nearest(List<Double> queryVector, String kid) { - VectorStore vectorStore = vectorStoreFactory.getVectorStore(kid); - return vectorStore.nearest(queryVector, kid); - } - - @Override - public List<String> nearest(String query, String kid) { - VectorStore vectorStore = vectorStoreFactory.getVectorStore(kid); - return vectorStore.nearest(query, kid); - } - - @Override - public void newSchema(String kid) { - VectorStore vectorStore = vectorStoreFactory.getVectorStore(kid); - vectorStore.newSchema(kid); - } - - @Override - public void removeByKidAndFid(String kid, String fid) { - VectorStore vectorStore = vectorStoreFactory.getVectorStore(kid); - vectorStore.removeByKidAndFid(kid, fid); - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorstore/WeaviateVectorStore.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorstore/WeaviateVectorStore.java deleted file mode 100644 index 785054d..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/chain/vectorstore/WeaviateVectorStore.java +++ /dev/null @@ -1,402 +0,0 @@ -package org.ruoyi.knowledge.chain.vectorstore; - -import cn.hutool.core.lang.UUID; -import com.alibaba.fastjson2.JSONObject; -import com.google.gson.internal.LinkedTreeMap; -import io.weaviate.client.Config; -import io.weaviate.client.WeaviateClient; -import io.weaviate.client.base.Result; -import io.weaviate.client.v1.data.model.WeaviateObject; -import io.weaviate.client.v1.data.replication.model.ConsistencyLevel; -import io.weaviate.client.v1.filters.Operator; -import io.weaviate.client.v1.filters.WhereFilter; -import io.weaviate.client.v1.graphql.model.GraphQLResponse; -import io.weaviate.client.v1.graphql.query.argument.NearTextArgument; -import io.weaviate.client.v1.graphql.query.argument.NearVectorArgument; -import io.weaviate.client.v1.graphql.query.fields.Field; -import io.weaviate.client.v1.misc.model.Meta; -import io.weaviate.client.v1.misc.model.ReplicationConfig; -import io.weaviate.client.v1.misc.model.ShardingConfig; -import io.weaviate.client.v1.misc.model.VectorIndexConfig; -import io.weaviate.client.v1.schema.model.DataType; -import io.weaviate.client.v1.schema.model.Property; -import io.weaviate.client.v1.schema.model.Schema; -import io.weaviate.client.v1.schema.model.WeaviateClass; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.ruoyi.common.core.service.ConfigService; -import org.ruoyi.knowledge.domain.vo.KnowledgeInfoVo; -import org.ruoyi.knowledge.service.IKnowledgeInfoService; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Lazy; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Service -@Slf4j -public class WeaviateVectorStore implements VectorStore { - - private volatile String protocol; - private volatile String host; - private volatile String className; - - @Lazy - @Resource - private IKnowledgeInfoService knowledgeInfoService; - - @Lazy - @Resource - private ConfigService configService; - - @PostConstruct - public void loadConfig() { - this.protocol = configService.getConfigValue("weaviate", "protocol"); - this.host = configService.getConfigValue("weaviate", "host"); - this.className = configService.getConfigValue("weaviate", "classname"); - } - - public WeaviateClient getClient() { - Config config = new Config(protocol, host); - WeaviateClient client = new WeaviateClient(config); - return client; - } - - public Result<Meta> getMeta() { - WeaviateClient client = getClient(); - Result<Meta> meta = client.misc().metaGetter().run(); - if (meta.getError() == null) { - System.out.printf("meta.hostname: %s\n", meta.getResult().getHostname()); - System.out.printf("meta.version: %s\n", meta.getResult().getVersion()); - System.out.printf("meta.modules: %s\n", meta.getResult().getModules()); - } else { - System.out.printf("Error: %s\n", meta.getError().getMessages()); - } - return meta; - } - - public Result<Schema> getSchemas() { - WeaviateClient client = getClient(); - Result<Schema> result = client.schema().getter().run(); - if (result.hasErrors()) { - System.out.println(result.getError()); - } else { - System.out.println(result.getResult()); - } - return result; - } - - - public Result<Boolean> createSchema(String kid) { - WeaviateClient client = getClient(); - - VectorIndexConfig vectorIndexConfig = VectorIndexConfig.builder() - .distance("cosine") - .cleanupIntervalSeconds(300) - .efConstruction(128) - .maxConnections(64) - .vectorCacheMaxObjects(500000L) - .ef(-1) - .skip(false) - .dynamicEfFactor(8) - .dynamicEfMax(500) - .dynamicEfMin(100) - .flatSearchCutoff(40000) - .build(); - - ShardingConfig shardingConfig = ShardingConfig.builder() - .desiredCount(3) - .desiredVirtualCount(128) - .function("murmur3") - .key("_id") - .strategy("hash") - .virtualPerPhysical(128) - .build(); - - ReplicationConfig replicationConfig = ReplicationConfig.builder() - .factor(1) - .build(); - - JSONObject classModuleConfigValue = new JSONObject(); - classModuleConfigValue.put("vectorizeClassName", false); - JSONObject classModuleConfig = new JSONObject(); - classModuleConfig.put("text2vec-transformers", classModuleConfigValue); - - JSONObject propertyModuleConfigValueSkipTrue = new JSONObject(); - propertyModuleConfigValueSkipTrue.put("vectorizePropertyName", false); - propertyModuleConfigValueSkipTrue.put("skip", true); - JSONObject propertyModuleConfigSkipTrue = new JSONObject(); - propertyModuleConfigSkipTrue.put("text2vec-transformers", propertyModuleConfigValueSkipTrue); - - JSONObject propertyModuleConfigValueSkipFalse = new JSONObject(); - propertyModuleConfigValueSkipFalse.put("vectorizePropertyName", false); - propertyModuleConfigValueSkipFalse.put("skip", false); - JSONObject propertyModuleConfigSkipFalse = new JSONObject(); - propertyModuleConfigSkipFalse.put("text2vec-transformers", propertyModuleConfigValueSkipFalse); - - WeaviateClass clazz = WeaviateClass.builder() - .className(className + kid) - .description("local knowledge") - .vectorIndexType("hnsw") - .vectorizer("text2vec-transformers") - .shardingConfig(shardingConfig) - .vectorIndexConfig(vectorIndexConfig) - .replicationConfig(replicationConfig) - .moduleConfig(classModuleConfig) - .properties(new ArrayList() { - { - add(Property.builder() - .dataType(new ArrayList() { - { - add(DataType.TEXT); - } - }) - .name("content") - .description("The content of the local knowledge,for search") - .moduleConfig(propertyModuleConfigSkipFalse) - .build()); - add(Property.builder() - .dataType(new ArrayList() { - { - add(DataType.TEXT); - } - }) - .name("kid") - .description("The knowledge id of the local knowledge,for search") - .moduleConfig(propertyModuleConfigSkipTrue) - .build()); - add(Property.builder() - .dataType(new ArrayList() { - { - add(DataType.TEXT); - } - }) - .name("docId") - .description("The doc id of the local knowledge,for search") - .moduleConfig(propertyModuleConfigSkipTrue) - .build()); - add(Property.builder() - .dataType(new ArrayList() { - { - add(DataType.TEXT); - } - }) - .name("fid") - .description("The fragment id of the local knowledge,for search") - .moduleConfig(propertyModuleConfigSkipTrue) - .build()); - add(Property.builder() - .dataType(new ArrayList() { - { - add(DataType.TEXT); - } - }) - .name("uuid") - .description("The uuid id of the local knowledge fragment(same with id properties),for search") - .moduleConfig(propertyModuleConfigSkipTrue) - .build()); - } }) - .build(); - - Result<Boolean> result = client.schema().classCreator().withClass(clazz).run(); - if (result.hasErrors()) { - System.out.println(result.getError()); - } - System.out.println(result.getResult()); - return result; - } - - @Override - public void newSchema(String kid) { - createSchema(kid); - } - - @Override - public void removeByKidAndFid(String kid, String fid) { - List<String> resultList = new ArrayList<>(); - WeaviateClient client = getClient(); - Field fieldId = Field.builder().name("uuid").build(); - WhereFilter where = WhereFilter.builder() - .path(new String[]{"fid"}) - .operator(Operator.Equal) - .valueString(fid) - .build(); - Result<GraphQLResponse> result = client.graphQL().get() - .withClassName(className + kid) - .withFields(fieldId) - .withWhere(where) - .run(); - LinkedTreeMap<String, Object> t = (LinkedTreeMap<String, Object>) result.getResult().getData(); - LinkedTreeMap<String, ArrayList<LinkedTreeMap>> l = (LinkedTreeMap<String, ArrayList<LinkedTreeMap>>) t.get("Get"); - ArrayList<LinkedTreeMap> m = l.get(className + kid); - for (LinkedTreeMap linkedTreeMap : m) { - String uuid = linkedTreeMap.get("uuid").toString(); - resultList.add(uuid); - } - for (String uuid : resultList) { - Result<Boolean> deleteResult = client.data().deleter() - .withID(uuid) - .withClassName(className + kid) - .withConsistencyLevel(ConsistencyLevel.ALL) // default QUORUM - .run(); - } - } - - @Override - public void storeEmbeddings(List<String> chunkList, List<List<Double>> vectorList, String kid, String docId, List<String> fidList) { - WeaviateClient client = getClient(); - - for (int i = 0; i < Math.min(chunkList.size(), vectorList.size()); i++) { - List<Double> vector = vectorList.get(i); - Float[] vf = vector.stream().map(Double::floatValue).toArray(Float[]::new); - - Map<String, Object> dataSchema = new HashMap<>(); - dataSchema.put("content", chunkList.get(i)); - dataSchema.put("kid", kid); - dataSchema.put("docId", docId); - dataSchema.put("fid", fidList.get(i)); - String uuid = UUID.randomUUID().toString(); - dataSchema.put("uuid", uuid); - - Result<WeaviateObject> result = client.data().creator() - .withClassName(className + kid) - .withID(uuid) - .withVector(vf) - .withProperties(dataSchema) - .run(); - } - - } - - @Override - public void removeByDocId(String kid, String docId) { - List<String> resultList = new ArrayList<>(); - WeaviateClient client = getClient(); - Field fieldId = Field.builder().name("uuid").build(); - WhereFilter where = WhereFilter.builder() - .path(new String[]{"docId"}) - .operator(Operator.Equal) - .valueString(docId) - .build(); - Result<GraphQLResponse> result = client.graphQL().get() - .withClassName(className + kid) - .withFields(fieldId) - .withWhere(where) - .run(); - LinkedTreeMap<String, Object> t = (LinkedTreeMap<String, Object>) result.getResult().getData(); - LinkedTreeMap<String, ArrayList<LinkedTreeMap>> l = (LinkedTreeMap<String, ArrayList<LinkedTreeMap>>) t.get("Get"); - ArrayList<LinkedTreeMap> m = l.get(className + kid); - for (LinkedTreeMap linkedTreeMap : m) { - String uuid = linkedTreeMap.get("uuid").toString(); - resultList.add(uuid); - } - for (String uuid : resultList) { - Result<Boolean> deleteResult = client.data().deleter() - .withID(uuid) - .withClassName(className + kid) - .withConsistencyLevel(ConsistencyLevel.ALL) // default QUORUM - .run(); - } - } - - @Override - public void removeByKid(String kid) { - WeaviateClient client = getClient(); - Result<Boolean> result = client.schema().classDeleter().withClassName(className + kid).run(); - if (result.hasErrors()) { - System.out.println("鍒犻櫎schema澶辫触" + result.getError()); - } else { - System.out.println("鍒犻櫎schema鎴愬姛" + result.getResult()); - } - log.info("drop schema by kid, result = {}", result); - } - - @Override - public List<String> nearest(List<Double> queryVector, String kid) { - if (StringUtils.isBlank(kid)) { - return new ArrayList<String>(); - } - List<String> resultList = new ArrayList<>(); - Float[] vf = new Float[queryVector.size()]; - for (int j = 0; j < queryVector.size(); j++) { - Double value = queryVector.get(j); - vf[j] = value.floatValue(); - } - WeaviateClient client = getClient(); - Field contentField = Field.builder().name("content").build(); - Field _additional = Field.builder() - .name("_additional") - .fields(new Field[]{ - Field.builder().name("distance").build() - }).build(); - NearVectorArgument nearVector = NearVectorArgument.builder() - .vector(vf) - .distance(1.6f) // certainty = 1f - distance /2f - .build(); - KnowledgeInfoVo knowledgeInfoVo = knowledgeInfoService.queryById(Long.valueOf(kid)); - Result<GraphQLResponse> result = client.graphQL().get() - .withClassName(className + kid) - .withFields(contentField, _additional) - .withNearVector(nearVector) - .withLimit(knowledgeInfoVo.getRetrieveLimit()) - .run(); - LinkedTreeMap<String, Object> t = (LinkedTreeMap<String, Object>) result.getResult().getData(); - LinkedTreeMap<String, ArrayList<LinkedTreeMap>> l = (LinkedTreeMap<String, ArrayList<LinkedTreeMap>>) t.get("Get"); - ArrayList<LinkedTreeMap> m = l.get(className + kid); - for (LinkedTreeMap linkedTreeMap : m) { - String content = linkedTreeMap.get("content").toString(); - resultList.add(content); - } - return resultList; - } - - @Override - public List<String> nearest(String query, String kid) { - if (StringUtils.isBlank(kid)) { - return new ArrayList<String>(); - } - List<String> resultList = new ArrayList<>(); - WeaviateClient client = getClient(); - Field contentField = Field.builder().name("content").build(); - Field _additional = Field.builder() - .name("_additional") - .fields(new Field[]{ - Field.builder().name("distance").build() - }).build(); - NearTextArgument nearText = client.graphQL().arguments().nearTextArgBuilder() - .concepts(new String[]{query}) - .distance(1.6f) // certainty = 1f - distance /2f - .build(); - KnowledgeInfoVo knowledgeInfoVo = knowledgeInfoService.queryById(Long.valueOf(kid)); - Result<GraphQLResponse> result = client.graphQL().get() - .withClassName(className + kid) - .withFields(contentField, _additional) - .withNearText(nearText) - .withLimit(knowledgeInfoVo.getRetrieveLimit()) - .run(); - LinkedTreeMap<String, Object> t = (LinkedTreeMap<String, Object>) result.getResult().getData(); - LinkedTreeMap<String, ArrayList<LinkedTreeMap>> l = (LinkedTreeMap<String, ArrayList<LinkedTreeMap>>) t.get("Get"); - ArrayList<LinkedTreeMap> m = l.get(className + kid); - for (LinkedTreeMap linkedTreeMap : m) { - String content = linkedTreeMap.get("content").toString(); - resultList.add(content); - } - return resultList; - } - - public Result<Boolean> deleteSchema(String kid) { - WeaviateClient client = getClient(); - Result<Boolean> result = client.schema().classDeleter().withClassName(className + kid).run(); - if (result.hasErrors()) { - System.out.println(result.getError()); - } else { - System.out.println(result.getResult()); - } - return result; - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/constant/FileType.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/constant/FileType.java deleted file mode 100644 index 6a9451a..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/constant/FileType.java +++ /dev/null @@ -1,91 +0,0 @@ -package org.ruoyi.knowledge.constant; - -public class FileType { - public static final String TXT = "txt"; - public static final String CSV = "csv"; - public static final String MD = "md"; - public static final String DOC = "doc"; - public static final String DOCX = "docx"; - public static final String PDF = "pdf"; - - public static final String LOG = "log"; - public static final String XML = "xml"; - - public static final String JAVA = "java"; - public static final String HTML = "html"; - public static final String HTM = "htm"; - public static final String CSS = "css"; - public static final String JS = "js"; - public static final String PY = "py"; - public static final String CPP = "cpp"; - public static final String SQL = "sql"; - public static final String PHP = "php"; - public static final String RUBY = "ruby"; - public static final String C = "c"; - public static final String H = "h"; - public static final String HPP = "hpp"; - public static final String SWIFT = "swift"; - public static final String TS = "ts"; - public static final String RUST = "rs"; - public static final String PERL = "perl"; - public static final String SHELL = "shell"; - public static final String BAT = "bat"; - public static final String CMD = "cmd"; - - public static final String PROPERTIES = "properties"; - public static final String INI = "ini"; - public static final String YAML = "yaml"; - public static final String YML = "yml"; - - public static boolean isTextFile(String type){ - if (type.equalsIgnoreCase(TXT) || type.equalsIgnoreCase(CSV) || type.equalsIgnoreCase(PROPERTIES) - || type.equalsIgnoreCase(INI) || type.equalsIgnoreCase(YAML) || type.equalsIgnoreCase(YML) - || type.equalsIgnoreCase(LOG) || type.equalsIgnoreCase(XML)){ - return true; - } - else { - return false; - } - } - - public static boolean isCodeFile(String type){ - if (type.equalsIgnoreCase(JAVA) || type.equalsIgnoreCase(HTML) || type.equalsIgnoreCase(HTM) || type.equalsIgnoreCase(JS) || type.equalsIgnoreCase(PY) - || type.equalsIgnoreCase(CPP) || type.equalsIgnoreCase(SQL) || type.equalsIgnoreCase(PHP) || type.equalsIgnoreCase(RUBY) - || type.equalsIgnoreCase(C) || type.equalsIgnoreCase(H) || type.equalsIgnoreCase(HPP) || type.equalsIgnoreCase(SWIFT) - || type.equalsIgnoreCase(TS) || type.equalsIgnoreCase(RUST) || type.equalsIgnoreCase(PERL) || type.equalsIgnoreCase(SHELL) - || type.equalsIgnoreCase(BAT) || type.equalsIgnoreCase(CMD) || type.equalsIgnoreCase(CSS)){ - return true; - } - else { - return false; - } - } - - public static boolean isMdFile(String type){ - if (type.equalsIgnoreCase(MD)){ - return true; - } - else { - return false; - } - } - - public static boolean isWord(String type){ - if (type.equalsIgnoreCase(DOC) || type.equalsIgnoreCase(DOCX)){ - return true; - } - else { - return false; - } - } - - public static boolean isPdf(String type){ - if (type.equalsIgnoreCase(PDF)){ - return true; - } - else { - return false; - } - } - -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/KnowledgeAttach.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/KnowledgeAttach.java deleted file mode 100644 index 694018d..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/KnowledgeAttach.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.ruoyi.knowledge.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import org.ruoyi.common.mybatis.core.domain.BaseEntity; - -import java.io.Serializable; -import java.util.Date; - -/** - * 鐭ヨ瘑搴撻檮浠跺璞� knowledge_attach - * - * @author Lion Li - * @date 2024-10-21 - */ -@Data - -@TableName("knowledge_attach") -public class KnowledgeAttach extends BaseEntity { - - - @TableId(value = "id") - private Long id; - - /** - * 鐭ヨ瘑搴揑D - */ - private String kid; - - /** - * 鏂囨。ID - */ - private String docId; - - /** - * 鏂囨。鍚嶇О - */ - private String docName; - - /** - * 鏂囨。绫诲瀷 - */ - private String docType; - - /** - * 鏂囨。鍐呭 - */ - private String content; - -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/KnowledgeFragment.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/KnowledgeFragment.java deleted file mode 100644 index f733f06..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/KnowledgeFragment.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.ruoyi.knowledge.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import org.ruoyi.common.mybatis.core.domain.BaseEntity; - -import java.io.Serial; -import java.io.Serializable; -import java.util.Date; - -/** - * 鐭ヨ瘑鐗囨瀵硅薄 knowledge_fragment - * - * @author Lion Li - * @date 2024-10-21 - */ -@Data -@TableName("knowledge_fragment") -public class KnowledgeFragment extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - @TableId(value = "id") - private Long id; - - /** - * 鐭ヨ瘑搴揑D - */ - private String kid; - - /** - * 鏂囨。ID - */ - private String docId; - - /** - * 鐭ヨ瘑鐗囨ID - */ - private String fid; - - /** - * 鐗囨绱㈠紩涓嬫爣 - */ - private Integer idx; - - /** - * 鏂囨。鍐呭 - */ - private String content; - - -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/KnowledgeInfo.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/KnowledgeInfo.java deleted file mode 100644 index 4f1c482..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/KnowledgeInfo.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.ruoyi.knowledge.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import jakarta.validation.constraints.NotBlank; -import lombok.Data; -import org.ruoyi.common.mybatis.core.domain.BaseEntity; - -import java.io.Serial; -import java.io.Serializable; -import java.util.Date; - - -/** - * 鐭ヨ瘑搴撳璞� knowledge_info - * - * @author Lion Li - * @date 2024-10-21 - */ -@Data -@TableName("knowledge_info") -public class KnowledgeInfo extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * - */ - @TableId(value = "id") - private Long id; - - /** - * 鐭ヨ瘑搴揑D - */ - private String kid; - - /** - * 鐢ㄦ埛ID - */ - private Long uid; - - /** - * 鐭ヨ瘑搴撳悕绉� - */ - private String kname; - - /** - * 鏄惁鍏紑鐭ヨ瘑搴擄紙0 鍚� 1鏄級 - */ - private String share; - - /** - * 鎻忚堪 - */ - private String description; - - /** - * 鐭ヨ瘑鍒嗛殧绗� - */ - private String knowledgeSeparator; - - /** - * 鎻愰棶鍒嗛殧绗� - */ - private String questionSeparator; - - /** - * 閲嶅彔瀛楃鏁� - */ - private Integer overlapChar; - - /** - * 鐭ヨ瘑搴撲腑妫�绱㈢殑鏉℃暟 - */ - private Integer retrieveLimit; - - /** - * 鏂囨湰鍧楀ぇ灏� - */ - private Integer textBlockSize; - - /** - * 鍚戦噺搴� - */ - private String vector; - - /** - * 鍚戦噺妯″瀷 - */ - private String vectorModel; -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/bo/KnowledgeAttachBo.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/bo/KnowledgeAttachBo.java deleted file mode 100644 index 497e717..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/bo/KnowledgeAttachBo.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.ruoyi.knowledge.domain.bo; - -import io.github.linpeilie.annotations.AutoMapper; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.ruoyi.common.mybatis.core.domain.BaseEntity; -import org.ruoyi.knowledge.domain.KnowledgeAttach; - -/** - * 鐭ヨ瘑搴撻檮浠朵笟鍔″璞� knowledge_attach - * - * @author Lion Li - * @date 2024-10-21 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = KnowledgeAttach.class, reverseConvertGenerate = false) -public class KnowledgeAttachBo extends BaseEntity { - - @NotNull(message = "涓嶈兘涓虹┖") - private Long id; - - /** - * 鐭ヨ瘑搴揑D - */ - @NotBlank(message = "鐭ヨ瘑搴揑D涓嶈兘涓虹┖") - private String kid; - - /** - * 鏂囨。ID - */ - @NotBlank(message = "鏂囨。ID涓嶈兘涓虹┖") - private String docId; - - /** - * 鏂囨。鍚嶇О - */ - @NotBlank(message = "鏂囨。鍚嶇О涓嶈兘涓虹┖") - private String docName; - - /** - * 鏂囨。绫诲瀷 - */ - @NotBlank(message = "鏂囨。绫诲瀷涓嶈兘涓虹┖") - private String docType; - - /** - * 鏂囨。鍐呭 - */ - @NotBlank(message = "鏂囨。鍐呭涓嶈兘涓虹┖") - private String content; - - -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/bo/KnowledgeFragmentBo.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/bo/KnowledgeFragmentBo.java deleted file mode 100644 index be6bca1..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/bo/KnowledgeFragmentBo.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.ruoyi.knowledge.domain.bo; - -import io.github.linpeilie.annotations.AutoMapper; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.ruoyi.common.mybatis.core.domain.BaseEntity; -import org.ruoyi.knowledge.domain.KnowledgeFragment; - -/** - * 鐭ヨ瘑鐗囨涓氬姟瀵硅薄 knowledge_fragment - * - * @author Lion Li - * @date 2024-10-21 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = KnowledgeFragment.class, reverseConvertGenerate = false) -public class KnowledgeFragmentBo extends BaseEntity { - - /** - * - */ - @NotNull(message = "涓嶈兘涓虹┖") - private Long id; - - /** - * 鐭ヨ瘑搴揑D - */ - @NotBlank(message = "鐭ヨ瘑搴揑D涓嶈兘涓虹┖") - private String kid; - - /** - * 鏂囨。ID - */ - @NotBlank(message = "鏂囨。ID涓嶈兘涓虹┖") - private String docId; - - /** - * 鐭ヨ瘑鐗囨ID - */ - @NotBlank(message = "鐭ヨ瘑鐗囨ID涓嶈兘涓虹┖") - private String fid; - - /** - * 鐗囨绱㈠紩涓嬫爣 - */ - @NotNull(message = "鐗囨绱㈠紩涓嬫爣涓嶈兘涓虹┖") - private Long idx; - - /** - * 鏂囨。鍐呭 - */ - @NotBlank(message = "鏂囨。鍐呭涓嶈兘涓虹┖") - private String content; - - -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/bo/KnowledgeInfoBo.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/bo/KnowledgeInfoBo.java deleted file mode 100644 index b606d82..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/bo/KnowledgeInfoBo.java +++ /dev/null @@ -1,99 +0,0 @@ -package org.ruoyi.knowledge.domain.bo; - -import io.github.linpeilie.annotations.AutoMapper; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.ruoyi.common.mybatis.core.domain.BaseEntity; -import org.ruoyi.knowledge.domain.KnowledgeInfo; - -/** - * 鐭ヨ瘑搴撲笟鍔″璞� knowledge_info - * - * @author Lion Li - * @date 2024-10-21 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = KnowledgeInfo.class, reverseConvertGenerate = false) -public class KnowledgeInfoBo extends BaseEntity { - - /** - * - */ - @NotNull(message = "涓嶈兘涓虹┖") - private Long id; - - /** - * 鐭ヨ瘑搴揑D - */ - @NotBlank(message = "鐭ヨ瘑搴揑D涓嶈兘涓虹┖") - private String kid; - - /** - * 鐢ㄦ埛ID - */ - @NotNull(message = "鐢ㄦ埛ID涓嶈兘涓虹┖") - private Long uid; - - /** - * 鐭ヨ瘑搴撳悕绉� - */ - @NotBlank(message = "鐭ヨ瘑搴撳悕绉颁笉鑳戒负绌�") - private String kname; - - /** - * 鐭ヨ瘑搴撳悕绉� - */ - @NotBlank(message = "鏄惁鍏紑鐭ヨ瘑搴�") - private String share; - - /** - * 鎻忚堪 - */ - @NotBlank(message = "鎻忚堪涓嶈兘涓虹┖") - private String description; - - /** - * 鐭ヨ瘑鍒嗛殧绗� - */ - @NotBlank(message = "鐭ヨ瘑鍒嗛殧绗︿笉鑳戒负绌�") - private String knowledgeSeparator; - - /** - * 鎻愰棶鍒嗛殧绗� - */ - @NotBlank(message = "鎻愰棶鍒嗛殧绗︿笉鑳戒负绌�") - private String questionSeparator; - - /** - * 閲嶅彔瀛楃鏁� - */ - @NotNull(message = "閲嶅彔瀛楃鏁颁笉鑳戒负绌�") - private Integer overlapChar; - - /** - * 鐭ヨ瘑搴撲腑妫�绱㈢殑鏉℃暟 - */ - @NotNull(message = "鐭ヨ瘑搴撲腑妫�绱㈢殑鏉℃暟涓嶈兘涓虹┖") - private Integer retrieveLimit; - - /** - * 鏂囨湰鍧楀ぇ灏� - */ - @NotNull(message = "鏂囨湰鍧楀ぇ灏忎笉鑳戒负绌�") - private Integer textBlockSize; - - /** - * 鍚戦噺搴� - */ - @NotBlank(message = "鍚戦噺搴撲笉鑳戒负绌�") - private String vector; - - /** - * 鍚戦噺妯″瀷 - */ - @NotBlank(message = "鍚戦噺妯″瀷涓嶈兘涓虹┖") - private String vectorModel; -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/req/KnowledgeInfoUploadRequest.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/req/KnowledgeInfoUploadRequest.java deleted file mode 100644 index 866119d..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/req/KnowledgeInfoUploadRequest.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.ruoyi.knowledge.domain.req; - -import lombok.Data; -import org.springframework.web.multipart.MultipartFile; - -@Data -public class KnowledgeInfoUploadRequest { - - private String kid; - - private MultipartFile file; - -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/request.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/request.java deleted file mode 100644 index 9a84995..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/request.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.ruoyi.knowledge.domain; - -public class request { -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/vo/KnowledgeAttachVo.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/vo/KnowledgeAttachVo.java deleted file mode 100644 index bd0b141..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/vo/KnowledgeAttachVo.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.ruoyi.knowledge.domain.vo; - -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import org.ruoyi.knowledge.domain.KnowledgeAttach; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 鐭ヨ瘑搴撻檮浠惰鍥惧璞� knowledge_attach - * - * @author Lion Li - * @date 2024-10-21 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = KnowledgeAttach.class) -public class KnowledgeAttachVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * - */ - @ExcelProperty(value = "") - private Long id; - - /** - * 鐭ヨ瘑搴揑D - */ - @ExcelProperty(value = "鐭ヨ瘑搴揑D") - private String kid; - - /** - * 鏂囨。ID - */ - @ExcelProperty(value = "鏂囨。ID") - private String docId; - - /** - * 鏂囨。鍚嶇О - */ - @ExcelProperty(value = "鏂囨。鍚嶇О") - private String docName; - - /** - * 鏂囨。绫诲瀷 - */ - @ExcelProperty(value = "鏂囨。绫诲瀷") - private String docType; - - /** - * 鏂囨。鍐呭 - */ - @ExcelProperty(value = "鏂囨。鍐呭") - private String content; - - -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/vo/KnowledgeFragmentVo.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/vo/KnowledgeFragmentVo.java deleted file mode 100644 index 630bbe0..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/vo/KnowledgeFragmentVo.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.ruoyi.knowledge.domain.vo; - -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import org.ruoyi.knowledge.domain.KnowledgeFragment; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 鐭ヨ瘑鐗囨瑙嗗浘瀵硅薄 knowledge_fragment - * - * @author Lion Li - * @date 2024-10-21 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = KnowledgeFragment.class) -public class KnowledgeFragmentVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * - */ - @ExcelProperty(value = "") - private Long id; - - /** - * 鐭ヨ瘑搴揑D - */ - @ExcelProperty(value = "鐭ヨ瘑搴揑D") - private String kid; - - /** - * 鏂囨。ID - */ - @ExcelProperty(value = "鏂囨。ID") - private String docId; - - /** - * 鐭ヨ瘑鐗囨ID - */ - @ExcelProperty(value = "鐭ヨ瘑鐗囨ID") - private String fid; - - /** - * 鐗囨绱㈠紩涓嬫爣 - */ - @ExcelProperty(value = "鐗囨绱㈠紩涓嬫爣") - private Long idx; - - /** - * 鏂囨。鍐呭 - */ - @ExcelProperty(value = "鏂囨。鍐呭") - private String content; - -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/vo/KnowledgeInfoVo.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/vo/KnowledgeInfoVo.java deleted file mode 100644 index a47b5d6..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/domain/vo/KnowledgeInfoVo.java +++ /dev/null @@ -1,102 +0,0 @@ -package org.ruoyi.knowledge.domain.vo; - -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import org.ruoyi.knowledge.domain.KnowledgeInfo; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 鐭ヨ瘑搴撹鍥惧璞� knowledge_info - * - * @author Lion Li - * @date 2024-10-21 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = KnowledgeInfo.class) -public class KnowledgeInfoVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * - */ - @ExcelProperty(value = "") - private Long id; - - /** - * 鐭ヨ瘑搴揑D - */ - @ExcelProperty(value = "鐭ヨ瘑搴揑D") - private String kid; - - /** - * 鐢ㄦ埛ID - */ - @ExcelProperty(value = "鐢ㄦ埛ID") - private Long uid; - - /** - * 鐭ヨ瘑搴撳悕绉� - */ - @ExcelProperty(value = "鐭ヨ瘑搴撳悕绉�") - private String kname; - - /** - * 鐭ヨ瘑搴撳悕绉� - */ - private String share; - - /** - * 鎻忚堪 - */ - @ExcelProperty(value = "鎻忚堪") - private String description; - - /** - * 鐭ヨ瘑鍒嗛殧绗� - */ - @ExcelProperty(value = "鐭ヨ瘑鍒嗛殧绗�") - private String knowledgeSeparator; - - /** - * 鎻愰棶鍒嗛殧绗� - */ - @ExcelProperty(value = "鎻愰棶鍒嗛殧绗�") - private String questionSeparator; - - /** - * 閲嶅彔瀛楃鏁� - */ - @ExcelProperty(value = "閲嶅彔瀛楃鏁�") - private Integer overlapChar; - - /** - * 鐭ヨ瘑搴撲腑妫�绱㈢殑鏉℃暟 - */ - @ExcelProperty(value = "鐭ヨ瘑搴撲腑妫�绱㈢殑鏉℃暟") - private Integer retrieveLimit; - - /** - * 鏂囨湰鍧楀ぇ灏� - */ - @ExcelProperty(value = "鏂囨湰鍧楀ぇ灏�") - private Integer textBlockSize; - - /** - * 鍚戦噺搴� - */ - @ExcelProperty(value = "鍚戦噺搴�") - private String vector; - - /** - * 鍚戦噺妯″瀷 - */ - @ExcelProperty(value = "鍚戦噺妯″瀷") - private String vectorModel; -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/mapper/KnowledgeAttachMapper.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/mapper/KnowledgeAttachMapper.java deleted file mode 100644 index ec7d264..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/mapper/KnowledgeAttachMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.ruoyi.knowledge.mapper; - -import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; -import org.ruoyi.knowledge.domain.KnowledgeAttach; -import org.ruoyi.knowledge.domain.vo.KnowledgeAttachVo; - -/** - * 鐭ヨ瘑搴撻檮浠禡apper鎺ュ彛 - * - * @author Lion Li - * @date 2024-10-21 - */ -public interface KnowledgeAttachMapper extends BaseMapperPlus<KnowledgeAttach, KnowledgeAttachVo> { - -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/mapper/KnowledgeFragmentMapper.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/mapper/KnowledgeFragmentMapper.java deleted file mode 100644 index 92d9ccb..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/mapper/KnowledgeFragmentMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.ruoyi.knowledge.mapper; - -import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; -import org.ruoyi.knowledge.domain.KnowledgeFragment; -import org.ruoyi.knowledge.domain.vo.KnowledgeFragmentVo; - -/** - * 鐭ヨ瘑鐗囨Mapper鎺ュ彛 - * - * @author Lion Li - * @date 2024-10-21 - */ -public interface KnowledgeFragmentMapper extends BaseMapperPlus<KnowledgeFragment, KnowledgeFragmentVo> { - -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/mapper/KnowledgeInfoMapper.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/mapper/KnowledgeInfoMapper.java deleted file mode 100644 index 1984e0a..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/mapper/KnowledgeInfoMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.ruoyi.knowledge.mapper; - -import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; -import org.ruoyi.knowledge.domain.KnowledgeInfo; -import org.ruoyi.knowledge.domain.vo.KnowledgeInfoVo; - -/** - * 鐭ヨ瘑搴揗apper鎺ュ彛 - * - * @author Lion Li - * @date 2024-10-21 - */ -public interface KnowledgeInfoMapper extends BaseMapperPlus<KnowledgeInfo, KnowledgeInfoVo> { - -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/EmbeddingService.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/EmbeddingService.java deleted file mode 100644 index a4dd30d..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/EmbeddingService.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.ruoyi.knowledge.service; - -import java.util.List; - -public interface EmbeddingService { - - void storeEmbeddings(List<String> chunkList, String kid, String docId,List<String> fidList); - - void removeByDocId(String kid,String docId); - - void removeByKid(String kid); - - List<Double> getQueryVector(String query, String kid); - - void createSchema(String kid); - - void removeByKidAndFid(String kid, String fid); - - void saveFragment(String kid, String docId, String fid, String content); -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/IKnowledgeAttachService.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/IKnowledgeAttachService.java deleted file mode 100644 index 6ed856e..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/IKnowledgeAttachService.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.ruoyi.knowledge.service; - -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.knowledge.domain.bo.KnowledgeAttachBo; -import org.ruoyi.knowledge.domain.vo.KnowledgeAttachVo; - -import java.util.Collection; -import java.util.List; - -/** - * 鐭ヨ瘑搴撻檮浠禨ervice鎺ュ彛 - * - * @author Lion Li - * @date 2024-10-21 - */ -public interface IKnowledgeAttachService { - - /** - * 鏌ヨ鐭ヨ瘑搴撻檮浠� - */ - KnowledgeAttachVo queryById(Long id); - - /** - * 鏌ヨ鐭ヨ瘑搴撻檮浠跺垪琛� - */ - TableDataInfo<KnowledgeAttachVo> queryPageList(KnowledgeAttachBo bo, PageQuery pageQuery); - - /** - * 鏌ヨ鐭ヨ瘑搴撻檮浠跺垪琛� - */ - List<KnowledgeAttachVo> queryList(KnowledgeAttachBo bo); - - /** - * 鏂板鐭ヨ瘑搴撻檮浠� - */ - Boolean insertByBo(KnowledgeAttachBo bo); - - /** - * 淇敼鐭ヨ瘑搴撻檮浠� - */ - Boolean updateByBo(KnowledgeAttachBo bo); - - /** - * 鏍¢獙骞舵壒閲忓垹闄ょ煡璇嗗簱闄勪欢淇℃伅 - */ - Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); - - - /** - * 鍒犻櫎鐭ヨ瘑闄勪欢 - */ - void removeKnowledgeAttach(String docId); -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/IKnowledgeFragmentService.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/IKnowledgeFragmentService.java deleted file mode 100644 index 7546a1d..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/IKnowledgeFragmentService.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.ruoyi.knowledge.service; - -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.knowledge.domain.bo.KnowledgeFragmentBo; -import org.ruoyi.knowledge.domain.vo.KnowledgeFragmentVo; - -import java.util.Collection; -import java.util.List; - -/** - * 鐭ヨ瘑鐗囨Service鎺ュ彛 - * - * @author Lion Li - * @date 2024-10-21 - */ -public interface IKnowledgeFragmentService { - - /** - * 鏌ヨ鐭ヨ瘑鐗囨 - */ - KnowledgeFragmentVo queryById(Long id); - - /** - * 鏌ヨ鐭ヨ瘑鐗囨鍒楄〃 - */ - TableDataInfo<KnowledgeFragmentVo> queryPageList(KnowledgeFragmentBo bo, PageQuery pageQuery); - - /** - * 鏌ヨ鐭ヨ瘑鐗囨鍒楄〃 - */ - List<KnowledgeFragmentVo> queryList(KnowledgeFragmentBo bo); - - /** - * 鏂板鐭ヨ瘑鐗囨 - */ - Boolean insertByBo(KnowledgeFragmentBo bo); - - /** - * 淇敼鐭ヨ瘑鐗囨 - */ - Boolean updateByBo(KnowledgeFragmentBo bo); - - /** - * 鏍¢獙骞舵壒閲忓垹闄ょ煡璇嗙墖娈典俊鎭� - */ - Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/IKnowledgeInfoService.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/IKnowledgeInfoService.java deleted file mode 100644 index 14e8e97..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/IKnowledgeInfoService.java +++ /dev/null @@ -1,60 +0,0 @@ -package org.ruoyi.knowledge.service; - -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.knowledge.domain.bo.KnowledgeInfoBo; -import org.ruoyi.knowledge.domain.req.KnowledgeInfoUploadRequest; -import org.ruoyi.knowledge.domain.vo.KnowledgeInfoVo; - -import java.util.List; - -/** - * 鐭ヨ瘑搴揝ervice鎺ュ彛 - * - * @author Lion Li - * @date 2024-10-21 - */ -public interface IKnowledgeInfoService { - - /** - * 鏌ヨ鐭ヨ瘑搴� - */ - KnowledgeInfoVo queryById(Long id); - - /** - * 鏌ヨ鐭ヨ瘑搴撳垪琛� - */ - TableDataInfo<KnowledgeInfoVo> queryPageList(KnowledgeInfoBo bo, PageQuery pageQuery); - - /** - * 鏌ヨ鐭ヨ瘑搴撳垪琛� - */ - List<KnowledgeInfoVo> queryList(KnowledgeInfoBo bo); - - - /** - * 淇敼鐭ヨ瘑搴� - */ - Boolean updateByBo(KnowledgeInfoBo bo); - - /** - * 鏂板鐭ヨ瘑搴� - */ - void saveOne(KnowledgeInfoBo bo); - - /** - * 涓婁紶闄勪欢 - */ - void upload(KnowledgeInfoUploadRequest request); - - /** - * 鍒犻櫎鐭ヨ瘑搴� - */ - void removeKnowledge(String id); - - /** - * 妫�鏌ユ槸鍚︽湁鍒犻櫎鏉冮檺 - * @param knowledgeInfoList 鐭ヨ瘑鍒楄〃 - */ - void check(List<KnowledgeInfoVo> knowledgeInfoList); -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/impl/EmbeddingServiceImpl.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/impl/EmbeddingServiceImpl.java deleted file mode 100644 index 96e568a..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/impl/EmbeddingServiceImpl.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.ruoyi.knowledge.service.impl; - -import lombok.AllArgsConstructor; -import org.ruoyi.knowledge.chain.vectorizer.Vectorization; -import org.ruoyi.knowledge.chain.vectorstore.VectorStore; -import org.ruoyi.knowledge.service.EmbeddingService; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.List; - -@Service -@AllArgsConstructor -public class EmbeddingServiceImpl implements EmbeddingService { - - private final VectorStore vectorStore; - private final Vectorization vectorization; - - /** - * 淇濆瓨鍚戦噺鏁版嵁搴� - * @param chunkList 鏂囨。鎸夎鍒囧垎鐨勭墖娈� - * @param kid 鐭ヨ瘑搴揑D - * @param docId 鏂囨。ID - */ - @Override - public void storeEmbeddings(List<String> chunkList, String kid, String docId,List<String> fidList) { - List<List<Double>> vectorList = vectorization.batchVectorization(chunkList, kid); - vectorStore.storeEmbeddings(chunkList,vectorList,kid,docId,fidList); - } - - @Override - public void removeByDocId(String kid,String docId) { - vectorStore.removeByDocId(kid,docId); - } - - @Override - public void removeByKid(String kid) { - vectorStore.removeByKid(kid); - } - - @Override - public List<Double> getQueryVector(String query, String kid) { - return vectorization.singleVectorization(query,kid); - } - - @Override - public void createSchema(String kid) { - vectorStore.newSchema(kid); - } - - @Override - public void removeByKidAndFid(String kid, String fid) { - vectorStore.removeByKidAndFid(kid,fid); - } - - @Override - public void saveFragment(String kid, String docId, String fid, String content) { - List<String> chunkList = new ArrayList<>(); - List<String> fidList = new ArrayList<>(); - chunkList.add(content); - fidList.add(fid); - storeEmbeddings(chunkList,kid,docId,fidList); - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/impl/KnowledgeAttachServiceImpl.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/impl/KnowledgeAttachServiceImpl.java deleted file mode 100644 index 8ae5340..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/impl/KnowledgeAttachServiceImpl.java +++ /dev/null @@ -1,135 +0,0 @@ -package org.ruoyi.knowledge.service.impl; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import lombok.RequiredArgsConstructor; -import org.ruoyi.common.core.domain.model.LoginUser; -import org.ruoyi.common.core.utils.MapstructUtils; -import org.ruoyi.common.core.utils.StringUtils; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.common.satoken.utils.LoginHelper; -import org.ruoyi.knowledge.domain.KnowledgeAttach; -import org.ruoyi.knowledge.domain.bo.KnowledgeAttachBo; -import org.ruoyi.knowledge.domain.vo.KnowledgeAttachVo; -import org.ruoyi.knowledge.domain.vo.KnowledgeInfoVo; -import org.ruoyi.knowledge.mapper.KnowledgeAttachMapper; -import org.ruoyi.knowledge.mapper.KnowledgeFragmentMapper; -import org.ruoyi.knowledge.mapper.KnowledgeInfoMapper; -import org.ruoyi.knowledge.service.IKnowledgeAttachService; -import org.ruoyi.knowledge.service.IKnowledgeInfoService; -import org.springframework.stereotype.Service; - -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * 鐭ヨ瘑搴撻檮浠禨ervice涓氬姟灞傚鐞� - * - * @author Lion Li - * @date 2024-10-21 - */ -@RequiredArgsConstructor -@Service -public class KnowledgeAttachServiceImpl implements IKnowledgeAttachService { - - private final KnowledgeAttachMapper baseMapper; - - private final KnowledgeFragmentMapper fragmentMapper; - - private final KnowledgeInfoMapper knowledgeInfoMapper; - - private final IKnowledgeInfoService knowledgeInfoService; - - - /** - * 鏌ヨ鐭ヨ瘑搴撻檮浠� - */ - @Override - public KnowledgeAttachVo queryById(Long id){ - return baseMapper.selectVoById(id); - } - - /** - * 鏌ヨ鐭ヨ瘑搴撻檮浠跺垪琛� - */ - @Override - public TableDataInfo<KnowledgeAttachVo> queryPageList(KnowledgeAttachBo bo, PageQuery pageQuery) { - LambdaQueryWrapper<KnowledgeAttach> lqw = buildQueryWrapper(bo); - Page<KnowledgeAttachVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 鏌ヨ鐭ヨ瘑搴撻檮浠跺垪琛� - */ - @Override - public List<KnowledgeAttachVo> queryList(KnowledgeAttachBo bo) { - LambdaQueryWrapper<KnowledgeAttach> lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - private LambdaQueryWrapper<KnowledgeAttach> buildQueryWrapper(KnowledgeAttachBo bo) { - Map<String, Object> params = bo.getParams(); - LambdaQueryWrapper<KnowledgeAttach> lqw = Wrappers.lambdaQuery(); - lqw.eq(StringUtils.isNotBlank(bo.getKid()), KnowledgeAttach::getKid, bo.getKid()); - lqw.eq(StringUtils.isNotBlank(bo.getDocId()), KnowledgeAttach::getDocId, bo.getDocId()); - lqw.like(StringUtils.isNotBlank(bo.getDocName()), KnowledgeAttach::getDocName, bo.getDocName()); - lqw.eq(StringUtils.isNotBlank(bo.getDocType()), KnowledgeAttach::getDocType, bo.getDocType()); - lqw.eq(StringUtils.isNotBlank(bo.getContent()), KnowledgeAttach::getContent, bo.getContent()); - return lqw; - } - - /** - * 鏂板鐭ヨ瘑搴撻檮浠� - */ - @Override - public Boolean insertByBo(KnowledgeAttachBo bo) { - KnowledgeAttach add = MapstructUtils.convert(bo, KnowledgeAttach.class); - validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); - } - return flag; - } - - /** - * 淇敼鐭ヨ瘑搴撻檮浠� - */ - @Override - public Boolean updateByBo(KnowledgeAttachBo bo) { - KnowledgeAttach update = MapstructUtils.convert(bo, KnowledgeAttach.class); - validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; - } - - /** - * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙 - */ - private void validEntityBeforeSave(KnowledgeAttach entity){ - //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫 - } - - /** - * 鎵归噺鍒犻櫎鐭ヨ瘑搴撻檮浠� - */ - @Override - public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { - if(isValid){ - //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� - } - return baseMapper.deleteBatchIds(ids) > 0; - } - - @Override - public void removeKnowledgeAttach(String docId) { - Map<String,Object> map = new HashMap<>(); - map.put("doc_id",docId); - baseMapper.deleteByMap(map); - fragmentMapper.deleteByMap(map); - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/impl/KnowledgeFragmentServiceImpl.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/impl/KnowledgeFragmentServiceImpl.java deleted file mode 100644 index ff6efcc..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/impl/KnowledgeFragmentServiceImpl.java +++ /dev/null @@ -1,113 +0,0 @@ -package org.ruoyi.knowledge.service.impl; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import lombok.RequiredArgsConstructor; -import org.ruoyi.common.core.utils.MapstructUtils; -import org.ruoyi.common.core.utils.StringUtils; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.knowledge.domain.KnowledgeFragment; -import org.ruoyi.knowledge.domain.bo.KnowledgeFragmentBo; -import org.ruoyi.knowledge.domain.vo.KnowledgeFragmentVo; -import org.ruoyi.knowledge.mapper.KnowledgeFragmentMapper; -import org.ruoyi.knowledge.service.IKnowledgeFragmentService; -import org.springframework.stereotype.Service; - -import java.util.Collection; -import java.util.List; -import java.util.Map; -/** - * 鐭ヨ瘑鐗囨Service涓氬姟灞傚鐞� - * - * @author Lion Li - * @date 2024-10-21 - */ -@RequiredArgsConstructor -@Service -public class KnowledgeFragmentServiceImpl implements IKnowledgeFragmentService { - - private final KnowledgeFragmentMapper baseMapper; - - /** - * 鏌ヨ鐭ヨ瘑鐗囨 - */ - @Override - public KnowledgeFragmentVo queryById(Long id){ - return baseMapper.selectVoById(id); - } - - /** - * 鏌ヨ鐭ヨ瘑鐗囨鍒楄〃 - */ - @Override - public TableDataInfo<KnowledgeFragmentVo> queryPageList(KnowledgeFragmentBo bo, PageQuery pageQuery) { - LambdaQueryWrapper<KnowledgeFragment> lqw = buildQueryWrapper(bo); - lqw.eq(KnowledgeFragment::getDocId, bo.getDocId()); - Page<KnowledgeFragmentVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 鏌ヨ鐭ヨ瘑鐗囨鍒楄〃 - */ - @Override - public List<KnowledgeFragmentVo> queryList(KnowledgeFragmentBo bo) { - LambdaQueryWrapper<KnowledgeFragment> lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - private LambdaQueryWrapper<KnowledgeFragment> buildQueryWrapper(KnowledgeFragmentBo bo) { - Map<String, Object> params = bo.getParams(); - LambdaQueryWrapper<KnowledgeFragment> lqw = Wrappers.lambdaQuery(); - lqw.eq(StringUtils.isNotBlank(bo.getKid()), KnowledgeFragment::getKid, bo.getKid()); - lqw.eq(StringUtils.isNotBlank(bo.getDocId()), KnowledgeFragment::getDocId, bo.getDocId()); - lqw.eq(StringUtils.isNotBlank(bo.getFid()), KnowledgeFragment::getFid, bo.getFid()); - lqw.eq(bo.getIdx() != null, KnowledgeFragment::getIdx, bo.getIdx()); - lqw.eq(StringUtils.isNotBlank(bo.getContent()), KnowledgeFragment::getContent, bo.getContent()); - return lqw; - } - - /** - * 鏂板鐭ヨ瘑鐗囨 - */ - @Override - public Boolean insertByBo(KnowledgeFragmentBo bo) { - KnowledgeFragment add = MapstructUtils.convert(bo, KnowledgeFragment.class); - validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); - } - return flag; - } - - /** - * 淇敼鐭ヨ瘑鐗囨 - */ - @Override - public Boolean updateByBo(KnowledgeFragmentBo bo) { - KnowledgeFragment update = MapstructUtils.convert(bo, KnowledgeFragment.class); - validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; - } - - /** - * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙 - */ - private void validEntityBeforeSave(KnowledgeFragment entity){ - //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫 - } - - /** - * 鎵归噺鍒犻櫎鐭ヨ瘑鐗囨 - */ - @Override - public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { - if(isValid){ - //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� - } - return baseMapper.deleteBatchIds(ids) > 0; - } -} diff --git a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/impl/KnowledgeInfoServiceImpl.java b/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/impl/KnowledgeInfoServiceImpl.java deleted file mode 100644 index 23f255b..0000000 --- a/ruoyi-modules/ruoyi-knowledge/src/main/java/org/ruoyi/knowledge/service/impl/KnowledgeInfoServiceImpl.java +++ /dev/null @@ -1,200 +0,0 @@ -package org.ruoyi.knowledge.service.impl; - -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.util.RandomUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import org.ruoyi.common.core.domain.model.LoginUser; -import org.ruoyi.common.core.utils.MapstructUtils; -import org.ruoyi.common.core.utils.StringUtils; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.common.satoken.utils.LoginHelper; -import org.ruoyi.knowledge.chain.loader.ResourceLoader; -import org.ruoyi.knowledge.chain.loader.ResourceLoaderFactory; -import org.ruoyi.knowledge.domain.KnowledgeAttach; -import org.ruoyi.knowledge.domain.KnowledgeFragment; -import org.ruoyi.knowledge.domain.KnowledgeInfo; -import org.ruoyi.knowledge.domain.bo.KnowledgeInfoBo; -import org.ruoyi.knowledge.domain.req.KnowledgeInfoUploadRequest; -import org.ruoyi.knowledge.domain.vo.KnowledgeInfoVo; -import org.ruoyi.knowledge.mapper.KnowledgeAttachMapper; -import org.ruoyi.knowledge.mapper.KnowledgeFragmentMapper; -import org.ruoyi.knowledge.mapper.KnowledgeInfoMapper; -import org.ruoyi.knowledge.service.EmbeddingService; -import org.ruoyi.knowledge.service.IKnowledgeInfoService; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.multipart.MultipartFile; - -import java.io.IOException; -import java.util.*; - -/** - * 鐭ヨ瘑搴揝ervice涓氬姟灞傚鐞� - * - * @author Lion Li - * @date 2024-10-21 - */ -@Service -@RequiredArgsConstructor -public class KnowledgeInfoServiceImpl implements IKnowledgeInfoService { - - private final KnowledgeInfoMapper baseMapper; - - private final EmbeddingService embeddingService; - - private final ResourceLoaderFactory resourceLoaderFactory; - - private final KnowledgeFragmentMapper fragmentMapper; - - private final KnowledgeAttachMapper attachMapper; - - /** - * 鏌ヨ鐭ヨ瘑搴� - */ - @Override - public KnowledgeInfoVo queryById(Long id){ - return baseMapper.selectVoById(id); - } - - /** - * 鏌ヨ鐭ヨ瘑搴撳垪琛� - */ - @Override - public TableDataInfo<KnowledgeInfoVo> queryPageList(KnowledgeInfoBo bo, PageQuery pageQuery) { - LambdaQueryWrapper<KnowledgeInfo> lqw = buildQueryWrapper(bo); - Page<KnowledgeInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 鏌ヨ鐭ヨ瘑搴撳垪琛� - */ - @Override - public List<KnowledgeInfoVo> queryList(KnowledgeInfoBo bo) { - LambdaQueryWrapper<KnowledgeInfo> lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - private LambdaQueryWrapper<KnowledgeInfo> buildQueryWrapper(KnowledgeInfoBo bo) { - LambdaQueryWrapper<KnowledgeInfo> lqw = Wrappers.lambdaQuery(); - lqw.eq(StringUtils.isNotBlank(bo.getKid()), KnowledgeInfo::getKid, bo.getKid()); - lqw.eq(bo.getUid() != null, KnowledgeInfo::getUid, bo.getUid()); - lqw.like(StringUtils.isNotBlank(bo.getKname()), KnowledgeInfo::getKname, bo.getKname()); - lqw.eq(StringUtils.isNotBlank(bo.getDescription()), KnowledgeInfo::getDescription, bo.getDescription()); - // 鏌ヨ鍏紑鐨勭煡璇嗗簱 - lqw.or(wrapper -> wrapper.eq(KnowledgeInfo::getShare, "1")); - return lqw; - } - - /** - * 淇敼鐭ヨ瘑搴� - */ - @Override - public Boolean updateByBo(KnowledgeInfoBo bo) { - KnowledgeInfo update = MapstructUtils.convert(bo, KnowledgeInfo.class); - validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; - } - - /** - * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙 - */ - private void validEntityBeforeSave(KnowledgeInfo entity){ - //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫 - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void saveOne(KnowledgeInfoBo bo) { - KnowledgeInfo knowledgeInfo = MapstructUtils.convert(bo, KnowledgeInfo.class); - if (StringUtils.isBlank(bo.getKid())){ - String kid = RandomUtil.randomString(10); - if (knowledgeInfo != null) { - knowledgeInfo.setKid(kid); - knowledgeInfo.setUid(LoginHelper.getLoginUser().getUserId()); - } - baseMapper.insert(knowledgeInfo); - embeddingService.createSchema(String.valueOf(knowledgeInfo.getId())); - }else { - baseMapper.updateById(knowledgeInfo); - } - } - - @Override - public void upload(KnowledgeInfoUploadRequest request) { - storeContent(request.getFile(), request.getKid()); - } - - public void storeContent(MultipartFile file, String kid) { - String fileName = file.getOriginalFilename(); - List<String> chunkList = new ArrayList<>(); - KnowledgeAttach knowledgeAttach = new KnowledgeAttach(); - knowledgeAttach.setKid(kid); - String docId = RandomUtil.randomString(10); - knowledgeAttach.setDocId(docId); - knowledgeAttach.setDocName(fileName); - knowledgeAttach.setDocType(fileName.substring(fileName.lastIndexOf(".")+1)); - String content = ""; - ResourceLoader resourceLoader = resourceLoaderFactory.getLoaderByFileType(knowledgeAttach.getDocType()); - List<String> fids = new ArrayList<>(); - try { - content = resourceLoader.getContent(file.getInputStream()); - chunkList = resourceLoader.getChunkList(content, kid); - List<KnowledgeFragment> knowledgeFragmentList = new ArrayList<>(); - if (CollUtil.isNotEmpty(chunkList)) { - for (int i = 0; i < chunkList.size(); i++) { - String fid = RandomUtil.randomString(16); - fids.add(fid); - KnowledgeFragment knowledgeFragment = new KnowledgeFragment(); - knowledgeFragment.setKid(kid); - knowledgeFragment.setDocId(docId); - knowledgeFragment.setFid(fid); - knowledgeFragment.setIdx(i); - // String text = convertTextBlockToPretrainData(chunkList.get(i)); - knowledgeFragment.setContent(chunkList.get(i)); - knowledgeFragment.setCreateTime(new Date()); - knowledgeFragmentList.add(knowledgeFragment); - } - } - fragmentMapper.insertBatch(knowledgeFragmentList); - } catch (IOException e) { - e.printStackTrace(); - } - knowledgeAttach.setContent(content); - knowledgeAttach.setCreateTime(new Date()); - attachMapper.insert(knowledgeAttach); - embeddingService.storeEmbeddings(chunkList,kid,docId,fids); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public void removeKnowledge(String id) { - Map<String,Object> map = new HashMap<>(); - map.put("kid",id); - List<KnowledgeInfoVo> knowledgeInfoList = baseMapper.selectVoByMap(map); - check(knowledgeInfoList); - // 鍒犻櫎鍚戦噺搴撲俊鎭� - knowledgeInfoList.forEach(knowledgeInfoVo -> { - embeddingService.removeByKid(String.valueOf(knowledgeInfoVo.getId())); - }); - // 鍒犻櫎闄勪欢鍜岀煡璇嗙墖娈� - fragmentMapper.deleteByMap(map); - attachMapper.deleteByMap(map); - // 鍒犻櫎鐭ヨ瘑搴� - baseMapper.deleteByMap(map); - } - - @Override - public void check(List<KnowledgeInfoVo> knowledgeInfoList){ - LoginUser loginUser = LoginHelper.getLoginUser(); - for (KnowledgeInfoVo knowledgeInfoVo : knowledgeInfoList) { - if(!knowledgeInfoVo.getUid().equals(loginUser.getUserId())){ - throw new SecurityException("鏉冮檺涓嶈冻"); - } - } - } -} diff --git a/ruoyi-modules/ruoyi-system/pom.xml b/ruoyi-modules/ruoyi-system/pom.xml index 17d37c5..a22691d 100644 --- a/ruoyi-modules/ruoyi-system/pom.xml +++ b/ruoyi-modules/ruoyi-system/pom.xml @@ -118,17 +118,19 @@ <groupId>org.ruoyi</groupId> <artifactId>ruoyi-common-pay</artifactId> </dependency> - <dependency> - <groupId>io.github.ollama4j</groupId> - <artifactId>ollama4j</artifactId> - <version>1.0.79</version> - <scope>compile</scope> - </dependency> + + <dependency> <groupId>org.ruoyi</groupId> <artifactId>ruoyi-common-mail</artifactId> </dependency> + + <dependency> + <groupId>org.ruoyi</groupId> + <artifactId>ruoyi-system-api</artifactId> + </dependency> + </dependencies> </project> diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/builder/AbstractBuilder.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/builder/AbstractBuilder.java deleted file mode 100644 index 1876337..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/builder/AbstractBuilder.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.ruoyi.system.builder; - -import me.chanjar.weixin.cp.api.WxCpService; -import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage; -import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * @author <a href="https://github.com/binarywang">Binary Wang</a> - */ -public abstract class AbstractBuilder { - protected final Logger logger = LoggerFactory.getLogger(getClass()); - - public abstract WxCpXmlOutMessage build(String content, WxCpXmlMessage wxMessage, WxCpService service); -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/builder/ImageBuilder.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/builder/ImageBuilder.java deleted file mode 100644 index 048372e..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/builder/ImageBuilder.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.ruoyi.system.builder; - -import me.chanjar.weixin.cp.api.WxCpService; -import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage; -import me.chanjar.weixin.cp.bean.message.WxCpXmlOutImageMessage; -import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage; - - -/** - * @author <a href="https://github.com/binarywang">Binary Wang</a> - */ -public class ImageBuilder extends AbstractBuilder { - - @Override - public WxCpXmlOutMessage build(String content, WxCpXmlMessage wxMessage, - WxCpService service) { - - WxCpXmlOutImageMessage m = WxCpXmlOutMessage.IMAGE().mediaId(content) - .fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName()) - .build(); - - return m; - } - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/builder/TextBuilder.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/builder/TextBuilder.java deleted file mode 100644 index c60fe8f..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/builder/TextBuilder.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.ruoyi.system.builder; - -import me.chanjar.weixin.cp.api.WxCpService; -import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage; -import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage; -import me.chanjar.weixin.cp.bean.message.WxCpXmlOutTextMessage; - -/** - * @author <a href="https://github.com/binarywang">Binary Wang</a> - */ -public class TextBuilder extends AbstractBuilder { - - @Override - public WxCpXmlOutMessage build(String content, WxCpXmlMessage wxMessage, - WxCpService service) { - WxCpXmlOutTextMessage m = WxCpXmlOutMessage.TEXT().content(content) - .fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName()) - .build(); - return m; - } - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/cofing/GptConfig.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/cofing/GptConfig.java deleted file mode 100644 index 1200f51..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/cofing/GptConfig.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.ruoyi.system.cofing; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -import java.util.List; - -/** - * gpt閰嶇疆 - * - * @author ashinnotfound - * @date 2023/03/04 - */ -@Data -@Component -@ConfigurationProperties("gpt") -public class GptConfig { - private String baseUrl; - private String model; - private Integer maxToken; - private Double temperature; - private List<String> basicPrompt; - private List<String> apiKey; - private Long ofSeconds; - private String imageQuality; - private String imageStyle; - private String audioModel; - private String audioVoice; - private Double audioSpeed; -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/cofing/OkHttpConfig.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/cofing/OkHttpConfig.java deleted file mode 100644 index b7406c1..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/cofing/OkHttpConfig.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.ruoyi.system.cofing; - -import jakarta.annotation.PostConstruct; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import org.ruoyi.common.core.utils.OkHttpUtil; -import org.ruoyi.system.domain.bo.SysModelBo; -import org.ruoyi.system.domain.vo.SysModelVo; -import org.ruoyi.system.service.ISysModelService; -import org.springframework.stereotype.Component; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Component -@RequiredArgsConstructor -public class OkHttpConfig { - - private final ISysModelService sysModelService; - private final Map<String, OkHttpUtil> okHttpUtilMap = new HashMap<>(); - @Getter - private String generate; - - @PostConstruct - public void init() { - initializeOkHttpUtil("suno"); - initializeOkHttpUtil("luma"); - initializeOkHttpUtil("ppt"); - } - - private void initializeOkHttpUtil(String modelName) { - SysModelBo sysModelBo = new SysModelBo(); - sysModelBo.setModelName(modelName); - List<SysModelVo> sysModelList = sysModelService.queryList(sysModelBo); - if (!sysModelList.isEmpty()) { - SysModelVo model = sysModelList.get(0); - OkHttpUtil okHttpUtil = new OkHttpUtil(); - okHttpUtil.setApiHost(model.getApiHost()); - okHttpUtil.setApiKey(model.getApiKey()); - generate = String.valueOf(model.getModelPrice()); - okHttpUtilMap.put(modelName, okHttpUtil); - } - } - - public OkHttpUtil getOkHttpUtil(String modelName) { - return okHttpUtilMap.get(modelName); - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/cofing/QqConfig.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/cofing/QqConfig.java deleted file mode 100644 index 34ccccd..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/cofing/QqConfig.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.ruoyi.system.cofing; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -/** - * qq閰嶇疆 - * - * @author ashinnotfound - * @date 2023/03/04 - */ -@Data -@Component -@ConfigurationProperties("qq") -public class QqConfig { - private Boolean enable; - private Long account; - private Boolean acceptNewFriend; - private Boolean acceptNewGroup; -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/cofing/WxCpConfiguration.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/cofing/WxCpConfiguration.java deleted file mode 100644 index 784c939..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/cofing/WxCpConfiguration.java +++ /dev/null @@ -1,130 +0,0 @@ -package org.ruoyi.system.cofing; - - -import com.google.common.collect.Maps; -import jakarta.annotation.PostConstruct; -import lombok.val; -import me.chanjar.weixin.common.api.WxConsts; -import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl; -import me.chanjar.weixin.cp.config.impl.WxCpDefaultConfigImpl; -import me.chanjar.weixin.cp.constant.WxCpConsts; -import me.chanjar.weixin.cp.message.WxCpMessageRouter; -import org.ruoyi.system.handler.wxcp.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Configuration; -import me.chanjar.weixin.cp.api.WxCpService; - -import java.util.Map; -import java.util.stream.Collectors; - -/** - * 鍗曞疄渚嬮厤缃� - * - * @author <a href="https://github.com/binarywang">Binary Wang</a> - */ -@Configuration -@EnableConfigurationProperties(WxCpProperties.class) -public class WxCpConfiguration { - private LogHandler logHandler; - private NullHandler nullHandler; - private LocationHandler locationHandler; - private MenuHandler menuHandler; - private MsgHandler msgHandler; - private UnsubscribeHandler unsubscribeHandler; - private SubscribeHandler subscribeHandler; - - private WxCpProperties properties; - - private static Map<Integer, WxCpMessageRouter> routers = Maps.newHashMap(); - private static Map<Integer, WxCpService> cpServices = Maps.newHashMap(); - - @Autowired - public WxCpConfiguration(LogHandler logHandler, NullHandler nullHandler, LocationHandler locationHandler, - MenuHandler menuHandler, MsgHandler msgHandler, UnsubscribeHandler unsubscribeHandler, - SubscribeHandler subscribeHandler, WxCpProperties properties) { - this.logHandler = logHandler; - this.nullHandler = nullHandler; - this.locationHandler = locationHandler; - this.menuHandler = menuHandler; - this.msgHandler = msgHandler; - this.unsubscribeHandler = unsubscribeHandler; - this.subscribeHandler = subscribeHandler; - this.properties = properties; - } - - - public static Map<Integer, WxCpMessageRouter> getRouters() { - return routers; - } - - public static WxCpService getCpService(Integer agentId) { - return cpServices.get(agentId); - } - - @PostConstruct - public void initServices() { - cpServices = this.properties.getAppConfigs().stream().map(a -> { - val configStorage = new WxCpDefaultConfigImpl(); - configStorage.setCorpId(this.properties.getCorpId()); - configStorage.setAgentId(a.getAgentId()); - configStorage.setCorpSecret(a.getSecret()); - configStorage.setToken(a.getToken()); - configStorage.setAesKey(a.getAesKey()); - val service = new WxCpServiceImpl(); - service.setWxCpConfigStorage(configStorage); - routers.put(a.getAgentId(), this.newRouter(service)); - return service; - }).collect(Collectors.toMap(service -> service.getWxCpConfigStorage().getAgentId(), a -> a)); - } - - private WxCpMessageRouter newRouter(WxCpService wxCpService) { - final val newRouter = new WxCpMessageRouter(wxCpService); - - // 璁板綍鎵�鏈変簨浠剁殑鏃ュ織 锛堝紓姝ユ墽琛岋級 - newRouter.rule().handler(this.logHandler).next(); - - // 鑷畾涔夎彍鍗曚簨浠� - newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) - .event(WxConsts.MenuButtonType.CLICK).handler(this.menuHandler).end(); - - // 鐐瑰嚮鑿滃崟閾炬帴浜嬩欢锛堣繖閲屼娇鐢ㄤ簡涓�涓┖鐨勫鐞嗗櫒锛屽彲浠ユ牴鎹嚜宸遍渶瑕佽繘琛屾墿灞曪級 - newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) - .event(WxConsts.MenuButtonType.VIEW).handler(this.nullHandler).end(); - - // 鍏虫敞浜嬩欢 - newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) - .event(WxConsts.EventType.SUBSCRIBE).handler(this.subscribeHandler) - .end(); - - // 鍙栨秷鍏虫敞浜嬩欢 - newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) - .event(WxConsts.EventType.UNSUBSCRIBE) - .handler(this.unsubscribeHandler).end(); - - // 涓婃姤鍦扮悊浣嶇疆浜嬩欢 - newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) - .event(WxConsts.EventType.LOCATION).handler(this.locationHandler) - .end(); - - // 鎺ユ敹鍦扮悊浣嶇疆娑堟伅 - newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.LOCATION) - .handler(this.locationHandler).end(); - - // 鎵爜浜嬩欢锛堣繖閲屼娇鐢ㄤ簡涓�涓┖鐨勫鐞嗗櫒锛屽彲浠ユ牴鎹嚜宸遍渶瑕佽繘琛屾墿灞曪級 - newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) - .event(WxConsts.EventType.SCAN).handler(this.nullHandler).end(); - - newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) - .event(WxCpConsts.EventType.CHANGE_CONTACT).handler(new ContactChangeHandler()).end(); - - newRouter.rule().async(false).msgType(WxConsts.XmlMsgType.EVENT) - .event(WxCpConsts.EventType.ENTER_AGENT).handler(new EnterAgentHandler()).end(); - - // 榛樿 - newRouter.rule().async(false).handler(this.msgHandler).end(); - - return newRouter; - } - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/cofing/WxCpProperties.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/cofing/WxCpProperties.java deleted file mode 100644 index 7b27f15..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/cofing/WxCpProperties.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.ruoyi.system.cofing; - -import lombok.Data; -import lombok.Getter; -import lombok.Setter; -import org.springframework.boot.context.properties.ConfigurationProperties; - -import java.util.List; - -/** - * @author <a href="https://github.com/binarywang">Binary Wang</a> - */ -@Data -@ConfigurationProperties(prefix = "wechat.cp") -public class WxCpProperties { - /** - * 璁剧疆浼佷笟寰俊鐨刢orpId - */ - private String corpId; - - private List<AppConfig> appConfigs; - - @Getter - @Setter - public static class AppConfig { - /** - * 璁剧疆浼佷笟寰俊搴旂敤鐨凙gentId - */ - private Integer agentId; - - /** - * 璁剧疆浼佷笟寰俊搴旂敤鐨凷ecret - */ - private String secret; - - /** - * 璁剧疆浼佷笟寰俊搴旂敤鐨則oken - */ - private String token; - - /** - * 璁剧疆浼佷笟寰俊搴旂敤鐨凟ncodingAESKey - */ - private String aesKey; - - } - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/cofing/WxMaConfiguration.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/cofing/WxMaConfiguration.java deleted file mode 100644 index 5fdc06d..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/cofing/WxMaConfiguration.java +++ /dev/null @@ -1,132 +0,0 @@ -package org.ruoyi.system.cofing; - -import cn.binarywang.wx.miniapp.api.WxMaService; -import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; -import cn.binarywang.wx.miniapp.bean.WxMaKefuMessage; -import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage; -import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl; -import cn.binarywang.wx.miniapp.message.WxMaMessageHandler; -import cn.binarywang.wx.miniapp.message.WxMaMessageRouter; -import com.google.common.collect.Lists; -import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.common.bean.result.WxMediaUploadResult; -import me.chanjar.weixin.common.error.WxErrorException; -import me.chanjar.weixin.common.error.WxRuntimeException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.io.File; -import java.util.List; -import java.util.stream.Collectors; - -/** - * @author Admin - */ -@Slf4j -@Configuration -@EnableConfigurationProperties(WxMaProperties.class) -public class WxMaConfiguration { - private final WxMaProperties properties; - - @Autowired - public WxMaConfiguration(WxMaProperties properties) { - this.properties = properties; - } - - @Bean - public WxMaService wxMaService() { - List<WxMaProperties.Config> configs = this.properties.getConfigs(); - if (configs == null) { - throw new WxRuntimeException("澶у摜锛屾嫓鎵樺厛鐪嬩笅椤圭洰棣栭〉鐨勮鏄庯紙readme鏂囦欢锛夛紝娣诲姞涓嬬浉鍏抽厤缃紝娉ㄦ剰鍒厤閿欎簡锛�"); - } - WxMaService maService = new WxMaServiceImpl(); - maService.setMultiConfigs( - configs.stream() - .map(a -> { - WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl(); -// WxMaDefaultConfigImpl config = new WxMaRedisConfigImpl(new JedisPool()); - // 浣跨敤涓婇潰鐨勯厤缃椂锛岄渶瑕佸悓鏃跺紩鍏edis-lock鐨勪緷璧栵紝鍚﹀垯浼氭姤绫绘棤娉曟壘鍒扮殑寮傚父 - config.setAppid(a.getAppid()); - config.setSecret(a.getSecret()); - config.setToken(a.getToken()); - config.setAesKey(a.getAesKey()); - config.setMsgDataFormat(a.getMsgDataFormat()); - return config; - }).collect(Collectors.toMap(WxMaDefaultConfigImpl::getAppid, a -> a, (o, n) -> o))); - return maService; - } - - @Bean - public WxMaMessageRouter wxMaMessageRouter(WxMaService wxMaService) { - final WxMaMessageRouter router = new WxMaMessageRouter(wxMaService); - router - .rule().handler(logHandler).next() - .rule().async(false).content("璁㈤槄娑堟伅").handler(subscribeMsgHandler).end() - .rule().async(false).content("鏂囨湰").handler(textHandler).end() - .rule().async(false).content("鍥剧墖").handler(picHandler).end() - .rule().async(false).content("浜岀淮鐮�").handler(qrcodeHandler).end(); - return router; - } - - private final WxMaMessageHandler subscribeMsgHandler = (wxMessage, context, service, sessionManager) -> { - service.getMsgService().sendSubscribeMsg(WxMaSubscribeMessage.builder() - .templateId("姝ゅ鏇存崲涓鸿嚜宸辩殑妯℃澘id") - .data(Lists.newArrayList( - new WxMaSubscribeMessage.MsgData("keyword1", "339208499"))) - .toUser(wxMessage.getFromUser()) - .build()); - return null; - }; - - private final WxMaMessageHandler logHandler = (wxMessage, context, service, sessionManager) -> { - log.info("鏀跺埌娑堟伅锛�" + wxMessage.toString()); - service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("鏀跺埌淇℃伅涓猴細" + wxMessage.toJson()) - .toUser(wxMessage.getFromUser()).build()); - return null; - }; - - private final WxMaMessageHandler textHandler = (wxMessage, context, service, sessionManager) -> { - service.getMsgService().sendKefuMsg(WxMaKefuMessage.newTextBuilder().content("鍥炲鏂囨湰娑堟伅") - .toUser(wxMessage.getFromUser()).build()); - return null; - }; - - private final WxMaMessageHandler picHandler = (wxMessage, context, service, sessionManager) -> { - try { - WxMediaUploadResult uploadResult = service.getMediaService() - .uploadMedia("image", "png", - ClassLoader.getSystemResourceAsStream("tmp.png")); - service.getMsgService().sendKefuMsg( - WxMaKefuMessage - .newImageBuilder() - .mediaId(uploadResult.getMediaId()) - .toUser(wxMessage.getFromUser()) - .build()); - } catch (WxErrorException e) { - e.printStackTrace(); - } - - return null; - }; - - private final WxMaMessageHandler qrcodeHandler = (wxMessage, context, service, sessionManager) -> { - try { - final File file = service.getQrcodeService().createQrcode("123", 430); - WxMediaUploadResult uploadResult = service.getMediaService().uploadMedia("image", file); - service.getMsgService().sendKefuMsg( - WxMaKefuMessage - .newImageBuilder() - .mediaId(uploadResult.getMediaId()) - .toUser(wxMessage.getFromUser()) - .build()); - } catch (WxErrorException e) { - e.printStackTrace(); - } - - return null; - }; - -} - diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/cofing/WxMaProperties.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/cofing/WxMaProperties.java deleted file mode 100644 index eb3ad06..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/cofing/WxMaProperties.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.ruoyi.system.cofing; - -/** - * 寰俊灏忕▼搴忓睘鎬ч厤缃被 - * - * @author: wangle - * @date: 2023/5/18 - */ - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; - -import java.util.List; - -/** - * @author <a href="https://github.com/binarywang">Binary Wang</a> - */ -@Data -@ConfigurationProperties(prefix = "wx.miniapp") -public class WxMaProperties { - - private List<Config> configs; - - @Data - public static class Config { - /** - * 璁剧疆寰俊灏忕▼搴忕殑appid - */ - private String appid; - - /** - * 璁剧疆寰俊灏忕▼搴忕殑Secret - */ - private String secret; - - /** - * 璁剧疆寰俊灏忕▼搴忔秷鎭湇鍔″櫒閰嶇疆鐨則oken - */ - private String token; - - /** - * 璁剧疆寰俊灏忕▼搴忔秷鎭湇鍔″櫒閰嶇疆鐨凟ncodingAESKey - */ - private String aesKey; - - /** - * 娑堟伅鏍煎紡锛孹ML鎴栬�匤SON - */ - private String msgDataFormat; - } - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatConfigController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatConfigController.java deleted file mode 100644 index a3db5ad..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatConfigController.java +++ /dev/null @@ -1,129 +0,0 @@ -package org.ruoyi.system.controller.system; - -import cn.dev33.satoken.annotation.SaCheckPermission; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import lombok.RequiredArgsConstructor; -import org.ruoyi.common.core.domain.R; -import org.ruoyi.common.core.service.ConfigService; -import org.ruoyi.common.core.validate.EditGroup; -import org.ruoyi.common.web.core.BaseController; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * 瀵硅瘽閰嶇疆淇℃伅 - * - * @author Lion Li - * @date 2024-04-13 - */ -@RequiredArgsConstructor -@RestController -@RequestMapping("/chat/config") -public class ChatConfigController extends BaseController { - - private final IChatConfigService chatConfigService; - - private final ConfigService configService; - - /** - * 鏌ヨ閰嶇疆淇℃伅鍒楄〃 - */ - @GetMapping("/list") - @SaCheckPermission("system:config:list") - public R<List<ChatConfigVo>> list(ChatConfigBo bo) { - return R.ok(chatConfigService.queryList(bo)); - } - - /** - * 鑾峰彇瀵硅瘽閰嶇疆淇¤缁嗕俊鎭� - * - * @param id 涓婚敭 - */ - @SaCheckPermission("system:config:list") - @GetMapping("/{id}") - public R<ChatConfigVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long id) { - return R.ok(chatConfigService.queryById(id)); - } - - /** - * 鏍规嵁鍙傛暟閿悕鏌ヨ绯荤粺鍙傛暟鍊� - * - * @param configKey 鍙傛暟Key - */ - @SaCheckPermission("system:config:list") - @GetMapping(value = "/configKey/{configKey}") - public R<String> getConfigKey(@PathVariable String configKey) { - return R.ok(configService.getConfigValue("sys",configKey)); - } - - /** - * 鏌ヨ鐗堟潈淇℃伅 - * - */ - @GetMapping(value = "/configKey/copyright") - public R<String> getConfigKeyCopyright() { - return R.ok(configService.getConfigValue("sys","copyright")); - } - - /** - * 鏌ヨlogoImage - * - */ - @GetMapping(value = "/configKey/logoImage") - public R<String> getConfigKeyLogoImage() { - return R.ok(configService.getConfigValue("sys","logoImage")); - } - - /** - * 鏌ヨ绯荤粺鍙傛暟 - * - */ - @SaCheckPermission("system:config:list") - @GetMapping(value = "/sysConfigKey") - public R<List<ChatConfigVo>> getSysConfigKey() { - return R.ok(chatConfigService.getSysConfigValue("sys")); - } - - /** - * 鏂板瀵硅瘽閰嶇疆淇℃伅 - */ - @SaCheckPermission("system:config:add") - @PostMapping("/add") - public R<Void> add(@RequestBody List<ChatConfigBo> boList) { - for (ChatConfigBo chatConfigBo : boList) { - if(chatConfigBo.getId() == null){ - chatConfigService.insertByBo(chatConfigBo); - }else { - chatConfigService.updateByBo(chatConfigBo); - } - } - return toAjax(true); - } - - /** - * 淇敼瀵硅瘽閰嶇疆淇℃伅 - */ - @SaCheckPermission("system:config:edit") - @PutMapping("/edit") - public R<Void> edit(@Validated(EditGroup.class) @RequestBody ChatConfigBo bo) { - return toAjax(chatConfigService.updateByBo(bo)); - } - - /** - * 鍒犻櫎瀵硅瘽閰嶇疆淇℃伅 - * - * @param ids 涓婚敭涓� - */ - @SaCheckPermission("system:config:edit") - @DeleteMapping("/{ids}") - public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long[] ids) { - return toAjax(chatConfigService.deleteWithValidByIds(List.of(ids), true)); - } - - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatGptsController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatGptsController.java deleted file mode 100644 index 96e5b19..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatGptsController.java +++ /dev/null @@ -1,102 +0,0 @@ -package org.ruoyi.system.controller.system; - -import cn.dev33.satoken.annotation.SaCheckPermission; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import lombok.RequiredArgsConstructor; -import org.ruoyi.common.core.domain.R; -import org.ruoyi.common.core.validate.AddGroup; -import org.ruoyi.common.core.validate.EditGroup; -import org.ruoyi.common.excel.utils.ExcelUtil; -import org.ruoyi.common.idempotent.annotation.RepeatSubmit; -import org.ruoyi.common.log.annotation.Log; -import org.ruoyi.common.log.enums.BusinessType; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.common.web.core.BaseController; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * gpts绠$悊 - * - * @author Lion Li - * @date 2024-07-09 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/system/gpts") -public class ChatGptsController extends BaseController { - - private final IChatGptsService chatGptsService; - - /** - * 鏌ヨgpts绠$悊鍒楄〃 - */ - @GetMapping("/list") - public TableDataInfo<ChatGptsVo> list(ChatGptsBo bo, PageQuery pageQuery) { - return chatGptsService.queryPageList(bo, pageQuery); - } - - /** - * 瀵煎嚭gpts绠$悊鍒楄〃 - */ - @SaCheckPermission("system:gpts:export") - @Log(title = "gpts绠$悊", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(ChatGptsBo bo, HttpServletResponse response) { - List<ChatGptsVo> list = chatGptsService.queryList(bo); - ExcelUtil.exportExcel(list, "gpts绠$悊", ChatGptsVo.class, response); - } - - /** - * 鑾峰彇gpts绠$悊璇︾粏淇℃伅 - * - * @param id 涓婚敭 - */ - @SaCheckPermission("system:gpts:query") - @GetMapping("/{id}") - public R<ChatGptsVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long id) { - return R.ok(chatGptsService.queryById(id)); - } - - /** - * 鏂板gpts绠$悊 - */ - @SaCheckPermission("system:gpts:add") - @Log(title = "gpts绠$悊", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public R<Void> add(@Validated(AddGroup.class) @RequestBody ChatGptsBo bo) { - return toAjax(chatGptsService.insertByBo(bo)); - } - - /** - * 淇敼gpts绠$悊 - */ - @SaCheckPermission("system:gpts:edit") - @Log(title = "gpts绠$悊", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R<Void> edit(@Validated(EditGroup.class) @RequestBody ChatGptsBo bo) { - return toAjax(chatGptsService.updateByBo(bo)); - } - - /** - * 鍒犻櫎gpts绠$悊 - * - * @param ids 涓婚敭涓� - */ - @SaCheckPermission("system:gpts:remove") - @Log(title = "gpts绠$悊", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long[] ids) { - return toAjax(chatGptsService.deleteWithValidByIds(List.of(ids), true)); - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatMessageController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatMessageController.java deleted file mode 100644 index 5d0486d..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatMessageController.java +++ /dev/null @@ -1,117 +0,0 @@ -package org.ruoyi.system.controller.system; - -import cn.dev33.satoken.annotation.SaCheckPermission; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import lombok.RequiredArgsConstructor; -import org.ruoyi.common.core.domain.R; -import org.ruoyi.common.core.validate.AddGroup; -import org.ruoyi.common.core.validate.EditGroup; -import org.ruoyi.common.excel.utils.ExcelUtil; -import org.ruoyi.common.idempotent.annotation.RepeatSubmit; -import org.ruoyi.common.log.annotation.Log; -import org.ruoyi.common.log.enums.BusinessType; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.common.satoken.utils.LoginHelper; -import org.ruoyi.common.web.core.BaseController; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * 鑱婂ぉ娑堟伅 - * - * @author Lion Li - * @date 2024-04-16 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/system/message") -public class ChatMessageController extends BaseController { - - private final IChatMessageService chatMessageService; - - /** - * 鏌ヨ鑱婂ぉ娑堟伅鍒楄〃 - */ - @SaCheckPermission("system:message:list") - @GetMapping("/list") - public TableDataInfo<ChatMessageVo> list(ChatMessageBo bo, PageQuery pageQuery) { - pageQuery.setOrderByColumn("createTime"); - pageQuery.setIsAsc("desc"); - return chatMessageService.queryPageList(bo, pageQuery); - } - - /** - * 鏌ヨ鎴戠殑鑱婂ぉ娑堟伅鍒楄〃 - */ - @GetMapping("/listByUser") - public R<TableDataInfo<ChatMessageVo>> listByUser(ChatMessageBo bo, PageQuery pageQuery) { - bo.setUserId(LoginHelper.getUserId()); - pageQuery.setOrderByColumn("createTime"); - pageQuery.setIsAsc("desc"); - return R.ok(chatMessageService.queryPageList(bo, pageQuery)); - } - - /** - * 瀵煎嚭鑱婂ぉ娑堟伅鍒楄〃 - */ - @SaCheckPermission("system:message:export") - @Log(title = "鑱婂ぉ娑堟伅", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(ChatMessageBo bo, HttpServletResponse response) { - List<ChatMessageVo> list = chatMessageService.queryList(bo); - ExcelUtil.exportExcel(list, "鑱婂ぉ娑堟伅", ChatMessageVo.class, response); - } - - /** - * 鑾峰彇鑱婂ぉ娑堟伅璇︾粏淇℃伅 - * - * @param id 涓婚敭 - */ - @SaCheckPermission("system:message:query") - @GetMapping("/{id}") - public R<ChatMessageVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long id) { - return R.ok(chatMessageService.queryById(id)); - } - - /** - * 鏂板鑱婂ぉ娑堟伅 - */ - @SaCheckPermission("system:message:add") - @Log(title = "鑱婂ぉ娑堟伅", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public R<Void> add(@Validated(AddGroup.class) @RequestBody ChatMessageBo bo) { - return toAjax(chatMessageService.insertByBo(bo)); - } - - /** - * 淇敼鑱婂ぉ娑堟伅 - */ - @SaCheckPermission("system:message:edit") - @Log(title = "鑱婂ぉ娑堟伅", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R<Void> edit(@Validated(EditGroup.class) @RequestBody ChatMessageBo bo) { - return toAjax(chatMessageService.updateByBo(bo)); - } - - /** - * 鍒犻櫎鑱婂ぉ娑堟伅 - * - * @param ids 涓婚敭涓� - */ - @SaCheckPermission("system:message:remove") - @Log(title = "鑱婂ぉ娑堟伅", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long[] ids) { - return toAjax(chatMessageService.deleteWithValidByIds(List.of(ids), true)); - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatPluginController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatPluginController.java deleted file mode 100644 index a0d9a1b..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatPluginController.java +++ /dev/null @@ -1,102 +0,0 @@ -package org.ruoyi.system.controller.system; - -import java.util.List; - -import lombok.RequiredArgsConstructor; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.*; -import cn.dev33.satoken.annotation.SaCheckPermission; -import org.ruoyi.common.excel.utils.ExcelUtil; -import org.ruoyi.common.idempotent.annotation.RepeatSubmit; -import org.springframework.web.bind.annotation.*; -import org.springframework.validation.annotation.Validated; -import org.ruoyi.common.log.annotation.Log; -import org.ruoyi.common.web.core.BaseController; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.core.domain.R; -import org.ruoyi.common.core.validate.AddGroup; -import org.ruoyi.common.core.validate.EditGroup; -import org.ruoyi.common.log.enums.BusinessType; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; - -/** - * 鎻掍欢绠$悊 - * - * @author ageerle - * @date 2025-03-30 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/system/plugin") -public class ChatPluginController extends BaseController { - - private final IChatPluginService chatPluginService; - - /** - * 鏌ヨ鎻掍欢绠$悊鍒楄〃 - */ - @SaCheckPermission("system:plugin:list") - @GetMapping("/list") - public TableDataInfo<ChatPluginVo> list(ChatPluginBo bo, PageQuery pageQuery) { - return chatPluginService.queryPageList(bo, pageQuery); - } - - /** - * 瀵煎嚭鎻掍欢绠$悊鍒楄〃 - */ - @SaCheckPermission("system:plugin:export") - @Log(title = "鎻掍欢绠$悊", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(ChatPluginBo bo, HttpServletResponse response) { - List<ChatPluginVo> list = chatPluginService.queryList(bo); - ExcelUtil.exportExcel(list, "鎻掍欢绠$悊", ChatPluginVo.class, response); - } - - /** - * 鑾峰彇鎻掍欢绠$悊璇︾粏淇℃伅 - * - * @param id 涓婚敭 - */ - @SaCheckPermission("system:plugin:query") - @GetMapping("/{id}") - public R<ChatPluginVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long id) { - return R.ok(chatPluginService.queryById(id)); - } - - /** - * 鏂板鎻掍欢绠$悊 - */ - @SaCheckPermission("system:plugin:add") - @Log(title = "鎻掍欢绠$悊", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public R<Void> add(@Validated(AddGroup.class) @RequestBody ChatPluginBo bo) { - return toAjax(chatPluginService.insertByBo(bo)); - } - - /** - * 淇敼鎻掍欢绠$悊 - */ - @SaCheckPermission("system:plugin:edit") - @Log(title = "鎻掍欢绠$悊", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R<Void> edit(@Validated(EditGroup.class) @RequestBody ChatPluginBo bo) { - return toAjax(chatPluginService.updateByBo(bo)); - } - - /** - * 鍒犻櫎鎻掍欢绠$悊 - * - * @param ids 涓婚敭涓� - */ - @SaCheckPermission("system:plugin:remove") - @Log(title = "鎻掍欢绠$悊", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long[] ids) { - return toAjax(chatPluginService.deleteWithValidByIds(List.of(ids), true)); - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatStoreController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatStoreController.java deleted file mode 100644 index 532fb33..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatStoreController.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.ruoyi.system.controller.system; - -import lombok.RequiredArgsConstructor; -import org.ruoyi.common.core.domain.R; -import org.ruoyi.common.web.core.BaseController; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * 搴旂敤鍟嗗簵 - * - * @author Lion Li - * @date 2024-03-19 - */ -@RequiredArgsConstructor -@RestController -@RequestMapping("/system/store") -public class ChatStoreController extends BaseController { - - private final IChatAppStoreService appStoreService; - - /** - * 搴旂敤鍟嗗簵 - */ - @GetMapping("/appList") - public R<List<ChatAppStoreVo>> appList(ChatAppStoreBo bo) { - return R.ok(appStoreService.queryList(bo)); - } - - /** - * 鏀惰棌搴旂敤 - */ - @PostMapping("/copyApp") - public R<String> copyApp() { - return R.ok(); - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatVisitorUsageController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatVisitorUsageController.java deleted file mode 100644 index f402278..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatVisitorUsageController.java +++ /dev/null @@ -1,103 +0,0 @@ -package org.ruoyi.system.controller.system; - -import cn.dev33.satoken.annotation.SaCheckPermission; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import lombok.RequiredArgsConstructor; -import org.ruoyi.common.core.domain.R; -import org.ruoyi.common.core.validate.AddGroup; -import org.ruoyi.common.core.validate.EditGroup; -import org.ruoyi.common.excel.utils.ExcelUtil; -import org.ruoyi.common.idempotent.annotation.RepeatSubmit; -import org.ruoyi.common.log.annotation.Log; -import org.ruoyi.common.log.enums.BusinessType; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.common.web.core.BaseController; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * 璁垮绠$悊 - * - * @author Lion Li - * @date 2024-07-14 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/system/visitorUsage") -public class ChatVisitorUsageController extends BaseController { - - private final IChatVisitorUsageService chatVisitorUsageService; - - /** - * 鏌ヨ璁垮绠$悊鍒楄〃 - */ - @SaCheckPermission("system:visitorUsage:list") - @GetMapping("/list") - public TableDataInfo<ChatVisitorUsageVo> list(ChatVisitorUsageBo bo, PageQuery pageQuery) { - return chatVisitorUsageService.queryPageList(bo, pageQuery); - } - - /** - * 瀵煎嚭璁垮绠$悊鍒楄〃 - */ - @SaCheckPermission("system:visitorUsage:export") - @Log(title = "璁垮绠$悊", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(ChatVisitorUsageBo bo, HttpServletResponse response) { - List<ChatVisitorUsageVo> list = chatVisitorUsageService.queryList(bo); - ExcelUtil.exportExcel(list, "璁垮绠$悊", ChatVisitorUsageVo.class, response); - } - - /** - * 鑾峰彇璁垮绠$悊璇︾粏淇℃伅 - * - * @param id 涓婚敭 - */ - @SaCheckPermission("system:visitorUsage:query") - @GetMapping("/{id}") - public R<ChatVisitorUsageVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long id) { - return R.ok(chatVisitorUsageService.queryById(id)); - } - - /** - * 鏂板璁垮绠$悊 - */ - @SaCheckPermission("system:visitorUsage:add") - @Log(title = "璁垮绠$悊", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public R<Void> add(@Validated(AddGroup.class) @RequestBody ChatVisitorUsageBo bo) { - return toAjax(chatVisitorUsageService.insertByBo(bo)); - } - - /** - * 淇敼璁垮绠$悊 - */ - @SaCheckPermission("system:visitorUsage:edit") - @Log(title = "璁垮绠$悊", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R<Void> edit(@Validated(EditGroup.class) @RequestBody ChatVisitorUsageBo bo) { - return toAjax(chatVisitorUsageService.updateByBo(bo)); - } - - /** - * 鍒犻櫎璁垮绠$悊 - * - * @param ids 涓婚敭涓� - */ - @SaCheckPermission("system:visitorUsage:remove") - @Log(title = "璁垮绠$悊", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long[] ids) { - return toAjax(chatVisitorUsageService.deleteWithValidByIds(List.of(ids), true)); - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatVoucherController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatVoucherController.java deleted file mode 100644 index 88cc4f4..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/ChatVoucherController.java +++ /dev/null @@ -1,120 +0,0 @@ -package org.ruoyi.system.controller.system; - -import cn.dev33.satoken.annotation.SaCheckPermission; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import lombok.RequiredArgsConstructor; -import org.ruoyi.common.core.domain.R; -import org.ruoyi.common.core.validate.AddGroup; -import org.ruoyi.common.core.validate.EditGroup; -import org.ruoyi.common.excel.utils.ExcelUtil; -import org.ruoyi.common.idempotent.annotation.RepeatSubmit; -import org.ruoyi.common.log.annotation.Log; -import org.ruoyi.common.log.enums.BusinessType; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.common.web.core.BaseController; -import org.ruoyi.common.wechat.web.utils.UUIDShortUtil; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * 鐢ㄦ埛鍏戞崲璁板綍 - * - * @author Lion Li - * @date 2024-05-03 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/system/voucher") -public class ChatVoucherController extends BaseController { - - private final IChatVoucherService chatVoucherService; - - /** - * 鏌ヨ鐢ㄦ埛鍏戞崲璁板綍鍒楄〃 - */ - @SaCheckPermission("system:voucher:list") - @GetMapping("/list") - public TableDataInfo<ChatVoucherVo> list(ChatVoucherBo bo, PageQuery pageQuery) { - return chatVoucherService.queryPageList(bo, pageQuery); - } - - /** - * 瀵煎嚭鐢ㄦ埛鍏戞崲璁板綍鍒楄〃 - */ - @SaCheckPermission("system:voucher:export") - @Log(title = "鐢ㄦ埛鍏戞崲璁板綍", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(ChatVoucherBo bo, HttpServletResponse response) { - List<ChatVoucherVo> list = chatVoucherService.queryList(bo); - ExcelUtil.exportExcel(list, "鐢ㄦ埛鍏戞崲璁板綍", ChatVoucherVo.class, response); - } - - /** - * 鑾峰彇鐢ㄦ埛鍏戞崲璁板綍璇︾粏淇℃伅 - * - * @param id 涓婚敭 - */ - @SaCheckPermission("system:voucher:query") - @GetMapping("/{id}") - public R<ChatVoucherVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long id) { - return R.ok(chatVoucherService.queryById(id)); - } - - /** - * 鏂板鐢ㄦ埛鍏戞崲璁板綍 - */ - @SaCheckPermission("system:voucher:add") - @Log(title = "鐢ㄦ埛鍏戞崲璁板綍", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public R<Void> add(@Validated(AddGroup.class) @RequestBody ChatVoucherBo bo) { - bo.setCode(UUIDShortUtil.generateShortUuid()); - return toAjax(chatVoucherService.insertByBo(bo)); - } - - /** - * 鍏戞崲鍗″瘑 - * - * @param bo 鍗″瘑淇℃伅 - * @return 鏄惁鍏戞崲鎴愬姛 - */ - @PostMapping("/redeem") - public R<String> redeem(@RequestBody ChatVoucherBo bo) { - if(chatVoucherService.redeem(bo)){ - return R.ok("鍏戞崲鎴愬姛!"); - }else { - return R.fail("鍏戞崲澶辫触,璇疯仈绯荤鐞嗗憳!"); - } - } - - /** - * 淇敼鐢ㄦ埛鍏戞崲璁板綍 - */ - @SaCheckPermission("system:voucher:edit") - @Log(title = "鐢ㄦ埛鍏戞崲璁板綍", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R<Void> edit(@Validated(EditGroup.class) @RequestBody ChatVoucherBo bo) { - return toAjax(chatVoucherService.updateByBo(bo)); - } - - /** - * 鍒犻櫎鐢ㄦ埛鍏戞崲璁板綍 - * - * @param ids 涓婚敭涓� - */ - @SaCheckPermission("system:voucher:remove") - @Log(title = "鐢ㄦ埛鍏戞崲璁板綍", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long[] ids) { - return toAjax(chatVoucherService.deleteWithValidByIds(List.of(ids), true)); - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/KnowledgeController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/KnowledgeController.java deleted file mode 100644 index 3ea10af..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/KnowledgeController.java +++ /dev/null @@ -1,184 +0,0 @@ -//package org.ruoyi.system.controller.system; -// -//import cn.dev33.satoken.stp.StpUtil; -//import jakarta.servlet.http.HttpServletRequest; -//import jakarta.servlet.http.HttpServletResponse; -//import jakarta.validation.Valid; -//import jakarta.validation.constraints.NotEmpty; -//import jakarta.validation.constraints.NotNull; -//import lombok.RequiredArgsConstructor; -//import org.ruoyi.common.chat.domain.request.ChatRequest; -//import org.ruoyi.common.chat.entity.chat.Message; -//import org.ruoyi.common.core.domain.R; -//import org.ruoyi.common.core.validate.AddGroup; -//import org.ruoyi.common.excel.utils.ExcelUtil; -//import org.ruoyi.common.log.annotation.Log; -//import org.ruoyi.common.log.enums.BusinessType; -//import org.ruoyi.common.mybatis.core.page.PageQuery; -//import org.ruoyi.common.mybatis.core.page.TableDataInfo; -//import org.ruoyi.common.satoken.utils.LoginHelper; -//import org.ruoyi.common.web.core.BaseController; -//import org.ruoyi.knowledge.chain.vectorstore.VectorStore; -//import org.ruoyi.knowledge.domain.bo.KnowledgeAttachBo; -//import org.ruoyi.knowledge.domain.bo.KnowledgeFragmentBo; -//import org.ruoyi.knowledge.domain.bo.KnowledgeInfoBo; -//import org.ruoyi.knowledge.domain.req.KnowledgeInfoUploadRequest; -//import org.ruoyi.knowledge.domain.vo.KnowledgeAttachVo; -//import org.ruoyi.knowledge.domain.vo.KnowledgeFragmentVo; -//import org.ruoyi.knowledge.domain.vo.KnowledgeInfoVo; -//import org.ruoyi.knowledge.service.EmbeddingService; -//import org.ruoyi.knowledge.service.IKnowledgeAttachService; -//import org.ruoyi.knowledge.service.IKnowledgeFragmentService; -//import org.ruoyi.knowledge.service.IKnowledgeInfoService; -//import org.ruoyi.system.service.ISseService; -//import org.springframework.validation.annotation.Validated; -//import org.springframework.web.bind.annotation.*; -//import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; -// -//import java.util.List; -// -// -///** -// * 鐭ヨ瘑搴� -// * -// * @author Lion Li -// * @date 2024-10-21 -// */ -//@Validated -//@RequiredArgsConstructor -//@RestController -//@RequestMapping("/knowledge") -//public class KnowledgeController extends BaseController { -// -// private final IKnowledgeInfoService knowledgeInfoService; -// -// private final VectorStore vectorStore; -// -// private final IKnowledgeAttachService attachService; -// -// private final IKnowledgeFragmentService fragmentService; -// -// private final EmbeddingService embeddingService; -// -// private final ISseService sseService; -// -// /** -// * 鐭ヨ瘑搴撳璇� -// */ -// @PostMapping("/send") -// public SseEmitter send(@RequestBody @Valid ChatRequest chatRequest, HttpServletRequest request) { -// List<Message> messages = chatRequest.getMessages(); -// // 鑾峰彇鐭ヨ瘑搴撲俊鎭� -// Message message = messages.get(messages.size() - 1); -// StringBuilder sb = new StringBuilder(message.getContent().toString()); -// List<String> nearestList; -// List<Double> queryVector = embeddingService.getQueryVector(message.getContent().toString(), chatRequest.getKid()); -// nearestList = vectorStore.nearest(queryVector, chatRequest.getKid()); -// for (String prompt : nearestList) { -// sb.append("\n####").append(prompt); -// } -// sb.append( (nearestList.size() > 0 ? "\n\n娉ㄦ剰锛氬洖绛旈棶棰樻椂锛岄』涓ユ牸鏍规嵁鎴戠粰浣犵殑绯荤粺涓婁笅鏂囧唴瀹瑰師鏂囪繘琛屽洖绛旓紝璇蜂笉瑕佽嚜宸卞彂鎸�,鍥炵瓟鏃朵繚鎸佸師鏉ユ枃鏈殑娈佃惤灞傜骇" : "")); -// message.setContent(sb.toString()); -// return sseService.sseChat(chatRequest, request); -// } -// -// /** -// * 鏍规嵁鐢ㄦ埛淇℃伅鏌ヨ鏈湴鐭ヨ瘑搴� -// */ -// @GetMapping("/list") -// public TableDataInfo<KnowledgeInfoVo> list(KnowledgeInfoBo bo, PageQuery pageQuery) { -// if(!StpUtil.isLogin()){ -// return null; -// } -// bo.setUid(LoginHelper.getUserId()); -// return knowledgeInfoService.queryPageList(bo, pageQuery); -// } -// -// /** -// * 鏂板鐭ヨ瘑搴� -// */ -// @Log(title = "鐭ヨ瘑搴�", businessType = BusinessType.INSERT) -// @PostMapping("/save") -// public R<Void> save(@Validated(AddGroup.class) @RequestBody KnowledgeInfoBo bo) { -// knowledgeInfoService.saveOne(bo); -// return R.ok(); -// } -// -// /** -// * 鍒犻櫎鐭ヨ瘑搴� -// */ -// @PostMapping("/remove/{id}") -// public R<String> remove(@PathVariable String id){ -// knowledgeInfoService.removeKnowledge(id); -// return R.ok("鍒犻櫎鐭ヨ瘑搴撴垚鍔�!"); -// } -// -// /** -// * 淇敼鐭ヨ瘑搴� -// */ -// @Log(title = "鐭ヨ瘑搴�", businessType = BusinessType.UPDATE) -// @PostMapping("/edit") -// public R<Void> edit( @RequestBody KnowledgeInfoBo bo) { -// return toAjax(knowledgeInfoService.updateByBo(bo)); -// } -// -// /** -// * 瀵煎嚭鐭ヨ瘑搴撳垪琛� -// */ -// @Log(title = "鐭ヨ瘑搴�", businessType = BusinessType.EXPORT) -// @PostMapping("/export") -// public void export(KnowledgeInfoBo bo, HttpServletResponse response) { -// List<KnowledgeInfoVo> list = knowledgeInfoService.queryList(bo); -// ExcelUtil.exportExcel(list, "鐭ヨ瘑搴�", KnowledgeInfoVo.class, response); -// } -// -// /** -// * 鏌ヨ鐭ヨ瘑闄勪欢淇℃伅 -// */ -// @GetMapping("/detail/{kid}") -// public TableDataInfo<KnowledgeAttachVo> attach(KnowledgeAttachBo bo, PageQuery pageQuery,@PathVariable String kid){ -// bo.setKid(kid); -// return attachService.queryPageList(bo, pageQuery); -// } -// -// /** -// * 涓婁紶鐭ヨ瘑搴撻檮浠� -// */ -// @PostMapping(value = "/attach/upload") -// public R<String> upload(KnowledgeInfoUploadRequest request){ -// knowledgeInfoService.upload(request); -// return R.ok("涓婁紶鐭ヨ瘑搴撻檮浠舵垚鍔�!"); -// } -// -// /** -// * 鑾峰彇鐭ヨ瘑搴撻檮浠惰缁嗕俊鎭� -// * -// * @param id 涓婚敭 -// */ -// @GetMapping("attach/info/{id}") -// public R<KnowledgeAttachVo> getAttachInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖") -// @PathVariable Long id) { -// return R.ok(attachService.queryById(id)); -// } -// -// /** -// * 鍒犻櫎鐭ヨ瘑搴撻檮浠� -// * -// */ -// @PostMapping("attach/remove/{docId}") -// public R<Void> removeAttach(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") @PathVariable String docId) { -// attachService.removeKnowledgeAttach(docId); -// return R.ok(); -// } -// -// -// /** -// * 鏌ヨ鐭ヨ瘑鐗囨 -// */ -// @GetMapping("/fragment/list/{docId}") -// public TableDataInfo<KnowledgeFragmentVo> fragmentList(KnowledgeFragmentBo bo, PageQuery pageQuery, @PathVariable String docId) { -// bo.setDocId(docId); -// return fragmentService.queryPageList(bo, pageQuery); -// } -// -//} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/PayController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/PayController.java deleted file mode 100644 index eef8331..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/PayController.java +++ /dev/null @@ -1,333 +0,0 @@ -//package org.ruoyi.system.controller.system; -// -//import cn.hutool.core.bean.BeanUtil; -//import cn.hutool.core.collection.CollectionUtil; -//import cn.hutool.extra.qrcode.QrCodeUtil; -//import cn.hutool.json.JSONObject; -//import cn.hutool.json.JSONUtil; -//import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse; -//import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; -//import com.github.binarywang.wxpay.bean.order.WxPayNativeOrderResult; -//import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest; -//import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest; -//import com.github.binarywang.wxpay.exception.WxPayException; -//import com.github.binarywang.wxpay.service.WxPayService; -//import com.stripe.Stripe; -//import com.stripe.exception.StripeException; -//import com.stripe.model.Event; -//import com.stripe.model.Price; -//import com.stripe.model.Product; -//import com.stripe.model.checkout.Session; -//import com.stripe.net.Webhook; -//import com.stripe.param.checkout.SessionCreateParams; -//import jakarta.servlet.http.HttpServletRequest; -//import lombok.RequiredArgsConstructor; -//import lombok.extern.slf4j.Slf4j; -//import org.ruoyi.common.config.PayConfig; -//import org.ruoyi.common.core.domain.R; -//import org.ruoyi.common.core.exception.base.BaseException; -//import org.ruoyi.common.core.service.ConfigService; -//import org.ruoyi.common.core.utils.StringUtils; -//import org.ruoyi.common.oss.core.OssClient; -//import org.ruoyi.common.oss.entity.UploadResult; -//import org.ruoyi.common.oss.factory.OssFactory; -//import org.ruoyi.common.response.PayResponse; -//import org.ruoyi.common.service.PayService; -//import org.ruoyi.common.utils.MD5Util; -//import org.ruoyi.system.domain.bo.PaymentOrdersBo; -//import org.ruoyi.system.domain.bo.SysUserBo; -//import org.ruoyi.system.domain.request.OrderRequest; -//import org.ruoyi.system.domain.vo.PaymentOrdersVo; -//import org.ruoyi.system.domain.vo.SysUserVo; -//import org.ruoyi.system.service.IPaymentOrdersService; -//import org.ruoyi.system.service.ISysUserService; -//import org.springframework.web.bind.annotation.*; -// -//import java.io.ByteArrayOutputStream; -//import java.io.InputStream; -//import java.math.BigDecimal; -//import java.math.RoundingMode; -//import java.util.HashMap; -//import java.util.List; -//import java.util.Map; -// -// -//@RequiredArgsConstructor -//@RestController -//@RequestMapping("/pay") -//@Slf4j -//public class PayController { -// -// private final PayService payService; -// -// private final ISysUserService userService; -// -// private final IPaymentOrdersService paymentOrdersService; -// -// private final PayConfig payConfig; -// -// private final WxPayService wxService; -// -// private final ConfigService configService; -// -// /** -// * 鑾峰彇鏀粯浜岀淮鐮� -// * -// * @Date 2023/7/3 -// * @return void -// **/ -// @PostMapping("/payUrl") -// public R<PaymentOrdersVo> payUrl(@RequestBody OrderRequest orderRequest) { -// PaymentOrdersBo payOrder = paymentOrdersService.createPayOrder(orderRequest); -// PaymentOrdersVo paymentOrdersVo = new PaymentOrdersVo(); -// if(!Boolean.parseBoolean(getKey("enabled"))){ -// String payUrl = payService.getPayUrl(payOrder.getOrderNo(), orderRequest.getName(), Double.parseDouble(orderRequest.getMoney()), "192.168.1.6"); -// byte[] bytes = QrCodeUtil.generatePng(payUrl, 300, 300); -// OssClient storage = OssFactory.instance(); -// UploadResult upload=storage.upload(bytes, storage.getPath("qrCode",".png"), "image/png"); -// BeanUtil.copyProperties(payOrder,paymentOrdersVo); -// paymentOrdersVo.setUrl(upload.getUrl()); -// }else { -// WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest(); -// request.setTradeType("NATIVE"); -// request.setBody(orderRequest.getName()); -// request.setOutTradeNo(payOrder.getOrderNo()); -// request.setTotalFee(BaseWxPayRequest.yuanToFen(orderRequest.getMoney())); -// request.setSpbillCreateIp("127.0.0.1"); -// request.setNotifyUrl(getKey("notifyUrl")); -// request.setProductId(payOrder.getId().toString()); -// try { -// WxPayNativeOrderResult order = wxService.createOrder(request); -// byte[] bytes = QrCodeUtil.generatePng(order.getCodeUrl(), 300, 300); -// OssClient storage = OssFactory.instance(); -// UploadResult upload = storage.upload(bytes, storage.getPath("qrCode",".png"), "image/png"); -// BeanUtil.copyProperties(payOrder,paymentOrdersVo); -// paymentOrdersVo.setUrl(upload.getUrl()); -// } catch (WxPayException e) { -// throw new BaseException("鑾峰彇寰俊鏀粯浜岀淮鐮佸彂鐢熼敊璇細{}"+e.getMessage()); -// } -// } -// return R.ok(paymentOrdersVo); -// } -// -// /** -// * 鍥炶皟閫氱煡鍦板潃 -// * -// * @Date 2023/7/3 -// * @param -// * @return void -// **/ -// @GetMapping("/notifyUrl") -// public String notifyUrl(PayResponse payResponse) { -// // 鏍¢獙绛惧悕 -// String mdString = "money=" + payResponse.getMoney() + "&name=" + payResponse.getName() + -// "&out_trade_no=" + payResponse.getOut_trade_no() + "&pid=" + payConfig.getPid() + -// "&trade_no=" + payResponse.getTrade_no() + "&trade_status=" + payResponse.getTrade_status() + -// "&type=" + payResponse.getType() + payConfig.getKey(); -// String sign = MD5Util.GetMD5Code(mdString); -// if(!sign.equals(payResponse.getSign())){ -// throw new BaseException("鏍¢獙绛惧悕澶辫触锛�"); -// } -// double money = Double.parseDouble(payResponse.getMoney()); -// log.info("鏀粯璁㈠崟鍙穥}",payResponse); -// PaymentOrdersBo paymentOrdersBo = new PaymentOrdersBo(); -// paymentOrdersBo.setOrderNo(payResponse.getOut_trade_no()); -// List<PaymentOrdersVo> paymentOrdersList = paymentOrdersService.queryList(paymentOrdersBo); -// if (CollectionUtil.isEmpty(paymentOrdersList)){ -// throw new BaseException("璁㈠崟涓嶅瓨鍦紒"); -// } -// // 璁㈠崟鐘舵�佷慨鏀逛负宸叉敮浠� -// PaymentOrdersVo paymentOrdersVo = paymentOrdersList.get(0); -// paymentOrdersVo.setPaymentStatus("2"); -// paymentOrdersVo.setPaymentMethod(payResponse.getType()); -// BeanUtil.copyProperties(paymentOrdersVo,paymentOrdersBo); -// paymentOrdersService.updateByBo(paymentOrdersBo); -// -// SysUserVo sysUserVo = userService.selectUserById(paymentOrdersVo.getUserId()); -// sysUserVo.setUserBalance(sysUserVo.getUserBalance() + money); -// SysUserBo sysUserBo = new SysUserBo(); -// BeanUtil.copyProperties(sysUserVo,sysUserBo); -// // 璁剧疆涓轰粯璐圭敤鎴� -// sysUserBo.setUserGrade("1"); -// userService.updateUser(sysUserBo); -// return "success"; -// } -// -// /** -// * 璺宠浆閫氱煡鍦板潃 -// * -// * @Date 2023/7/3 -// * @param -// * @return void -// **/ -// @GetMapping("/return_url") -// public void returnUrl() { -// log.info("return_url==========="); -// } -// -// -// @PostMapping("/notify/wxOrder") -// public String parseOrderNotifyResult(@RequestBody String xmlData) throws WxPayException { -// WxPayOrderNotifyResult notifyResult = this.wxService.parseOrderNotifyResult(xmlData); -// // TODO 鏍规嵁鑷繁涓氬姟鍦烘櫙闇�瑕佹瀯閫犺繑鍥炲璞� -// PaymentOrdersBo paymentOrdersBo = new PaymentOrdersBo(); -// paymentOrdersBo.setOrderNo(notifyResult.getOutTradeNo()); -// List<PaymentOrdersVo> paymentOrdersList = paymentOrdersService.queryList(paymentOrdersBo); -// PaymentOrdersVo paymentOrdersVo = paymentOrdersList.get(0); -// paymentOrdersVo.setPaymentStatus("2"); -// paymentOrdersVo.setPaymentMethod("wx"); -// BeanUtil.copyProperties(paymentOrdersVo,paymentOrdersBo); -// paymentOrdersService.updateByBo(paymentOrdersBo); -// SysUserVo sysUserVo = userService.selectUserById(paymentOrdersVo.getUserId()); -// sysUserVo.setUserBalance(sysUserVo.getUserBalance() + convertCentsToYuan(notifyResult.getTotalFee())); -// SysUserBo sysUserBo = new SysUserBo(); -// BeanUtil.copyProperties(sysUserVo,sysUserBo); -// // 璁剧疆涓轰粯璐圭敤鎴� -// sysUserBo.setUserGrade("1"); -// userService.updateUser(sysUserBo); -// return WxPayNotifyResponse.success("success"); -// } -// -// /** -// * 灏嗗垎杞崲涓哄厓锛屽苟淇濈暀绮惧害銆� -// * -// * @param cents 鍒嗙殑閲戦锛岀被鍨嬩负Integer -// * @return 杞崲鍚庣殑鍏冮噾棰濓紝绫诲瀷涓篸ouble -// */ -// public static double convertCentsToYuan(Integer cents) { -// // 澶勭悊绌鸿緭鍏� -// if (cents == null) { -// throw new IllegalArgumentException("杈撳叆鐨勫垎閲戦涓嶈兘涓虹┖"); -// } -// -// // 100鍒� = 1鍏� -// BigDecimal centsBigDecimal = new BigDecimal(cents); -// BigDecimal yuan = centsBigDecimal.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP); -// // 杞崲涓篸ouble骞惰繑鍥� -// return yuan.doubleValue(); -// } -// -// /** -// * 鑾峰彇璁㈠崟淇℃伅 -// * -// */ -// @PostMapping("/orderInfo") -// public R<PaymentOrdersVo> orderInfo(@RequestBody OrderRequest orderRequest) { -// if(StringUtils.isEmpty(orderRequest.getOrderNo())){ -// throw new BaseException("璁㈠崟鍙蜂笉鑳戒负绌猴紒"); -// } -// PaymentOrdersBo paymentOrdersBo = new PaymentOrdersBo(); -// paymentOrdersBo.setOrderNo(orderRequest.getOrderNo()); -// List<PaymentOrdersVo> paymentOrdersList = paymentOrdersService.queryList(paymentOrdersBo); -// if (CollectionUtil.isEmpty(paymentOrdersList)){ -// throw new BaseException("璁㈠崟涓嶅瓨鍦紒"); -// } -// PaymentOrdersVo paymentOrdersVo = paymentOrdersList.get(0); -// return R.ok(paymentOrdersVo); -// } -// -// // 鑾峰彇鏀粯閾炬帴 -//// static { -//// Stripe.apiKey = "sk_test_51PMMj2KcfX4oNioqXkoKpScTsgmR55xQki2tg8MEZJYc0gjhYV85t2FzDasE06eqZb0sqyYhOp3UXhcGGQLWI4A9008aq8SOnb"; -//// } -// -// /** -// * 鍘绘敮浠� -// * 1銆佸垱寤轰骇鍝� -// * 2銆佽缃环鏍� -// * 3銆佸垱寤烘敮浠樹俊鎭� 寰楀埌url -// * @return -// */ -// @PostMapping("/stripePay") -// public String pay(@RequestBody OrderRequest orderRequest) throws StripeException { -// -// String enabled = configService.getConfigValue("stripe", "enabled"); -// if(!Boolean.parseBoolean(enabled)){ -// String prompt = configService.getConfigValue("stripe", "prompt"); -// throw new BaseException(prompt); -// } -// -// // 鑾峰彇鏀粯閾炬帴 -// Stripe.apiKey = configService.getConfigValue("stripe", "key"); -// -// // 鑾峰彇閲戦瀛楃涓插苟瑙f瀽涓� double -// double moneyDouble = Double.parseDouble(orderRequest.getMoney()); -// -// // 灏嗛噾棰濊浆鎹负浠ュ垎涓哄崟浣嶇殑鏁存暟 -// int randMoney = (int) (moneyDouble * 100); -// -// Map<String, Object> params = new HashMap<>(); -// params.put("name", orderRequest.getName()); -// Product product = Product.create(params); -// -// Map<String, Object> recurring = new HashMap<>(); -// recurring.put("interval", "month"); -// Map<String, Object> params2 = new HashMap<>(); -// params2.put("unit_amount", randMoney); -// params2.put("currency", "usd"); -// params2.put("recurring", recurring); -// params2.put("product", product.getId()); -// Price price = Price.create(params2); -// -// // 鍒涘缓鏀粯璁㈠崟 -// PaymentOrdersBo payOrder = paymentOrdersService.createPayOrder(orderRequest); -// -// //鍒涘缓鏀粯淇℃伅 寰楀埌url -// SessionCreateParams params3 = SessionCreateParams.builder() -// .setMode(SessionCreateParams.Mode.SUBSCRIPTION) -// .setSuccessUrl(configService.getConfigValue("stripe", "success")) -// .setCancelUrl(configService.getConfigValue("stripe", "cancel")) -// .addLineItem( -// SessionCreateParams.LineItem.builder() -// .setQuantity(1L) -// .setPrice(price.getId()) -// .build()).putMetadata("orderId", payOrder.getOrderNo()) -// .build(); -// Session session = Session.create(params3); -// return session.getUrl(); -// } -// -// /** -// * 鏀粯鍥炶皟 -// * -// */ -// @PostMapping("/stripe_events") -// public R<String> stripeEvent(HttpServletRequest request) { -// try { -// String endpointSecret = configService.getConfigValue("stripe", "secret");//webhook绉橀挜绛惧悕 -// InputStream inputStream = request.getInputStream(); -// ByteArrayOutputStream output = new ByteArrayOutputStream(); -// byte[] buffer = new byte[1024*4]; -// int n = 0; -// while (-1 != (n = inputStream.read(buffer))) { -// output.write(buffer, 0, n); -// } -// byte[] bytes = output.toByteArray(); -// String payload = new String(bytes, "UTF-8"); -// String sigHeader = request.getHeader("Stripe-Signature"); -// Event event = Webhook.constructEvent(payload, sigHeader, endpointSecret);//楠岀锛屽苟鑾峰彇浜嬩欢 -// if("checkout.session.completed".equals(event.getType())){ -// // 瑙f瀽 JSON 瀛楃涓蹭负 JSONObject -// JSONObject jsonObject = JSONUtil.parseObj(event); -// // 鑾峰彇 metadata 瀵硅薄 -// JSONObject metadata = jsonObject.getJSONObject("data") -// .getJSONObject("object") -// .getJSONObject("metadata"); -// -// OrderRequest orderRequest = new OrderRequest(); -// orderRequest.setPayType("stripe"); -// orderRequest.setOrderNo(metadata.getStr("orderId")); -// paymentOrdersService.updatePayOrder(orderRequest); -// } -// } catch (Exception e) { -// System.out.println("stripe寮傛閫氱煡锛坵ebhook浜嬩欢锛�"+e); -// } -// return R.ok(); -// } -// -// public String getKey(String key) { -// return configService.getConfigValue("weixin", key); -// } -// -//} -// diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/PaymentOrdersController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/PaymentOrdersController.java deleted file mode 100644 index eebfa8e..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/PaymentOrdersController.java +++ /dev/null @@ -1,108 +0,0 @@ -package org.ruoyi.system.controller.system; - -import cn.dev33.satoken.annotation.SaCheckPermission; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import lombok.RequiredArgsConstructor; -import org.ruoyi.common.core.domain.R; -import org.ruoyi.common.core.validate.AddGroup; -import org.ruoyi.common.core.validate.EditGroup; -import org.ruoyi.common.excel.utils.ExcelUtil; -import org.ruoyi.common.idempotent.annotation.RepeatSubmit; -import org.ruoyi.common.log.annotation.Log; -import org.ruoyi.common.log.enums.BusinessType; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.common.web.core.BaseController; -import org.ruoyi.system.domain.bo.PaymentOrdersBo; -import org.ruoyi.system.domain.vo.PaymentOrdersVo; -import org.ruoyi.system.service.IPaymentOrdersService; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * 鏀粯璁㈠崟 - * - * @author Lion Li - * @date 2024-04-16 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/system/payOrder") -public class PaymentOrdersController extends BaseController { - - private final IPaymentOrdersService paymentOrdersService; - - /** - * 鏌ヨ鏀粯璁㈠崟鍒楄〃 - */ - @SaCheckPermission("system:order:list") - @GetMapping("/list") - public TableDataInfo<PaymentOrdersVo> list(PaymentOrdersBo bo, PageQuery pageQuery) { - pageQuery.setOrderByColumn("createTime"); - pageQuery.setIsAsc("desc"); - return paymentOrdersService.queryPageList(bo, pageQuery); - } - - /** - * 瀵煎嚭鏀粯璁㈠崟鍒楄〃 - */ - @SaCheckPermission("system:order:export") - @Log(title = "鏀粯璁㈠崟", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(PaymentOrdersBo bo, HttpServletResponse response) { - List<PaymentOrdersVo> list = paymentOrdersService.queryList(bo); - ExcelUtil.exportExcel(list, "鏀粯璁㈠崟", PaymentOrdersVo.class, response); - } - - /** - * 鑾峰彇鏀粯璁㈠崟璇︾粏淇℃伅 - * - * @param id 涓婚敭 - */ - @SaCheckPermission("system:order:query") - @GetMapping("/{id}") - public R<PaymentOrdersVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long id) { - return R.ok(paymentOrdersService.queryById(id)); - } - - /** - * 鏂板鏀粯璁㈠崟 - */ - @SaCheckPermission("system:order:add") - @Log(title = "鏀粯璁㈠崟", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public R<Void> add(@Validated(AddGroup.class) @RequestBody PaymentOrdersBo bo) { - return toAjax(paymentOrdersService.insertByBo(bo)); - } - - /** - * 淇敼鏀粯璁㈠崟 - */ - @SaCheckPermission("system:order:edit") - @Log(title = "鏀粯璁㈠崟", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R<Void> edit(@Validated(EditGroup.class) @RequestBody PaymentOrdersBo bo) { - return toAjax(paymentOrdersService.updateByBo(bo)); - } - - /** - * 鍒犻櫎鏀粯璁㈠崟 - * - * @param ids 涓婚敭涓� - */ - @SaCheckPermission("system:order:remove") - @Log(title = "鏀粯璁㈠崟", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long[] ids) { - return toAjax(paymentOrdersService.deleteWithValidByIds(List.of(ids), true)); - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/SysModelController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/SysModelController.java deleted file mode 100644 index 9f7760e..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/SysModelController.java +++ /dev/null @@ -1,153 +0,0 @@ -package org.ruoyi.system.controller.system; - -import cn.dev33.satoken.annotation.SaCheckPermission; -import cn.dev33.satoken.stp.StpUtil; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import lombok.RequiredArgsConstructor; -import org.ruoyi.common.core.domain.R; -import org.ruoyi.common.core.validate.AddGroup; -import org.ruoyi.common.core.validate.EditGroup; -import org.ruoyi.common.excel.utils.ExcelUtil; -import org.ruoyi.common.idempotent.annotation.RepeatSubmit; -import org.ruoyi.common.log.annotation.Log; -import org.ruoyi.common.log.enums.BusinessType; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.common.satoken.utils.LoginHelper; -import org.ruoyi.common.web.core.BaseController; -import org.ruoyi.system.domain.bo.SysModelBo; -import org.ruoyi.system.domain.bo.SysPackagePlanBo; -import org.ruoyi.system.domain.vo.SysModelVo; -import org.ruoyi.system.domain.vo.SysPackagePlanVo; -import org.ruoyi.system.domain.vo.SysUserVo; -import org.ruoyi.system.service.ISysModelService; -import org.ruoyi.system.service.ISysPackagePlanService; -import org.ruoyi.system.service.ISysUserService; -import org.ruoyi.system.util.DesensitizationUtil; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -/** - * 绯荤粺妯″瀷 - * - * @author Lion Li - * @date 2024-04-04 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/system/model") -public class SysModelController extends BaseController { - - private final ISysModelService sysModelService; - - private final ISysPackagePlanService sysPackagePlanService; - - private final ISysUserService userService; - - /** - * 鏌ヨ绯荤粺妯″瀷鍒楄〃 - 鍏ㄩ儴 - */ - @GetMapping("/list") - public TableDataInfo<SysModelVo> list(SysModelBo bo, PageQuery pageQuery) { - return sysModelService.queryPageList(bo, pageQuery); - } - - /** - * 鏌ヨ绯荤粺妯″瀷鍒楄〃 - */ - @GetMapping("/modelList") - public R<List<SysModelVo>> modelList(SysModelBo bo) { - bo.setModelShow("0"); - List<SysModelVo> sysModelVos = sysModelService.queryList(bo); - SysPackagePlanBo sysPackagePlanBo = new SysPackagePlanBo(); - if (StpUtil.isLogin()) { - Long userId = LoginHelper.getLoginUser().getUserId(); - SysUserVo sysUserVo = userService.selectUserById(userId); - if ("0".equals(sysUserVo.getUserGrade())){ - sysPackagePlanBo.setName("Free"); - SysPackagePlanVo sysPackagePlanVo = sysPackagePlanService.queryList(sysPackagePlanBo).get(0); - List<String> array = new ArrayList<>(Arrays.asList(sysPackagePlanVo.getPlanDetail().split(","))); - sysModelVos.removeIf(model -> !array.contains(model.getModelName())); - } - }else { - sysPackagePlanBo.setName("Visitor"); - SysPackagePlanVo sysPackagePlanVo = sysPackagePlanService.queryList(sysPackagePlanBo).get(0); - List<String> array = new ArrayList<>(Arrays.asList(sysPackagePlanVo.getPlanDetail().split(","))); - sysModelVos.removeIf(model -> !array.contains(model.getModelName())); - } - sysModelVos.stream().map(vo -> { - String maskedApiHost = DesensitizationUtil.maskData(vo.getApiHost()); - String maskedApiKey = DesensitizationUtil.maskData(vo.getApiKey()); - vo.setApiHost(maskedApiHost); - vo.setApiKey(maskedApiKey); - return vo; - }) - .collect(Collectors.toList()); - return R.ok(sysModelVos); - } - - /** - * 瀵煎嚭绯荤粺妯″瀷鍒楄〃 - */ - @SaCheckPermission("system:model:export") - @Log(title = "绯荤粺妯″瀷", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(SysModelBo bo, HttpServletResponse response) { - List<SysModelVo> list = sysModelService.queryList(bo); - ExcelUtil.exportExcel(list, "绯荤粺妯″瀷", SysModelVo.class, response); - } - - /** - * 鑾峰彇绯荤粺妯″瀷璇︾粏淇℃伅 - * - * @param id 涓婚敭 - */ - @SaCheckPermission("system:model:query") - @GetMapping("/{id}") - public R<SysModelVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long id) { - return R.ok(sysModelService.queryById(id)); - } - - /** - * 鏂板绯荤粺妯″瀷 - */ - @SaCheckPermission("system:model:add") - @Log(title = "绯荤粺妯″瀷", businessType = BusinessType.INSERT) - @PostMapping() - public R<Void> add(@Validated(AddGroup.class) @RequestBody SysModelBo bo) { - return toAjax(sysModelService.insertByBo(bo)); - } - - /** - * 淇敼绯荤粺妯″瀷 - */ - @SaCheckPermission("system:model:edit") - @Log(title = "绯荤粺妯″瀷", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysModelBo bo) { - return toAjax(sysModelService.updateByBo(bo)); - } - - /** - * 鍒犻櫎绯荤粺妯″瀷 - * - * @param ids 涓婚敭涓� - */ - @SaCheckPermission("system:model:remove") - @Log(title = "绯荤粺妯″瀷", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long[] ids) { - return toAjax(sysModelService.deleteWithValidByIds(List.of(ids), true)); - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/SysNoticeController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/SysNoticeController.java index 4f30a3a..a02568b 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/SysNoticeController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/SysNoticeController.java @@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.*; /** - * 鍏憡 淇℃伅鎿嶄綔澶勭悊 + * 鍏憡淇℃伅鎿嶄綔澶勭悊 * * @author Lion Li */ diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/SysPackagePlanController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/SysPackagePlanController.java deleted file mode 100644 index 068ffd6..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/SysPackagePlanController.java +++ /dev/null @@ -1,114 +0,0 @@ -package org.ruoyi.system.controller.system; - -import java.util.List; - -import org.ruoyi.common.excel.utils.ExcelUtil; -import org.ruoyi.common.idempotent.annotation.RepeatSubmit; -import lombok.RequiredArgsConstructor; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.*; -import cn.dev33.satoken.annotation.SaCheckPermission; -import org.springframework.web.bind.annotation.*; -import org.springframework.validation.annotation.Validated; - -import org.ruoyi.common.log.annotation.Log; -import org.ruoyi.common.web.core.BaseController; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.core.domain.R; -import org.ruoyi.common.core.validate.AddGroup; -import org.ruoyi.common.core.validate.EditGroup; -import org.ruoyi.common.log.enums.BusinessType; - -import org.ruoyi.system.domain.vo.SysPackagePlanVo; -import org.ruoyi.system.domain.bo.SysPackagePlanBo; -import org.ruoyi.system.service.ISysPackagePlanService; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; - -/** - * 濂楅绠$悊 - * - * @author Lion Li - * @date 2024-05-05 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/system/packagePlan") -public class SysPackagePlanController extends BaseController { - - private final ISysPackagePlanService sysPackagePlanService; - - /** - * 鏌ヨ濂楅绠$悊鍒楄〃 - */ - @GetMapping("/list") - public TableDataInfo<SysPackagePlanVo> list(SysPackagePlanBo bo, PageQuery pageQuery) { - return sysPackagePlanService.queryPageList(bo, pageQuery); - } - - @GetMapping("/listPlan") - public R<List<SysPackagePlanVo>> listPlan() { - return R.ok(sysPackagePlanService.queryList(new SysPackagePlanBo())); - } - - /** - * 瀵煎嚭濂楅绠$悊鍒楄〃 - */ - @SaCheckPermission("system:packagePlan:export") - @Log(title = "濂楅绠$悊", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(SysPackagePlanBo bo, HttpServletResponse response) { - List<SysPackagePlanVo> list = sysPackagePlanService.queryList(bo); - ExcelUtil.exportExcel(list, "濂楅绠$悊", SysPackagePlanVo.class, response); - } - - /** - * 鑾峰彇濂楅绠$悊璇︾粏淇℃伅 - * - * @param id 涓婚敭 - */ - @SaCheckPermission("system:packagePlan:query") - @GetMapping("/{id}") - public R<SysPackagePlanVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long id) { - return R.ok(sysPackagePlanService.queryById(id)); - } - - - - - /** - * 鏂板濂楅绠$悊 - */ - @SaCheckPermission("system:packagePlan:add") - @Log(title = "濂楅绠$悊", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public R<Void> add(@Validated(AddGroup.class) @RequestBody SysPackagePlanBo bo) { - return toAjax(sysPackagePlanService.insertByBo(bo)); - } - - /** - * 淇敼濂楅绠$悊 - */ - @SaCheckPermission("system:packagePlan:edit") - @Log(title = "濂楅绠$悊", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysPackagePlanBo bo) { - return toAjax(sysPackagePlanService.updateByBo(bo)); - } - - /** - * 鍒犻櫎濂楅绠$悊 - * - * @param ids 涓婚敭涓� - */ - @SaCheckPermission("system:packagePlan:remove") - @Log(title = "濂楅绠$悊", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long[] ids) { - return toAjax(sysPackagePlanService.deleteWithValidByIds(List.of(ids), true)); - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/SysUserGroupController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/SysUserGroupController.java deleted file mode 100644 index abff433..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/SysUserGroupController.java +++ /dev/null @@ -1,106 +0,0 @@ -package org.ruoyi.system.controller.system; - -import cn.dev33.satoken.annotation.SaCheckPermission; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import lombok.RequiredArgsConstructor; -import org.ruoyi.common.core.domain.R; -import org.ruoyi.common.core.validate.AddGroup; -import org.ruoyi.common.core.validate.EditGroup; -import org.ruoyi.common.excel.utils.ExcelUtil; -import org.ruoyi.common.idempotent.annotation.RepeatSubmit; -import org.ruoyi.common.log.annotation.Log; -import org.ruoyi.common.log.enums.BusinessType; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.common.web.core.BaseController; -import org.ruoyi.system.domain.bo.SysUserGroupBo; -import org.ruoyi.system.domain.vo.SysUserGroupVo; -import org.ruoyi.system.service.ISysUserGroupService; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆� - * - * @author Lion Li - * @date 2024-08-03 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/system/userGroup") -public class SysUserGroupController extends BaseController { - - private final ISysUserGroupService sysUserGroupService; - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - @SaCheckPermission("system:userGroup:list") - @GetMapping("/list") - public TableDataInfo<SysUserGroupVo> list(SysUserGroupBo bo, PageQuery pageQuery) { - return sysUserGroupService.queryPageList(bo, pageQuery); - } - - /** - * 瀵煎嚭銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - @SaCheckPermission("system:userGroup:export") - @Log(title = "銆愯濉啓鍔熻兘鍚嶇О銆�", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(SysUserGroupBo bo, HttpServletResponse response) { - List<SysUserGroupVo> list = sysUserGroupService.queryList(bo); - ExcelUtil.exportExcel(list, "銆愯濉啓鍔熻兘鍚嶇О銆�", SysUserGroupVo.class, response); - } - - /** - * 鑾峰彇銆愯濉啓鍔熻兘鍚嶇О銆戣缁嗕俊鎭� - * - * @param id 涓婚敭 - */ - @SaCheckPermission("system:userGroup:query") - @GetMapping("/{id}") - public R<SysUserGroupVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long id) { - return R.ok(sysUserGroupService.queryById(id)); - } - - /** - * 鏂板銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @SaCheckPermission("system:userGroup:add") - @Log(title = "銆愯濉啓鍔熻兘鍚嶇О銆�", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public R<Void> add(@Validated(AddGroup.class) @RequestBody SysUserGroupBo bo) { - return toAjax(sysUserGroupService.insertByBo(bo)); - } - - /** - * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @SaCheckPermission("system:userGroup:edit") - @Log(title = "銆愯濉啓鍔熻兘鍚嶇О銆�", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysUserGroupBo bo) { - return toAjax(sysUserGroupService.updateByBo(bo)); - } - - /** - * 鍒犻櫎銆愯濉啓鍔熻兘鍚嶇О銆� - * - * @param ids 涓婚敭涓� - */ - @SaCheckPermission("system:userGroup:remove") - @Log(title = "銆愯濉啓鍔熻兘鍚嶇О銆�", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long[] ids) { - return toAjax(sysUserGroupService.deleteWithValidByIds(List.of(ids), true)); - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/SysUserModelController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/SysUserModelController.java deleted file mode 100644 index 3e97801..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/SysUserModelController.java +++ /dev/null @@ -1,105 +0,0 @@ -package org.ruoyi.system.controller.system; - -import java.util.List; - -import org.ruoyi.common.excel.utils.ExcelUtil; -import org.ruoyi.common.idempotent.annotation.RepeatSubmit; -import lombok.RequiredArgsConstructor; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.*; -import cn.dev33.satoken.annotation.SaCheckPermission; -import org.springframework.web.bind.annotation.*; -import org.springframework.validation.annotation.Validated; -import org.ruoyi.common.log.annotation.Log; -import org.ruoyi.common.web.core.BaseController; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.core.domain.R; -import org.ruoyi.common.core.validate.AddGroup; -import org.ruoyi.common.core.validate.EditGroup; -import org.ruoyi.common.log.enums.BusinessType; -import org.ruoyi.system.domain.vo.SysUserModelVo; -import org.ruoyi.system.domain.bo.SysUserModelBo; -import org.ruoyi.system.service.ISysUserModelService; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆� - * - * @author Lion Li - * @date 2024-08-03 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/system/userModel") -public class SysUserModelController extends BaseController { - - private final ISysUserModelService sysUserModelService; - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - @SaCheckPermission("system:userModel:list") - @GetMapping("/list") - public TableDataInfo<SysUserModelVo> list(SysUserModelBo bo, PageQuery pageQuery) { - return sysUserModelService.queryPageList(bo, pageQuery); - } - - /** - * 瀵煎嚭銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - @SaCheckPermission("system:userModel:export") - @Log(title = "銆愯濉啓鍔熻兘鍚嶇О銆�", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(SysUserModelBo bo, HttpServletResponse response) { - List<SysUserModelVo> list = sysUserModelService.queryList(bo); - ExcelUtil.exportExcel(list, "銆愯濉啓鍔熻兘鍚嶇О銆�", SysUserModelVo.class, response); - } - - /** - * 鑾峰彇銆愯濉啓鍔熻兘鍚嶇О銆戣缁嗕俊鎭� - * - * @param id 涓婚敭 - */ - @SaCheckPermission("system:userModel:query") - @GetMapping("/{id}") - public R<SysUserModelVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long id) { - return R.ok(sysUserModelService.queryById(id)); - } - - /** - * 鏂板銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @SaCheckPermission("system:userModel:add") - @Log(title = "銆愯濉啓鍔熻兘鍚嶇О銆�", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public R<Void> add(@Validated(AddGroup.class) @RequestBody SysUserModelBo bo) { - return toAjax(sysUserModelService.insertByBo(bo)); - } - - /** - * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @SaCheckPermission("system:userModel:edit") - @Log(title = "銆愯濉啓鍔熻兘鍚嶇О銆�", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysUserModelBo bo) { - return toAjax(sysUserModelService.updateByBo(bo)); - } - - /** - * 鍒犻櫎銆愯濉啓鍔熻兘鍚嶇О銆� - * - * @param ids 涓婚敭涓� - */ - @SaCheckPermission("system:userModel:remove") - @Log(title = "銆愯濉啓鍔熻兘鍚嶇О銆�", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long[] ids) { - return toAjax(sysUserModelService.deleteWithValidByIds(List.of(ids), true)); - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/WeChatController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/WeChatController.java deleted file mode 100644 index eeaeb90..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/WeChatController.java +++ /dev/null @@ -1,81 +0,0 @@ -//package org.ruoyi.system.controller.system; -// -//import cn.dev33.satoken.annotation.SaIgnore; -//import lombok.RequiredArgsConstructor; -//import lombok.extern.slf4j.Slf4j; -//import org.ruoyi.common.core.exception.ServiceException; -//import org.ruoyi.common.wechat.itchat4j.api.WechatTools; -//import org.ruoyi.common.wechat.itchat4j.controller.LoginController; -//import org.ruoyi.common.wechat.itchat4j.core.MsgCenter; -//import org.ruoyi.common.wechat.itchat4j.face.IMsgHandlerFace; -//import org.ruoyi.common.wechat.web.base.BaseException; -//import org.ruoyi.system.domain.bo.WxRobConfigBo; -//import org.ruoyi.system.domain.vo.WxRobConfigVo; -//import org.ruoyi.system.handler.MyMsgHandler; -//import org.ruoyi.system.service.ISseService; -//import org.ruoyi.system.service.IWxRobConfigService; -//import org.springframework.validation.annotation.Validated; -//import org.springframework.web.bind.annotation.PostMapping; -//import org.springframework.web.bind.annotation.RequestParam; -//import org.springframework.web.bind.annotation.RestController; -// -//import java.util.List; -// -///** -// * 涓汉寰俊鎵╁睍鎺у埗鍣� -// * -// * @author WangLe -// */ -//@SaIgnore -//@Slf4j -//@Validated -//@RequiredArgsConstructor -//@RestController -//public class WeChatController { -// -// private final ISseService sseService; -// -// private final IWxRobConfigService wxRobConfigService; -// -// /** -// * 鐧诲綍绗竴姝ワ紝鑾峰彇浜岀淮鐮侀摼鎺� -// * @throws BaseException -// */ -// @PostMapping("/getQr") -// public String getQr(@RequestParam String uniqueKey) { -// LoginController login = new LoginController(uniqueKey); -// try { -// return login.login_1(); -// } catch (BaseException e) { -// throw new ServiceException("鑾峰彇浜岀淮鐮佸け璐ワ細"+ e.getMessage()); -// } -// } -// -// @PostMapping("/wxLogin") -// public Boolean wxLogin(@RequestParam String uniqueKey) { -// LoginController login = new LoginController(uniqueKey); -// return login.login_2(); -// } -// -// @PostMapping("/wxInit") -// public Boolean wxInit(@RequestParam String uniqueKey) { -// LoginController login = new LoginController(uniqueKey); -// // 寮�鍚秷鎭鐞嗙嚎绋� -// WxRobConfigBo wxRobConfigBo = new WxRobConfigBo(); -// wxRobConfigBo.setUniqueKey(uniqueKey); -// List<WxRobConfigVo> wxRobConfigVos = wxRobConfigService.queryList(wxRobConfigBo); -// //鏌ヨ鏈哄櫒浜哄搴旂殑鐢ㄦ埛 -// start(uniqueKey,new MyMsgHandler(uniqueKey,sseService,wxRobConfigVos.get(0))); -// return login.login_3(); -// } -// -// @PostMapping("/wxLogout") -// public void wxLogout(@RequestParam String uniqueKey) { -// WechatTools.logout(uniqueKey); -// } -// -// public void start(String uniqueKey,IMsgHandlerFace msgHandler) { -// log.info("7.+++寮�鍚秷鎭鐞嗙嚎绋媅"+uniqueKey+"]+++"); -// new Thread(() -> MsgCenter.handleMsg(uniqueKey,msgHandler)).start(); -// } -//} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/WeixinServerController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/WeixinServerController.java deleted file mode 100644 index f0ac84f..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/WeixinServerController.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.ruoyi.system.controller.system; - - -import jakarta.servlet.http.HttpServletRequest; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.ruoyi.system.service.WeixinUserService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -/** - * @author https://www.wdbyte.com - */ -@Slf4j -@RestController -public class WeixinServerController { - - @Autowired - private WeixinUserService weixinUserService; - - @GetMapping(value = "/weixin/check") - public String weixinCheck(HttpServletRequest request) { - String signature = request.getParameter("signature"); - String timestamp = request.getParameter("timestamp"); - String nonce = request.getParameter("nonce"); - String echostr = request.getParameter("echostr"); - - if (StringUtils.isEmpty(signature) || StringUtils.isEmpty(timestamp) || StringUtils.isEmpty(nonce)) { - return ""; - } - weixinUserService.checkSignature(signature, timestamp, nonce); - return echostr; - } - - @PostMapping(value = "/weixin/check") - public String weixinMsg(@RequestBody String requestBody, @RequestParam("signature") String signature, - @RequestParam("timestamp") String timestamp, @RequestParam("nonce") String nonce) { - - log.debug("requestBody:{}", requestBody); - log.debug("signature:{}", signature); - log.debug("timestamp:{}", timestamp); - log.debug("nonce:{}", nonce); - - weixinUserService.checkSignature(signature, timestamp, nonce); - return weixinUserService.handleWeixinMsg(requestBody); - } - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/WeixinUserController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/WeixinUserController.java deleted file mode 100644 index d006ba5..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/WeixinUserController.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.ruoyi.system.controller.system; - -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.ruoyi.common.core.domain.R; -import org.ruoyi.system.domain.model.WeixinQrCode; -import org.ruoyi.system.domain.vo.LoginVo; -import org.ruoyi.system.service.SysLoginService; -import org.ruoyi.system.util.WeixinApiUtil; -import org.ruoyi.system.util.WeixinQrCodeCacheUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * @author https://www.wdbyte.com - */ -@Slf4j -@RestController -public class WeixinUserController { - - @Autowired - private WeixinApiUtil weixinApiUtil; - - @Autowired - private SysLoginService loginService; - - @GetMapping(value = "/user/qrcode") - public R<WeixinQrCode> getQrCode() { - WeixinQrCode qrCode = weixinApiUtil.getQrCode(); - qrCode.setUrl(null); - qrCode.setExpireSeconds(null); - return R.ok(qrCode); - } - - /** - * 鏍¢獙鏄惁鎵弿瀹屾垚 - * 瀹屾垚锛岃繑鍥� JWT - * 鏈畬鎴愶紝杩斿洖 check faild - * - * @param ticket - * @return - */ - @GetMapping(value = "/user/login/qrcode") - public R<LoginVo> userLogin(String ticket) { - String openId = WeixinQrCodeCacheUtil.get(ticket); - if (StringUtils.isNotEmpty(openId)) { - log.info("login success,open id:{}", openId); - LoginVo loginVo = loginService.mpLogin(openId); - return R.ok(loginVo); - } - log.info("login error,ticket:{}", ticket); - return R.fail("check faild"); - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/WxRobConfigController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/WxRobConfigController.java deleted file mode 100644 index c534683..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/WxRobConfigController.java +++ /dev/null @@ -1,114 +0,0 @@ -package org.ruoyi.system.controller.system; - -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import lombok.RequiredArgsConstructor; -import org.ruoyi.common.core.domain.R; -import org.ruoyi.common.core.validate.AddGroup; -import org.ruoyi.common.core.validate.EditGroup; -import org.ruoyi.common.excel.utils.ExcelUtil; -import org.ruoyi.common.idempotent.annotation.RepeatSubmit; -import org.ruoyi.common.log.annotation.Log; -import org.ruoyi.common.log.enums.BusinessType; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.common.satoken.utils.LoginHelper; -import org.ruoyi.common.web.core.BaseController; -import org.ruoyi.common.wechat.web.utils.UUIDShortUtil; -import org.ruoyi.system.domain.bo.WxRobConfigBo; -import org.ruoyi.system.domain.vo.WxRobConfigVo; -import org.ruoyi.system.service.IWxRobConfigService; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * 鏈哄櫒浜� - * - * @author Lion Li - * @date 2024-05-01 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/system/robConfig") -public class WxRobConfigController extends BaseController { - - private final IWxRobConfigService wxRobConfigService; - - /** - * 鏌ヨ鏈哄櫒浜哄垪琛� - */ - @GetMapping("/list") - public TableDataInfo<WxRobConfigVo> list(WxRobConfigBo bo, PageQuery pageQuery) { - return wxRobConfigService.queryPageList(bo, pageQuery); - } - - /** - * 鏌ヨ褰撳墠鐢ㄦ埛缁戝畾鐨勬満鍣ㄤ汉淇℃伅 - * @param bo 鏌ヨ鍙傛暟 - * @return 鏈哄櫒浜轰俊鎭� - */ - @GetMapping("/getRobConfig") - public R<List<WxRobConfigVo>> botList(WxRobConfigBo bo) { - bo.setUserId(LoginHelper.getUserId()); - return R.ok(wxRobConfigService.queryList(bo)); - } - - /** - * 瀵煎嚭鏈哄櫒浜哄垪琛� - */ - @Log(title = "鏈哄櫒浜�", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(WxRobConfigBo bo, HttpServletResponse response) { - List<WxRobConfigVo> list = wxRobConfigService.queryList(bo); - ExcelUtil.exportExcel(list, "鏈哄櫒浜�", WxRobConfigVo.class, response); - } - - /** - * 鑾峰彇鏈哄櫒浜鸿缁嗕俊鎭� - * - * @param id 涓婚敭 - */ - @GetMapping("/{id}") - public R<WxRobConfigVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long id) { - return R.ok(wxRobConfigService.queryById(id)); - } - - /** - * 鏂板鏈哄櫒浜� - */ - @Log(title = "鏈哄櫒浜�", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public R<Void> add(@Validated(AddGroup.class) @RequestBody WxRobConfigBo bo) { - String uniKey = UUIDShortUtil.generateShortUuid(); - bo.setUniqueKey(uniKey); - return toAjax(wxRobConfigService.insertByBo(bo)); - } - - /** - * 淇敼鏈哄櫒浜� - */ - @Log(title = "鏈哄櫒浜�", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R<Void> edit(@Validated(EditGroup.class) @RequestBody WxRobConfigBo bo) { - return toAjax(wxRobConfigService.updateByBo(bo)); - } - - /** - * 鍒犻櫎鏈哄櫒浜� - * - * @param ids 涓婚敭涓� - */ - @Log(title = "鍒犻櫎鏈哄櫒浜�", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long[] ids) { - return toAjax(wxRobConfigService.deleteWithValidByIds(List.of(ids), true)); - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/WxRobKeywordController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/WxRobKeywordController.java deleted file mode 100644 index 755c2dc..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/system/WxRobKeywordController.java +++ /dev/null @@ -1,106 +0,0 @@ -package org.ruoyi.system.controller.system; - -import cn.dev33.satoken.annotation.SaCheckPermission; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.NotEmpty; -import jakarta.validation.constraints.NotNull; -import lombok.RequiredArgsConstructor; -import org.ruoyi.common.core.domain.R; -import org.ruoyi.common.core.validate.AddGroup; -import org.ruoyi.common.core.validate.EditGroup; -import org.ruoyi.common.excel.utils.ExcelUtil; -import org.ruoyi.common.idempotent.annotation.RepeatSubmit; -import org.ruoyi.common.log.annotation.Log; -import org.ruoyi.common.log.enums.BusinessType; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.common.web.core.BaseController; -import org.ruoyi.system.domain.bo.WxRobKeywordBo; -import org.ruoyi.system.domain.vo.WxRobKeywordVo; -import org.ruoyi.system.service.IWxRobKeywordService; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆� - * - * @author Lion Li - * @date 2024-05-01 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/system/robKeyword") -public class WxRobKeywordController extends BaseController { - - private final IWxRobKeywordService wxRobKeywordService; - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - @SaCheckPermission("system:robKeyword:list") - @GetMapping("/list") - public TableDataInfo<WxRobKeywordVo> list(WxRobKeywordBo bo, PageQuery pageQuery) { - return wxRobKeywordService.queryPageList(bo, pageQuery); - } - - /** - * 瀵煎嚭銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - @SaCheckPermission("system:robKeyword:export") - @Log(title = "銆愯濉啓鍔熻兘鍚嶇О銆�", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(WxRobKeywordBo bo, HttpServletResponse response) { - List<WxRobKeywordVo> list = wxRobKeywordService.queryList(bo); - ExcelUtil.exportExcel(list, "銆愯濉啓鍔熻兘鍚嶇О銆�", WxRobKeywordVo.class, response); - } - - /** - * 鑾峰彇銆愯濉啓鍔熻兘鍚嶇О銆戣缁嗕俊鎭� - * - * @param id 涓婚敭 - */ - @SaCheckPermission("system:robKeyword:query") - @GetMapping("/{id}") - public R<WxRobKeywordVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long id) { - return R.ok(wxRobKeywordService.queryById(id)); - } - - /** - * 鏂板銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @SaCheckPermission("system:robKeyword:add") - @Log(title = "銆愯濉啓鍔熻兘鍚嶇О銆�", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public R<Void> add(@Validated(AddGroup.class) @RequestBody WxRobKeywordBo bo) { - return toAjax(wxRobKeywordService.insertByBo(bo)); - } - - /** - * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @SaCheckPermission("system:robKeyword:edit") - @Log(title = "銆愯濉啓鍔熻兘鍚嶇О銆�", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R<Void> edit(@Validated(EditGroup.class) @RequestBody WxRobKeywordBo bo) { - return toAjax(wxRobKeywordService.updateByBo(bo)); - } - - /** - * 鍒犻櫎銆愯濉啓鍔熻兘鍚嶇О銆� - * - * @param ids 涓婚敭涓� - */ - @SaCheckPermission("system:robKeyword:remove") - @Log(title = "銆愯濉啓鍔熻兘鍚嶇О銆�", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") - @PathVariable Long[] ids) { - return toAjax(wxRobKeywordService.deleteWithValidByIds(List.of(ids), true)); - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/wxsingle/WxJsController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/wxsingle/WxJsController.java deleted file mode 100644 index a6ff01f..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/wxsingle/WxJsController.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.ruoyi.system.controller.wxsingle; - - -import me.chanjar.weixin.common.bean.WxJsapiSignature; -import me.chanjar.weixin.common.error.WxErrorException; -import me.chanjar.weixin.cp.api.WxCpService; -import org.ruoyi.system.cofing.WxCpConfiguration; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; - -import java.nio.charset.StandardCharsets; -import java.util.Formatter; -import java.util.HashMap; -import java.util.Map; - -/** - * @author <a href="https://github.com/0katekate0">Wang_Wong</a> - */ -//@RestController -//@RequiredArgsConstructor -//@RequestMapping("/wx/cp/js/{corpId}/{agentId}/getJsConf") -public class WxJsController { - @PostMapping("/getJsConf") - public Map getJsConf( - @PathVariable String corpId, - @PathVariable Integer agentId, - String uri) throws WxErrorException { - - final WxCpService wxCpService = WxCpConfiguration.getCpService(agentId); - if (wxCpService == null) { - throw new IllegalArgumentException(String.format("鏈壘鍒板搴攁gentId=[%d]鐨勯厤缃紝璇锋牳瀹烇紒", agentId)); - } - - WxJsapiSignature wxJsapiSignature = wxCpService.createJsapiSignature(uri); - String signature = wxJsapiSignature.getSignature(); - String nonceStr = wxJsapiSignature.getNonceStr(); - long timestamp = wxJsapiSignature.getTimestamp(); - - Map res = new HashMap<String, String>(); - res.put("appId", corpId); // 蹇呭~锛屼紒涓氬井淇$殑corpID - res.put("timestamp", timestamp); // 蹇呭~锛岀敓鎴愮鍚嶇殑鏃堕棿鎴� - res.put("nonceStr", nonceStr); // 蹇呭~锛岀敓鎴愮鍚嶇殑闅忔満涓� - res.put("signature", signature); // 蹇呭~锛岀鍚嶏紝瑙� 闄勫綍-JS-SDK浣跨敤鏉冮檺绛惧悕绠楁硶 - return res; - } - - - public static String genNonce() { - return bytesToHex(Long.toString(System.nanoTime()).getBytes(StandardCharsets.UTF_8)); - } - - public static String bytesToHex(final byte[] hash) { - Formatter formatter = new Formatter(); - for (byte b : hash) { - formatter.format("%02x", b); - } - String result = formatter.toString(); - formatter.close(); - return result; - } - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/wxsingle/WxPortalController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/wxsingle/WxPortalController.java deleted file mode 100644 index 1ca67d1..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/controller/wxsingle/WxPortalController.java +++ /dev/null @@ -1,85 +0,0 @@ -package org.ruoyi.system.controller.wxsingle; - -import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.cp.api.WxCpService; -import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage; -import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage; -import me.chanjar.weixin.cp.util.crypto.WxCpCryptUtil; -import org.apache.commons.lang3.StringUtils; -import org.ruoyi.common.core.utils.JsonUtils; -import org.ruoyi.system.cofing.WxCpConfiguration; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.web.bind.annotation.*; - -/** - * @author <a href="https://github.com/binarywang">Binary Wang</a> - */ -@RestController -@RequestMapping("/wx/cp") -@Slf4j -public class WxPortalController { - - @Value("${wechat.cp.appConfigs[0].agentId}") - private Integer agentId; - - - @GetMapping(produces = "text/plain;charset=utf-8") - public String authGet( - @RequestParam(name = "msg_signature", required = false) String signature, - @RequestParam(name = "timestamp", required = false) String timestamp, - @RequestParam(name = "nonce", required = false) String nonce, - @RequestParam(name = "echostr", required = false) String echostr) { - log.info("\n鎺ユ敹鍒版潵鑷井淇℃湇鍔″櫒鐨勮璇佹秷鎭細signature = [{}], timestamp = [{}], nonce = [{}], echostr = [{}]", - signature, timestamp, nonce, echostr); - - if (StringUtils.isAnyBlank(signature, timestamp, nonce, echostr)) { - throw new IllegalArgumentException("璇锋眰鍙傛暟闈炴硶锛岃鏍稿疄!"); - } - - final WxCpService wxCpService = WxCpConfiguration.getCpService(agentId); - if (wxCpService == null) { - throw new IllegalArgumentException(String.format("鏈壘鍒板搴攁gentId=[%d]鐨勯厤缃紝璇锋牳瀹烇紒", agentId)); - } - - if (wxCpService.checkSignature(signature, timestamp, nonce, echostr)) { - return new WxCpCryptUtil(wxCpService.getWxCpConfigStorage()).decrypt(echostr); - } - - return "闈炴硶璇锋眰"; - } - - @PostMapping(produces = "application/xml; charset=UTF-8") - public String post( - @RequestBody String requestBody, - @RequestParam("msg_signature") String signature, - @RequestParam("timestamp") String timestamp, - @RequestParam("nonce") String nonce) { - log.info("\n鎺ユ敹寰俊璇锋眰锛歔signature=[{}], timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ", - signature, timestamp, nonce, requestBody); - - final WxCpService wxCpService = WxCpConfiguration.getCpService(1000002); - WxCpXmlMessage inMessage = WxCpXmlMessage.fromEncryptedXml(requestBody, wxCpService.getWxCpConfigStorage(), - timestamp, nonce, signature); - log.debug("\n娑堟伅瑙e瘑鍚庡唴瀹逛负锛歕n{} ", JsonUtils.toJson(inMessage)); - WxCpXmlOutMessage outMessage = this.route(1000002, inMessage); - if (outMessage == null) { - return ""; - } - - String out = outMessage.toEncryptedXml(wxCpService.getWxCpConfigStorage()); - log.debug("\n缁勮鍥炲淇℃伅锛歿}", out); - return out; - } - - private WxCpXmlOutMessage route(Integer agentId, WxCpXmlMessage message) { - try { - return WxCpConfiguration.getRouters().get(agentId).route(message); - } catch (Exception e) { - log.error(e.getMessage(), e); - } - - return null; - } - - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/Cover.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/Cover.java deleted file mode 100644 index 4ce348d..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/Cover.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.ruoyi.system.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.ruoyi.common.mybatis.core.domain.BaseEntity; - -import java.io.Serial; - -/** - * 缈诲敱瀵硅薄 - * - * @author NSL - * @date 2024-12-25 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("chat_cover") -public class Cover extends BaseEntity { - @Serial - private static final long serialVersionUID = 1L; - - @TableId(value = "id") - private Long id; - /** - * 姝屾洸鍚嶇О - */ - private String coverMusicName; - /** - * 姝屾洸鍦板潃 - */ - private String coverMusicUrl; - /** - * 姝屾墜鎬у埆 鏋氫妇 FEMALE 濂虫�� MALE 鐢锋�� - */ - private String coverSingerGender; - /** - * 姝屾墜濮撳悕 - */ - private String coverSingerName; - /** - * 鐢ㄦ埛鎬у埆 FEMALE MALE - */ - private String userGender; - /** - * 鐢ㄦ埛id - */ - private Long userId; - /** - * 鏈娑堣垂閲戦 - */ - private String cost; - /** - * 缈诲敱鍚庣殑URL - */ - private String coverUrl; -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/CoverPromptAudio.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/CoverPromptAudio.java deleted file mode 100644 index b44b938..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/CoverPromptAudio.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.ruoyi.system.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.ruoyi.common.mybatis.core.domain.BaseEntity; - -import java.io.Serial; - -/** - * 缈诲敱鐢ㄦ埛鍙傝�冮煶棰戝璞� - * - * @author NSL - * @since 2024-12-25 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("chat_cover_prompt_audio") -public class CoverPromptAudio extends BaseEntity { - @Serial - private static final long serialVersionUID = 1L; - - @TableId(value = "id") - private Long id; - /** - * 缈诲敱涓昏〃id - */ - private Long coverId; - /** - * 鐢ㄦ埛id - */ - private Long userId; - /** - * 鍙傝�冮煶棰� - */ - private String promptAudioUrl; -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/GenerateLuma.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/GenerateLuma.java deleted file mode 100644 index 3897e86..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/GenerateLuma.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.ruoyi.system.domain; - -import lombok.Data; - -/** - * 鎻忚堪锛氭枃鐢熻棰戣姹傚璞� - * - * @author ageerle@163.com - * date 2024/6/27 - */ -@Data -public class GenerateLuma { - - private String aspect_ratio; - - private boolean expand_prompt; - - private String image_url; - - private String user_prompt; - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/GenerateLyric.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/GenerateLyric.java deleted file mode 100644 index 9a3f67d..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/GenerateLyric.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.ruoyi.system.domain; - -import lombok.Data; - -/** - * 鎻忚堪锛氱敓鎴愭瓕璇� - * - * @author ageerle@163.com - * date 2024/6/27 - */ -@Data -public class GenerateLyric { - - /** - * 姝岃瘝鎻愮ず璇� - */ - private String prompt; - - /** - * 鍥炶皟鍦板潃 - */ - private String notify_hook; -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/GenerateSuno.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/GenerateSuno.java deleted file mode 100644 index 8394010..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/GenerateSuno.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.ruoyi.system.domain; - - -import lombok.Data; - -import java.io.Serializable; - -/** - * @author WangLe - */ -@Data -public class GenerateSuno implements Serializable { - - /** - * 姝岃瘝 (鑷畾涔夋ā寮忎笓鐢�) - */ - private String prompt; - - /** - * mv妯″瀷锛宑hirp-v3-0銆乧hirp-v3-5銆備笉鍐欓粯璁� chirp-v3-0 - */ - private String mv; - - /** - * 鏍囬(鑷畾涔夋ā寮忎笓鐢�) - */ - private String title; - - /** - * 椋庢牸鏍囩(鑷畾涔夋ā寮忎笓鐢�) - */ - private String tags; - - /** - * 鏄惁鐢熸垚绾煶涔愶紝true 涓虹敓鎴愮函闊充箰 - */ - private boolean make_instrumental; - - /** - * 浠诲姟id锛岀敤浜庡涔嬪墠鐨勪换鍔″啀鎿嶄綔 - */ - private String task_id; - - /** - * float锛屾瓕鏇插欢闀挎椂闂达紝鍗曚綅绉� - */ - private int continue_at; - - /** - * 姝屾洸id锛岄渶瑕佺画鍐欏摢棣栨瓕 - */ - private String continue_clip_id; - - /** - * 鐏垫劅妯″紡鎻愮ず璇�(鐏垫劅妯″紡涓撶敤) - */ - private String gpt_description_prompt; - - /** - * 鍥炶皟鍦板潃 - */ - private String notify_hook; - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/PaymentOrder.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/PaymentOrder.java deleted file mode 100644 index 6f50b36..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/PaymentOrder.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.ruoyi.system.domain; - -import com.baomidou.mybatisplus.annotation.*; -import org.ruoyi.common.mybatis.core.domain.BaseEntity; -import lombok.Data; -import lombok.EqualsAndHashCode; -import java.math.BigDecimal; - -import java.io.Serial; - -/** - * 鏀粯璁㈠崟瀵硅薄 payment_orders - * - * @author Lion Li - * @date 2024-04-16 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("chat_pay_order") -public class PaymentOrder extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 涓婚敭 - */ - @TableId(value = "id") - private Long id; - - /** - * 璁㈠崟缂栧彿 - */ - private String orderNo; - - /** - * 璁㈠崟鍚嶇О - */ - private String orderName; - - /** - * 閲戦 - */ - private BigDecimal amount; - - /** - * 鏀粯鐘舵�� - */ - private String paymentStatus; - - /** - * 鏀粯鏂瑰紡 - */ - private String paymentMethod; - - /** - * 鐢ㄦ埛ID - */ - private Long userId; - - /** - * 澶囨敞 - */ - private String remark; - - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysModel.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysModel.java deleted file mode 100644 index 789bca2..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysModel.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.ruoyi.system.domain; - -import com.alibaba.excel.annotation.ExcelProperty; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.ruoyi.common.mybatis.core.domain.BaseEntity; - -import java.io.Serial; - -/** - * 绯荤粺妯″瀷瀵硅薄 sys_model - * - * @author Lion Li - * @date 2024-04-04 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("chat_model") -public class SysModel extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 涓婚敭 - */ - @TableId(value = "id") - private Long id; - - /** - * 妯″瀷鍒嗙被 - */ - @ExcelProperty(value = "妯″瀷鍒嗙被") - private String category; - - /** - * 妯″瀷鍚嶇О - */ - private String modelName; - - /** - * 妯″瀷鎻忚堪 - */ - private String modelDescribe; - - /** - * 妯″瀷浠锋牸 - */ - private double modelPrice; - - /** - * 璁¤垂绫诲瀷 - */ - private String modelType; - - /** - * 鏄惁鏄剧ず - */ - private String modelShow; - - - /** - * 绯荤粺鎻愮ず璇� - */ - private String systemPrompt; - - /** - * 璇锋眰鍦板潃 - */ - private String apiHost; - - /** - * 瀵嗛挜 - */ - private String apiKey; - - /** - * 澶囨敞 - */ - private String remark; - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysPackagePlan.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysPackagePlan.java deleted file mode 100644 index 5bfbe80..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysPackagePlan.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.ruoyi.system.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.ruoyi.common.mybatis.core.domain.BaseEntity; - -import java.io.Serial; -import java.math.BigDecimal; - -/** - * 濂楅绠$悊瀵硅薄 sys_package_plan - * - * @author Lion Li - * @date 2024-05-05 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("chat_package_plan") -public class SysPackagePlan extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 涓婚敭 - */ - @TableId(value = "id") - private Long id; - - /** - * 濂楅鍚嶇О - */ - private String name; - - /** - * 濂楅浠锋牸 - */ - private BigDecimal price; - - /** - * 鏈夋晥鏃堕棿 - */ - private Long duration; - - /** - * 璁″垝璇︽儏 - */ - private String planDetail; - - /** - * 澶囨敞 - */ - private String remark; - - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysUser.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysUser.java deleted file mode 100644 index 96e80db..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysUser.java +++ /dev/null @@ -1,134 +0,0 @@ -package org.ruoyi.system.domain; - -import com.baomidou.mybatisplus.annotation.*; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; -import org.ruoyi.common.core.constant.UserConstants; -import org.ruoyi.common.tenant.core.TenantEntity; - -import java.util.Date; - -/** - * 鐢ㄦ埛瀵硅薄 sys_user - * - * @author Lion Li - */ - -@Data -@NoArgsConstructor -@EqualsAndHashCode(callSuper = true) -@TableName("sys_user") -public class SysUser extends TenantEntity { - - /** - * 鐢ㄦ埛ID - */ - @TableId(value = "user_id") - private Long userId; - - /** - * 閮ㄩ棬ID - */ - private Long deptId; - - /** - * 鐢ㄦ埛璐﹀彿 - */ - private String userName; - - - /** - * 鐢ㄦ埛濂楅 - */ - private String userPlan; - - /** - * 鐢ㄦ埛鏄电О - */ - private String nickName; - - /** - * 鐢ㄦ埛绫诲瀷锛坰ys_user绯荤粺鐢ㄦ埛锛� - */ - private String userType; - - /** - * 鐢ㄦ埛閭 - */ - private String email; - - /** - * 鎵嬫満鍙风爜 - */ - private String phonenumber; - - /** - * 鐢ㄦ埛鎬у埆 - */ - private String sex; - - /** - * 鐢ㄦ埛澶村儚 - */ - private String avatar; - - /** - * 瀵嗙爜 - */ - @TableField( - insertStrategy = FieldStrategy.NOT_EMPTY, - updateStrategy = FieldStrategy.NOT_EMPTY, - whereStrategy = FieldStrategy.NOT_EMPTY - ) - private String password; - - /** - * 甯愬彿鐘舵�侊紙0姝e父 1鍋滅敤锛� - */ - private String status; - - /** - * 鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛� - */ - @TableLogic - private String delFlag; - - /** - * 鏈�鍚庣櫥褰旾P - */ - private String loginIp; - - /** - * 娉ㄥ唽鍩熷悕 - */ - private String domainName; - - /** - * 鏈�鍚庣櫥褰曟椂闂� - */ - private Date loginDate; - - /** - * 澶囨敞 - */ - private String remark; - - /** 鏅�氱敤鎴风殑鏍囪瘑,瀵瑰綋鍓嶅紑鍙戣�呭笎鍙峰敮涓�銆備竴涓猳penid瀵瑰簲涓�涓叕浼楀彿鎴栧皬绋嬪簭 */ - private String openId; - - /** 鐢ㄦ埛浣欓 */ - private Double userBalance; - - /** 鐢ㄦ埛绛夌骇 */ - private String userGrade; - - public SysUser(Long userId) { - this.userId = userId; - } - - public boolean isSuperAdmin() { - return UserConstants.SUPER_ADMIN_ID.equals(this.userId); - } - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysUserGroup.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysUserGroup.java deleted file mode 100644 index b75abf8..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysUserGroup.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.ruoyi.system.domain; - -import com.baomidou.mybatisplus.annotation.*; -import org.ruoyi.common.tenant.core.TenantEntity; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.io.Serial; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆戝璞� sys_user_group - * - * @author Lion Li - * @date 2024-08-03 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("sys_user_group") -public class SysUserGroup extends TenantEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 涓婚敭 - */ - @TableId(value = "id") - private Long id; - - /** - * 鐢ㄦ埛缁勫悕绉� - */ - private String groupName; - - /** - * 澶囨敞 - */ - private String remark; - - /** - * 鐗堟湰 - */ - @Version - private Long version; - - /** - * 鍒犻櫎鏍囧織锛�0浠h〃瀛樺湪 1浠h〃鍒犻櫎锛� - */ - @TableLogic - private String delFlag; - - /** - * 鏇存柊IP - */ - private String updateIp; - - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysUserModel.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysUserModel.java deleted file mode 100644 index 751a1e6..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/SysUserModel.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.ruoyi.system.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.ruoyi.common.mybatis.core.domain.BaseEntity; - -import java.io.Serial; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆戝璞� sys_user_model - * - * @author Lion Li - * @date 2024-08-03 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("sys_user_model") -public class SysUserModel extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * id - */ - @TableId(value = "id") - private Long id; - - /** - * 妯″瀷id - */ - private Long mid; - - /** - * 鐢ㄦ埛缁刬d - */ - private Long gid; - - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/WxRobConfig.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/WxRobConfig.java deleted file mode 100644 index 490a3e5..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/WxRobConfig.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.ruoyi.system.domain; - -import com.baomidou.mybatisplus.annotation.*; -import org.ruoyi.common.mybatis.core.domain.BaseEntity; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.io.Serial; - -/** - * 寰俊鏈哄櫒浜哄璞� wx_rob_config - * - * @author Lion Li - * @date 2024-05-01 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("chat_rob_config") -public class WxRobConfig extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 涓婚敭 - */ - @TableId(value = "id") - private Long id; - - /** - * 鐢ㄦ埛id - */ - private Long userId; - - /** - * 鏈哄櫒浜哄悕绉� - */ - private String botName; - - /** - * 鏈哄櫒鍞竴鐮� - */ - private String uniqueKey; - - /** - * 澶囨敞锛堝井淇″彿锛� - */ - private String remark; - - /** - * 榛樿濂藉弸鍥炲寮�鍏� - */ - private String defaultFriend; - - /** - * 榛樿缇ゅ洖澶嶅紑鍏� - */ - private String defaultGroup; - - - /** - * 鏈哄櫒鍚敤1绂佺敤0 - */ - private String enable; - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/WxRobKeyword.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/WxRobKeyword.java deleted file mode 100644 index 5a4dbe6..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/WxRobKeyword.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.ruoyi.system.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.ruoyi.common.mybatis.core.domain.BaseEntity; - -import java.io.Serial; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆戝璞� wx_rob_keyword - * - * @author Lion Li - * @date 2024-05-01 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("wx_rob_keyword") -public class WxRobKeyword extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * - */ - @TableId(value = "id") - private Long id; - - /** - * 鏈哄櫒鍞竴鐮� - */ - private String uniqueKey; - - /** - * 鍏抽敭璇� - */ - private String keyData; - - /** - * 鍥炲鍐呭 - */ - private String valueData; - - /** - * 鍥炲绫诲瀷 - */ - private String typeData; - - /** - * 鐩爣鏄电О - */ - private String nickName; - - /** - * 缇�1濂藉弸0 - */ - private Integer toGroup; - - /** - * 鍚敤1绂佺敤0 - */ - private Integer enable; - - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/WxRobRelation.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/WxRobRelation.java deleted file mode 100644 index e67c40c..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/WxRobRelation.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.ruoyi.system.domain; - -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.ruoyi.common.mybatis.core.domain.BaseEntity; - -import java.io.Serial; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆戝璞� wx_rob_relation - * - * @author Lion Li - * @date 2024-05-01 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("wx_rob_relation") -public class WxRobRelation extends BaseEntity { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * - */ - @TableId(value = "id") - private Long id; - - /** - * 澶栨帴鍞竴鐮� - */ - private String outKey; - - /** - * 鏈哄櫒鍞竴鐮� - */ - private String uniqueKey; - - /** - * 鐩爣鏄电О - */ - private String nickName; - - /** - * 缇�1濂藉弸0 - */ - private Integer toGroup; - - /** - * 鍚敤1绂佺敤0 - */ - private Integer enable; - - /** - * IP鐧藉悕鍗� - */ - private String whiteList; - - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/PaymentOrdersBo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/PaymentOrdersBo.java deleted file mode 100644 index e49de79..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/PaymentOrdersBo.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.ruoyi.system.domain.bo; - -import io.github.linpeilie.annotations.AutoMapper; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.ruoyi.common.core.validate.AddGroup; -import org.ruoyi.common.core.validate.EditGroup; -import org.ruoyi.common.mybatis.core.domain.BaseEntity; -import org.ruoyi.system.domain.PaymentOrder; - -import java.math.BigDecimal; - -/** - * 鏀粯璁㈠崟涓氬姟瀵硅薄 payment_orders - * - * @author Lion Li - * @date 2024-04-16 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = PaymentOrder.class, reverseConvertGenerate = false) -public class PaymentOrdersBo extends BaseEntity { - - /** - * 涓婚敭 - */ - @NotNull(message = "涓婚敭涓嶈兘涓虹┖", groups = { EditGroup.class }) - private Long id; - - /** - * 璁㈠崟缂栧彿 - */ - @NotBlank(message = "璁㈠崟缂栧彿涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private String orderNo; - - /** - * 璁㈠崟鍚嶇О - */ - @NotBlank(message = "璁㈠崟鍚嶇О涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private String orderName; - - /** - * 閲戦 - */ - @NotNull(message = "閲戦涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private BigDecimal amount; - - /** - * 鏀粯鐘舵�� - */ - @NotBlank(message = "鏀粯鐘舵�佷笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) - private String paymentStatus; - - /** - * 鏀粯鏂瑰紡 - */ - @NotBlank(message = "鏀粯鏂瑰紡涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private String paymentMethod; - - /** - * 鐢ㄦ埛ID - */ - @NotNull(message = "鐢ㄦ埛ID涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private Long userId; - - /** - * 澶囨敞 - */ - @NotBlank(message = "澶囨敞涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private String remark; - - - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysModelBo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysModelBo.java deleted file mode 100644 index 6b0a160..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysModelBo.java +++ /dev/null @@ -1,89 +0,0 @@ -package org.ruoyi.system.domain.bo; - -import com.alibaba.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.ruoyi.common.core.validate.AddGroup; -import org.ruoyi.common.core.validate.EditGroup; -import org.ruoyi.common.mybatis.core.domain.BaseEntity; -import org.ruoyi.system.domain.SysModel; - -/** - * 绯荤粺妯″瀷涓氬姟瀵硅薄 sys_model - * - * @author Lion Li - * @date 2024-04-04 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = SysModel.class, reverseConvertGenerate = false) -public class SysModelBo extends BaseEntity { - - /** - * 涓婚敭 - */ - @NotNull(message = "涓婚敭涓嶈兘涓虹┖", groups = { EditGroup.class }) - private Long id; - - /** - * 妯″瀷鍒嗙被 - */ - @ExcelProperty(value = "妯″瀷鍒嗙被") - private String category; - - /** - * 妯″瀷鍚嶇О - */ - @NotBlank(message = "妯″瀷鍚嶇О涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private String modelName; - - - /** - * 妯″瀷鎻忚堪 - */ - @NotBlank(message = "妯″瀷鎻忚堪涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private String modelDescribe; - - /** - * 妯″瀷浠锋牸 - */ - @NotNull(message = "妯″瀷浠锋牸涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private double modelPrice; - - /** - * 璁¤垂绫诲瀷 (1 token鎵h垂; 2 娆℃暟鎵h垂 ) - */ - @NotBlank(message = "璁¤垂绫诲瀷涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private String modelType; - - /** - * 妯″瀷鐘舵�� (0 鏄剧ず; 1 闅愯棌 ) - */ - private String modelShow; - - - /** - * 绯荤粺鎻愮ず璇� - */ - private String systemPrompt; - - /** - * 璇锋眰鍦板潃 - */ - private String apiHost; - - /** - * 璇锋眰瀵嗛挜 - */ - private String apiKey; - /** - * 澶囨敞 - */ - @NotBlank(message = "澶囨敞涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private String remark; - - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysPackagePlanBo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysPackagePlanBo.java deleted file mode 100644 index 44f182b..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysPackagePlanBo.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.ruoyi.system.domain.bo; - -import org.ruoyi.common.core.validate.AddGroup; -import org.ruoyi.common.core.validate.EditGroup; -import org.ruoyi.system.domain.SysPackagePlan; -import org.ruoyi.common.mybatis.core.domain.BaseEntity; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; -import java.math.BigDecimal; - -/** - * 濂楅绠$悊涓氬姟瀵硅薄 sys_package_plan - * - * @author Lion Li - * @date 2024-05-05 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = SysPackagePlan.class, reverseConvertGenerate = false) -public class SysPackagePlanBo extends BaseEntity { - - /** - * 涓婚敭 - */ - @NotNull(message = "涓婚敭涓嶈兘涓虹┖", groups = { EditGroup.class }) - private Long id; - - /** - * 濂楅鍚嶇О - */ - @NotBlank(message = "濂楅鍚嶇О涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private String name; - - /** - * 濂楅浠锋牸 - */ - @NotNull(message = "濂楅浠锋牸涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private BigDecimal price; - - /** - * 鏈夋晥鏃堕棿 - */ - @NotNull(message = "鏈夋晥鏃堕棿涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private Long duration; - - /** - * 璁″垝璇︽儏 - */ - @NotBlank(message = "璁″垝璇︽儏涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private String planDetail; - - /** - * 澶囨敞 - */ - @NotBlank(message = "澶囨敞涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private String remark; - - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysUserGroupBo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysUserGroupBo.java deleted file mode 100644 index 4d77355..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysUserGroupBo.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.ruoyi.system.domain.bo; - -import org.ruoyi.common.core.validate.AddGroup; -import org.ruoyi.common.core.validate.EditGroup; -import org.ruoyi.system.domain.SysUserGroup; -import org.ruoyi.common.mybatis.core.domain.BaseEntity; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆戜笟鍔″璞� sys_user_group - * - * @author Lion Li - * @date 2024-08-03 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = SysUserGroup.class, reverseConvertGenerate = false) -public class SysUserGroupBo extends BaseEntity { - - /** - * 涓婚敭 - */ - @NotNull(message = "涓婚敭涓嶈兘涓虹┖", groups = { EditGroup.class }) - private Long id; - - /** - * 鐢ㄦ埛缁勫悕绉� - */ - @NotBlank(message = "鐢ㄦ埛缁勫悕绉颁笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) - private String groupName; - - /** - * 澶囨敞 - */ - @NotBlank(message = "澶囨敞涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private String remark; - - /** - * 鏇存柊IP - */ - @NotBlank(message = "鏇存柊IP涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private String updateIp; - - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysUserModelBo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysUserModelBo.java deleted file mode 100644 index 5c77edb..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/SysUserModelBo.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.ruoyi.system.domain.bo; - -import io.github.linpeilie.annotations.AutoMapper; -import jakarta.validation.constraints.NotNull; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.ruoyi.common.core.validate.AddGroup; -import org.ruoyi.common.core.validate.EditGroup; -import org.ruoyi.common.mybatis.core.domain.BaseEntity; -import org.ruoyi.system.domain.SysUserModel; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆戜笟鍔″璞� sys_user_model - * - * @author Lion Li - * @date 2024-08-03 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = SysUserModel.class, reverseConvertGenerate = false) -public class SysUserModelBo extends BaseEntity { - - /** - * id - */ - @NotNull(message = "id涓嶈兘涓虹┖", groups = { EditGroup.class }) - private Long id; - - /** - * 妯″瀷id - */ - @NotNull(message = "妯″瀷id涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private Long mid; - - /** - * 鐢ㄦ埛缁刬d - */ - @NotNull(message = "鐢ㄦ埛缁刬d涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private Long gid; - - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/WxRobConfigBo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/WxRobConfigBo.java deleted file mode 100644 index ea8018a..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/WxRobConfigBo.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.ruoyi.system.domain.bo; - -import io.github.linpeilie.annotations.AutoMapper; -import jakarta.validation.constraints.NotNull; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.ruoyi.common.core.validate.EditGroup; -import org.ruoyi.common.mybatis.core.domain.BaseEntity; -import org.ruoyi.system.domain.WxRobConfig; - -/** - * 寰俊鏈哄櫒浜轰笟鍔″璞� wx_rob_config - * - * @author Lion Li - * @date 2024-05-01 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = WxRobConfig.class, reverseConvertGenerate = false) -public class WxRobConfigBo extends BaseEntity { - - /** - * 涓婚敭 - */ - @NotNull(message = "涓婚敭涓嶈兘涓虹┖", groups = { EditGroup.class }) - private Long id; - - /** - * 鐢ㄦ埛id - */ - private Long userId; - - /** - * 鏈哄櫒浜哄悕绉� - */ - private String botName; - - /** - * 鏈哄櫒鍞竴鐮� - */ - private String uniqueKey; - - /** - * 榛樿濂藉弸鍥炲寮�鍏� - */ - private String defaultFriend; - - /** - * 榛樿缇ゅ洖澶嶅紑鍏� - */ - private String defaultGroup; - - /** - * 鏈哄櫒鍚敤1绂佺敤0 - */ - private String enable; - - /** - * 澶囨敞 - */ - private String remark; - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/WxRobKeywordBo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/WxRobKeywordBo.java deleted file mode 100644 index 262bb8d..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/WxRobKeywordBo.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.ruoyi.system.domain.bo; - -import io.github.linpeilie.annotations.AutoMapper; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.ruoyi.common.core.validate.AddGroup; -import org.ruoyi.common.core.validate.EditGroup; -import org.ruoyi.common.mybatis.core.domain.BaseEntity; -import org.ruoyi.system.domain.WxRobKeyword; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆戜笟鍔″璞� wx_rob_keyword - * - * @author Lion Li - * @date 2024-05-01 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = WxRobKeyword.class, reverseConvertGenerate = false) -public class WxRobKeywordBo extends BaseEntity { - - /** - * - */ - @NotNull(message = "涓嶈兘涓虹┖", groups = { EditGroup.class }) - private Long id; - - /** - * 鏈哄櫒鍞竴鐮� - */ - @NotBlank(message = "鏈哄櫒鍞竴鐮佷笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) - private String uniqueKey; - - /** - * 鍏抽敭璇� - */ - @NotBlank(message = "鍏抽敭璇嶄笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) - private String keyData; - - /** - * 鍥炲鍐呭 - */ - @NotBlank(message = "鍥炲鍐呭涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private String valueData; - - /** - * 鍥炲绫诲瀷 - */ - @NotBlank(message = "鍥炲绫诲瀷涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private String typeData; - - /** - * 鐩爣鏄电О - */ - @NotBlank(message = "鐩爣鏄电О涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private String nickName; - - /** - * 缇�1濂藉弸0 - */ - @NotNull(message = "缇�1濂藉弸0涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private Integer toGroup; - - /** - * 鍚敤1绂佺敤0 - */ - @NotNull(message = "鍚敤1绂佺敤0涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private Integer enable; - - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/WxRobRelationBo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/WxRobRelationBo.java deleted file mode 100644 index 56e9569..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/bo/WxRobRelationBo.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.ruoyi.system.domain.bo; - -import io.github.linpeilie.annotations.AutoMapper; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import lombok.Data; -import lombok.EqualsAndHashCode; -import org.ruoyi.common.core.validate.AddGroup; -import org.ruoyi.common.core.validate.EditGroup; -import org.ruoyi.common.mybatis.core.domain.BaseEntity; -import org.ruoyi.system.domain.WxRobRelation; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆戜笟鍔″璞� wx_rob_relation - * - * @author Lion Li - * @date 2024-05-01 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@AutoMapper(target = WxRobRelation.class, reverseConvertGenerate = false) -public class WxRobRelationBo extends BaseEntity { - - /** - * - */ - @NotNull(message = "涓嶈兘涓虹┖", groups = { EditGroup.class }) - private Long id; - - /** - * 澶栨帴鍞竴鐮� - */ - @NotBlank(message = "澶栨帴鍞竴鐮佷笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) - private String outKey; - - /** - * 鏈哄櫒鍞竴鐮� - */ - @NotBlank(message = "鏈哄櫒鍞竴鐮佷笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) - private String uniqueKey; - - /** - * 鐩爣鏄电О - */ - @NotBlank(message = "鐩爣鏄电О涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private String nickName; - - /** - * 缇�1濂藉弸0 - */ - @NotNull(message = "缇�1濂藉弸0涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private Integer toGroup; - - /** - * 鍚敤1绂佺敤0 - */ - @NotNull(message = "鍚敤1绂佺敤0涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private Integer enable; - - /** - * IP鐧藉悕鍗� - */ - @NotBlank(message = "IP鐧藉悕鍗曚笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) - private String whiteList; - - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/model/ApiResult.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/model/ApiResult.java deleted file mode 100644 index 1dc6bf6..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/model/ApiResult.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.ruoyi.system.domain.model; - -import lombok.Getter; -import lombok.Setter; -import lombok.extern.slf4j.Slf4j; - -/** - * @author https://www.wdbyte.com - */ -@Slf4j -@Getter -@Setter -public class ApiResult { - private Integer code; - private String message; - private Object data; - - public ApiResult() { - } - - public ApiResult(Integer code, String message) { - this.code = code; - this.message = message; - } - - public ApiResult(Integer code, String message, Object data) { - this.code = code; - this.message = message; - this.data = data; - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/model/ReceiveMessage.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/model/ReceiveMessage.java deleted file mode 100644 index 3cd2b89..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/model/ReceiveMessage.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.ruoyi.system.domain.model; - -import lombok.Data; - -@Data -public class ReceiveMessage { - /** - * 寮�鍙戣�呭井淇″彿 - */ - private String toUserName; - /** - * 鍙戦�佹柟璐﹀彿(涓�涓猳penid锛� - */ - private String fromUserName; - /** - * 娑堟伅鍒涘缓鏃堕棿锛堟暣褰級 - */ - private String createTime; - /** - * 娑堟伅绫诲瀷 - */ - private String msgType; - /** - * 鏂囨湰娑堟伅鍐呭 - */ - private String content; - /** - * 娑堟伅ID 64浣� - */ - String msgId; - /** - * 娑堟伅鐨勬暟鎹甀D 娑堟伅鏉ヨ嚜鏂囩珷鎵嶆湁 - */ - private String msgDataId; - /** - * 澶氬浘鏂囨椂绗嚑绡囨枃绔狅紝浠�1寮�濮� 娑堟伅濡傛灉鏉ヨ嚜鏂囩珷鎵嶆湁 - */ - private String idx; - /** - * 璁㈤槄浜嬩欢 subscribe 璁㈤槄 unsbscribe 鍙栨秷璁㈤槄 - */ - private String event; - /** - * 鎵爜 - ticket - */ - private String ticket; - - public String getReplyTextMsg(String msg) { - String xml = "<xml>\n" - + " <ToUserName><![CDATA[" + getFromUserName() + "]]></ToUserName>\n" - + " <FromUserName><![CDATA[" + getToUserName() + "]]></FromUserName>\n" - + " <CreateTime>" + System.currentTimeMillis() + "</CreateTime>\n" - + " <MsgType><![CDATA[text]]></MsgType>\n" - + " <Content><![CDATA[" + msg + "]]></Content>\n" - + " </xml>"; - return xml; - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/model/WeixinQrCode.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/model/WeixinQrCode.java deleted file mode 100644 index 2ce6162..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/model/WeixinQrCode.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.ruoyi.system.domain.model; - -import lombok.Data; - -/** - * @author https://www.wdbyte.com - */ -@Data -public class WeixinQrCode { - - private String ticket; - private Long expireSeconds; - private String url; - private String qrCodeUrl; -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/request/translation/TranslationRequest.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/request/translation/TranslationRequest.java deleted file mode 100644 index 04fa785..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/request/translation/TranslationRequest.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.ruoyi.system.domain.request.translation; - -import lombok.Data; - -/** - * 鎻忚堪锛氱炕璇戣姹傚璞� - * - * @author ageerle@163.com - * date 2025/1/13 - */ - -@Data -public class TranslationRequest { - /** - * 鎻愮ず璇� - */ - private String prompt; - - /** - * 妯″瀷鍚嶇О - */ - private String model; - - /** - * 鐩爣璇█ - */ - private String targetLanguage; - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/PaymentOrdersVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/PaymentOrdersVo.java deleted file mode 100644 index ae4a4be..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/PaymentOrdersVo.java +++ /dev/null @@ -1,93 +0,0 @@ -package org.ruoyi.system.domain.vo; - -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import org.ruoyi.system.domain.PaymentOrder; - -import java.io.Serial; -import java.io.Serializable; -import java.math.BigDecimal; -import java.util.Date; - - -/** - * 鏀粯璁㈠崟瑙嗗浘瀵硅薄 payment_orders - * - * @author Lion Li - * @date 2024-04-16 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = PaymentOrder.class) -public class PaymentOrdersVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 涓婚敭 - */ - @ExcelProperty(value = "涓婚敭") - private Long id; - - /** - * 璁㈠崟缂栧彿 - */ - @ExcelProperty(value = "璁㈠崟缂栧彿") - private String orderNo; - - /** - * 璁㈠崟鍚嶇О - */ - @ExcelProperty(value = "璁㈠崟鍚嶇О") - private String orderName; - - /** - * 閲戦 - */ - @ExcelProperty(value = "閲戦") - private BigDecimal amount; - - /** - * 鏀粯鐘舵�� - */ - @ExcelProperty(value = "鏀粯鐘舵��") - private String paymentStatus; - - /** - * 鏀粯鏂瑰紡 - */ - @ExcelProperty(value = "鏀粯鏂瑰紡") - private String paymentMethod; - - /** - * 鐢ㄦ埛ID - */ - @ExcelProperty(value = "鐢ㄦ埛ID") - private Long userId; - - /** - * 鐢ㄦ埛ID - */ - @ExcelProperty(value = "鐢ㄦ埛鍚嶇О") - private String userName; - - /** - * 澶囨敞 - */ - @ExcelProperty(value = "澶囨敞") - private String remark; - - /** - * 浜岀淮鐮佺綉缁滃湴鍧� - */ - private String url; - - /** - * 鍒涘缓鏃堕棿 - */ - private Date createTime; - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysModelVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysModelVo.java deleted file mode 100644 index 630fce0..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysModelVo.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.ruoyi.system.domain.vo; - -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import org.ruoyi.common.sensitive.annotation.Sensitive; -import org.ruoyi.common.sensitive.core.SensitiveStrategy; -import org.ruoyi.system.domain.SysModel; - -import java.io.Serial; -import java.io.Serializable; - - -/** - * 绯荤粺妯″瀷瑙嗗浘瀵硅薄 sys_model - * - * @author Lion Li - * @date 2024-04-04 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = SysModel.class) -public class SysModelVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 涓婚敭 - */ - @ExcelProperty(value = "涓婚敭") - private Long id; - - /** - * 妯″瀷鍒嗙被 - */ - @ExcelProperty(value = "妯″瀷鍒嗙被") - private String category; - - /** - * 妯″瀷鍚嶇О - */ - @ExcelProperty(value = "妯″瀷鍚嶇О") - private String modelName; - - - /** - * 妯″瀷鎻忚堪 - */ - @ExcelProperty(value = "妯″瀷鎻忚堪") - private String modelDescribe; - - /** - * 妯″瀷浠锋牸 - */ - @ExcelProperty(value = "妯″瀷浠锋牸") - private double modelPrice; - - /** - * 璁¤垂绫诲瀷 - */ - @ExcelProperty(value = "璁¤垂绫诲瀷") - private String modelType; - - /** - * 鏄惁鏄剧ず - */ - private String modelShow; - - - /** - * 绯荤粺鎻愮ず璇� - */ - private String systemPrompt; - - /** - * 璇锋眰鍦板潃 - */ - private String apiHost; - - /** - * 妯″瀷鍚嶇О - */ - @Sensitive(strategy = SensitiveStrategy.ID_CARD) - private String apiKey; - - /** - * 澶囨敞 - */ - @ExcelProperty(value = "澶囨敞") - private String remark; - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysNoticeVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysNoticeVo.java deleted file mode 100644 index d9c8229..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysNoticeVo.java +++ /dev/null @@ -1,73 +0,0 @@ -package org.ruoyi.system.domain.vo; - -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import org.ruoyi.common.translation.annotation.Translation; -import org.ruoyi.common.translation.constant.TransConstant; -import org.ruoyi.system.domain.SysNotice; - -import java.io.Serial; -import java.io.Serializable; -import java.util.Date; - - - -/** - * 閫氱煡鍏憡瑙嗗浘瀵硅薄 sys_notice - * - * @author Michelle.Chung - */ -@Data -@AutoMapper(target = SysNotice.class) -public class SysNoticeVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 鍏憡ID - */ - private Long noticeId; - - /** - * 鍏憡鏍囬 - */ - private String noticeTitle; - - /** - * 鍏憡绫诲瀷锛�1閫氱煡 2鍏憡锛� - */ - private String noticeType; - - /** - * 鍏憡鍐呭 - */ - private String noticeContent; - - /** - * 鍏憡鐘舵�侊紙0姝e父 1鍏抽棴锛� - */ - private String status; - - /** - * 澶囨敞 - */ - private String remark; - - /** - * 鍒涘缓鑰� - */ - private Long createBy; - - /** - * 鍒涘缓浜哄悕绉� - */ - @Translation(type = TransConstant.USER_ID_TO_NAME, mapper = "createBy") - private String createByName; - - /** - * 鍒涘缓鏃堕棿 - */ - private Date createTime; - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysPackagePlanVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysPackagePlanVo.java deleted file mode 100644 index 5ae53f6..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysPackagePlanVo.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.ruoyi.system.domain.vo; - -import java.math.BigDecimal; -import org.ruoyi.system.domain.SysPackagePlan; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - - -/** - * 濂楅绠$悊瑙嗗浘瀵硅薄 sys_package_plan - * - * @author Lion Li - * @date 2024-05-05 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = SysPackagePlan.class) -public class SysPackagePlanVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 涓婚敭 - */ - @ExcelProperty(value = "涓婚敭") - private Long id; - - /** - * 濂楅鍚嶇О - */ - @ExcelProperty(value = "濂楅鍚嶇О") - private String name; - - /** - * 濂楅浠锋牸 - */ - @ExcelProperty(value = "濂楅浠锋牸") - private BigDecimal price; - - /** - * 鏈夋晥鏃堕棿 - */ - @ExcelProperty(value = "鏈夋晥鏃堕棿") - private Long duration; - - /** - * 璁″垝璇︽儏 - */ - @ExcelProperty(value = "璁″垝璇︽儏") - private String planDetail; - - /** - * 澶囨敞 - */ - @ExcelProperty(value = "澶囨敞") - private String remark; - - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysUserGroupVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysUserGroupVo.java deleted file mode 100644 index 5dd8dd2..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysUserGroupVo.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.ruoyi.system.domain.vo; - -import org.ruoyi.system.domain.SysUserGroup; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆戣鍥惧璞� sys_user_group - * - * @author Lion Li - * @date 2024-08-03 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = SysUserGroup.class) -public class SysUserGroupVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 涓婚敭 - */ - @ExcelProperty(value = "涓婚敭") - private Long id; - - /** - * 鐢ㄦ埛缁勫悕绉� - */ - @ExcelProperty(value = "鐢ㄦ埛缁勫悕绉�") - private String groupName; - - /** - * 澶囨敞 - */ - @ExcelProperty(value = "澶囨敞") - private String remark; - - /** - * 鏇存柊IP - */ - @ExcelProperty(value = "鏇存柊IP") - private String updateIp; - - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysUserModelVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysUserModelVo.java deleted file mode 100644 index 1e95de2..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/SysUserModelVo.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.ruoyi.system.domain.vo; - -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import org.ruoyi.system.domain.SysUserModel; - -import java.io.Serial; -import java.io.Serializable; - - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆戣鍥惧璞� sys_user_model - * - * @author Lion Li - * @date 2024-08-03 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = SysUserModel.class) -public class SysUserModelVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * id - */ - @ExcelProperty(value = "id") - private Long id; - - /** - * 妯″瀷id - */ - @ExcelProperty(value = "妯″瀷id") - private Long mid; - - /** - * 鐢ㄦ埛缁刬d - */ - @ExcelProperty(value = "鐢ㄦ埛缁刬d") - private Long gid; - - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/WxRobConfigVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/WxRobConfigVo.java deleted file mode 100644 index a3102f4..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/WxRobConfigVo.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.ruoyi.system.domain.vo; - -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import org.ruoyi.common.excel.annotation.ExcelDictFormat; -import org.ruoyi.common.excel.convert.ExcelDictConvert; -import org.ruoyi.system.domain.WxRobConfig; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; - -import java.io.Serial; -import java.io.Serializable; - - - -/** - * 寰俊鏈哄櫒浜鸿鍥惧璞� wx_rob_config - * - * @author Lion Li - * @date 2024-05-01 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = WxRobConfig.class) -public class WxRobConfigVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * 涓婚敭 - */ - @ExcelProperty(value = "涓婚敭") - private Long id; - - /** - * 鐢ㄦ埛id - */ - private Long userId; - - /** - * 鐢ㄦ埛鍚嶇О - */ - private String userName; - - /** - * 鏈哄櫒浜哄悕绉� - */ - private String botName; - - /** - * 鏈哄櫒鍞竴鐮� - */ - @ExcelProperty(value = "鏈哄櫒鍞竴鐮�") - private String uniqueKey; - - /** - * 澶囨敞 - */ - @ExcelProperty(value = "澶囨敞", converter = ExcelDictConvert.class) - @ExcelDictFormat(readConverterExp = "澶囨敞") - private String remark; - - /** - * 榛樿濂藉弸鍥炲寮�鍏� - */ - @ExcelProperty(value = "榛樿濂藉弸鍥炲寮�鍏�") - private String defaultFriend; - - /** - * 榛樿缇ゅ洖澶嶅紑鍏� - */ - @ExcelProperty(value = "榛樿缇ゅ洖澶嶅紑鍏�") - private String defaultGroup; - - - /** - * 鏈哄櫒鍚敤1绂佺敤0 - */ - @ExcelProperty(value = "鏈哄櫒鍚敤1绂佺敤0") - private String enable; - - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/WxRobKeywordVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/WxRobKeywordVo.java deleted file mode 100644 index 58d1b42..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/WxRobKeywordVo.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.ruoyi.system.domain.vo; - -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import org.ruoyi.system.domain.WxRobKeyword; - -import java.io.Serial; -import java.io.Serializable; - - - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆戣鍥惧璞� wx_rob_keyword - * - * @author Lion Li - * @date 2024-05-01 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = WxRobKeyword.class) -public class WxRobKeywordVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * - */ - @ExcelProperty(value = "") - private Long id; - - /** - * 鏈哄櫒鍞竴鐮� - */ - @ExcelProperty(value = "鏈哄櫒鍞竴鐮�") - private String uniqueKey; - - /** - * 鍏抽敭璇� - */ - @ExcelProperty(value = "鍏抽敭璇�") - private String keyData; - - /** - * 鍥炲鍐呭 - */ - @ExcelProperty(value = "鍥炲鍐呭") - private String valueData; - - /** - * 鍥炲绫诲瀷 - */ - @ExcelProperty(value = "鍥炲绫诲瀷") - private String typeData; - - /** - * 鐩爣鏄电О - */ - @ExcelProperty(value = "鐩爣鏄电О") - private String nickName; - - /** - * 缇�1濂藉弸0 - */ - @ExcelProperty(value = "缇�1濂藉弸0") - private Integer toGroup; - - /** - * 鍚敤1绂佺敤0 - */ - @ExcelProperty(value = "鍚敤1绂佺敤0") - private Integer enable; - - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/WxRobRelationVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/WxRobRelationVo.java deleted file mode 100644 index c71a0e6..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/WxRobRelationVo.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.ruoyi.system.domain.vo; - -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import org.ruoyi.system.domain.WxRobRelation; - -import java.io.Serial; -import java.io.Serializable; - - - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆戣鍥惧璞� wx_rob_relation - * - * @author Lion Li - * @date 2024-05-01 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = WxRobRelation.class) -public class WxRobRelationVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - /** - * - */ - @ExcelProperty(value = "") - private Long id; - - /** - * 澶栨帴鍞竴鐮� - */ - @ExcelProperty(value = "澶栨帴鍞竴鐮�") - private String outKey; - - /** - * 鏈哄櫒鍞竴鐮� - */ - @ExcelProperty(value = "鏈哄櫒鍞竴鐮�") - private String uniqueKey; - - /** - * 鐩爣鏄电О - */ - @ExcelProperty(value = "鐩爣鏄电О") - private String nickName; - - /** - * 缇�1濂藉弸0 - */ - @ExcelProperty(value = "缇�1濂藉弸0") - private Integer toGroup; - - /** - * 鍚敤1绂佺敤0 - */ - @ExcelProperty(value = "鍚敤1绂佺敤0") - private Integer enable; - - /** - * IP鐧藉悕鍗� - */ - @ExcelProperty(value = "IP鐧藉悕鍗�") - private String whiteList; - - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/cover/CoverCallbackVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/cover/CoverCallbackVo.java deleted file mode 100644 index fe0cc46..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/cover/CoverCallbackVo.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.ruoyi.system.domain.vo.cover; - -import lombok.Data; - -/** - * 缈诲敱鍥炶皟VO - * - * @author NSL - * @since 2024-12-26 - */ -@Data -public class CoverCallbackVo { - /** 鏈璇锋眰鐨勮鍗曞彿 */ - private String orderId; - - /** 鐢ㄦ埛ID */ - private String userId; - - /** 鏈娑堣垂閲戦 */ - private String cost; - - /** 缈诲敱鍚庣殑URL */ - private String coverUrl; -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/cover/CoverParamVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/cover/CoverParamVo.java deleted file mode 100644 index b07909e..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/cover/CoverParamVo.java +++ /dev/null @@ -1,60 +0,0 @@ -package org.ruoyi.system.domain.vo.cover; - -import com.alibaba.excel.annotation.ExcelProperty; -import lombok.Data; - -import java.io.Serializable; -import java.util.List; - -/** - * 缈诲敱姝屾洸鍏ュ弬 - * - * @author NSL - * @since 2024-12-25 - */ -@Data -public class CoverParamVo implements Serializable { - - /** - * 姝屾洸鍚嶇О - */ - @ExcelProperty(value = "姝屾洸鍚嶇О") - private String coverMusicName; - /** - * 姝屾洸鍦板潃 - */ - @ExcelProperty(value = "姝屾洸鍦板潃") - private String coverMusicUrl; - /** - * 姝屾墜鎬у埆 鏋氫妇 FEMALE 濂虫�� MALE 鐢锋�� - */ - @ExcelProperty(value = "姝屾墜鎬у埆") - private String coverSingerGender; - /** - * 姝屾墜濮撳悕 - */ - @ExcelProperty(value = "姝屾墜濮撳悕") - private String coverSingerName; - /** - * 鍙傝�冮煶棰戯細鐢ㄦ埛棣栨缈诲敱锛屽繀濉紱绗簩娆″強涔嬪悗缈诲敱锛氳嫢涓虹┖鍒欐部鐢ㄦ渶杩戜竴娆″弬鑰冮煶棰戣缁冩ā鍨嬶紝鑻ヤ笉涓虹┖鍒欎娇鐢ㄨ鍙傝�冮煶棰戣缁冩ā鍨嬨�� - * 鍙浼� - */ - @ExcelProperty(value = "鍙傝�冮煶棰�") - private List<String> promptAudioUrl; - /** - * 鐢ㄦ埛鎬у埆 FEMALE MALE - */ - @ExcelProperty(value = "鐢ㄦ埛鎬у埆") - private String userGender; - /** - * 鐢ㄦ埛id - */ - @ExcelProperty(value = "鐢ㄦ埛id") - private String userId; - - /** - * 涓氬姟涓婚敭id - */ - @ExcelProperty(value = "涓氬姟涓婚敭id") - private String orderId; -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/cover/CoverPromptAudioVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/cover/CoverPromptAudioVo.java deleted file mode 100644 index c6d554e..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/cover/CoverPromptAudioVo.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.ruoyi.system.domain.vo.cover; - -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import org.ruoyi.system.domain.Cover; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 缈诲敱鐢ㄦ埛鍙傝�冮煶棰戣鍥惧璞� - * - * @author NSL - * @since 2024-12-25 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = Cover.class) -public class CoverPromptAudioVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - @ExcelProperty(value = "id") - private Long id; - /** - * 鐢ㄦ埛id - */ - @ExcelProperty(value = "鐢ㄦ埛id") - private Long userId; - /** - * 缈诲敱涓昏〃id - */ - @ExcelProperty(value = "缈诲敱涓昏〃id") - private Long coverId; - /** - * 缈诲敱鍚庣殑URL - */ - @ExcelProperty(value = "鍙傝�冮煶棰�") - private String promptAudioUrl; - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/cover/CoverVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/cover/CoverVo.java deleted file mode 100644 index cffb757..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/cover/CoverVo.java +++ /dev/null @@ -1,68 +0,0 @@ -package org.ruoyi.system.domain.vo.cover; - -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import io.github.linpeilie.annotations.AutoMapper; -import lombok.Data; -import org.ruoyi.system.domain.Cover; - -import java.io.Serial; -import java.io.Serializable; - -/** - * 缈诲敱瑙嗗浘瀵硅薄 - * - * @author NSL - * @date 2024-12-25 - */ -@Data -@ExcelIgnoreUnannotated -@AutoMapper(target = Cover.class) -public class CoverVo implements Serializable { - - @Serial - private static final long serialVersionUID = 1L; - - @ExcelProperty(value = "id") - private Long id; - /** - * 姝屾洸鍚嶇О - */ - @ExcelProperty(value = "姝屾洸鍚嶇О") - private String coverMusicName; - /** - * 姝屾洸鍦板潃 - */ - @ExcelProperty(value = "姝屾洸鍦板潃") - private String coverMusicUrl; - /** - * 姝屾墜鎬у埆 鏋氫妇 FEMALE 濂虫�� MALE 鐢锋�� - */ - @ExcelProperty(value = "姝屾墜鎬у埆") - private String coverSingerGender; - /** - * 姝屾墜濮撳悕 - */ - @ExcelProperty(value = "姝屾墜濮撳悕") - private String coverSingerName; - /** - * 鐢ㄦ埛鎬у埆 FEMALE MALE - */ - @ExcelProperty(value = "鐢ㄦ埛鎬у埆") - private String userGender; - /** - * 鐢ㄦ埛id - */ - @ExcelProperty(value = "鐢ㄦ埛id") - private Long userId; - /** - * 鏈娑堣垂閲戦 - */ - @ExcelProperty(value = "鏈娑堣垂閲戦") - private String cost; - /** - * 缈诲敱鍚庣殑URL - */ - @ExcelProperty(value = "缈诲敱鍚庣殑URL") - private String coverUrl; -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/cover/MusicVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/cover/MusicVo.java deleted file mode 100644 index 5d96094..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/cover/MusicVo.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.ruoyi.system.domain.vo.cover; - -import lombok.Data; - -/** - * @author NSL - * @since 2024-12-25 - */ -@Data -public class MusicVo { - /** - * 姝屾洸鍚嶇О - */ - private String musicName; - - /** - * 闊充箰鍦板潃 - */ - private String mp3Url; - - /** - * 姝屾洸鍥剧墖 - */ - private String pic; - - /** - * 姝屾墜鎴栦箰闃熷悕 - */ - private String singerName; - - /** - * 姝屾墜鎬у埆 - */ - private String singerGender; -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ppt/PptAllQueryDto.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ppt/PptAllQueryDto.java deleted file mode 100644 index cda0115..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ppt/PptAllQueryDto.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.ruoyi.system.domain.vo.ppt; - -import lombok.Data; - -/** - * 鏌ヨ鎵�鏈塒PT鍒楄〃鏌ヨ鍙傛暟 - * - * @author NSL - * @since 2024/12/31 - */ -@Data -public class PptAllQueryDto { - // 鍒嗛〉 - private Integer page; - // 姣忛〉澶у皬锛堟渶澶т笉瓒呰繃100锛� - private Integer size; - // ppt id锛堥潪蹇呭~锛� - private String id; - // 绗笁鏂圭敤鎴稩D锛堥潪蹇呭~锛� - private String uid; - // 妯℃澘ID锛堥潪蹇呭~锛� - private String templateId; - // 鍒涘缓寮�濮嬫椂闂达紙闈炲繀濉級 - private String startDate; - // 鍒涘缓缁撴潫鏃堕棿锛堥潪蹇呭~锛� - private String endDate; - // 鎸夋椂闂村�掑簭杩斿洖锛堥潪蹇呭~锛� - private boolean desc; -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ppt/PptGenerateContentDto.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ppt/PptGenerateContentDto.java deleted file mode 100644 index 82bc517..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ppt/PptGenerateContentDto.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.ruoyi.system.domain.vo.ppt; - -import lombok.Data; - -/** - * 鐢熸垚澶х翰鍐呭鍙傛暟 - * - * @author NSL - * @since 2024/12/31 - */ -@Data -public class PptGenerateContentDto { - // 妯℃澘ID锛堥潪蹇呭~锛� - private String templateId; - - // 澶х翰 markdown 鏂囨湰 - private String outlineMarkdown; - - // 寮傛鐢熸垚PPT锛堣繖閲屽繀椤讳负 true 鎵嶄細娴佸紡鐢熸垚锛� - private boolean asyncGenPptx = false; - - // 鐢ㄦ埛瑕佹眰 - private String prompt; - - // 鏂囦欢鏁版嵁url锛岃皟鐢ㄨВ鏋愭枃浠跺唴瀹规帴鍙h繑鍥� - private String dataUrl; -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ppt/PptGenerateOutlineDto.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ppt/PptGenerateOutlineDto.java deleted file mode 100644 index bb54754..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ppt/PptGenerateOutlineDto.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.ruoyi.system.domain.vo.ppt; - -import lombok.Data; - -/** - * 鐢熸垚PPT澶х翰鍙傛暟 - * - * @author NSL - * @since 2024/12/31 - */ -@Data -public class PptGenerateOutlineDto { - // 鏄惁娴佸紡鐢熸垚锛堥粯璁ゆ祦寮忥級 - private boolean stream = true; - // 绡囧箙闀垮害锛歴hort/medium/long, 榛樿 medium, 鍒嗗埆瀵瑰簲: 10-15椤�/20-30椤�/25-35椤� - private String length = "medium"; - // 璇█: zh/zh-Hant/en/ja/ko/ar/de/fr/it/pt/es/ru - private String lang; - // 鐢ㄦ埛瑕佹眰锛堝皬浜�50瀛楋級 - private String prompt; - // 鏂瑰紡涓�锛氶�氳繃涓婚鍒涘缓 涓婚锛堜笌dataUrl鍙悓鏃跺瓨鍦級 - private String subject; - // 鏂瑰紡浜岋細閫氳繃鏂囦欢鍐呭鍒涘缓 鏂囦欢鏁版嵁url锛岄�氳繃瑙f瀽鏂囦欢鍐呭鎺ュ彛杩斿洖锛堜笌subject鍙悓鏃跺瓨鍦級 - private String dataUrl; -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ppt/PptGeneratePptxDto.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ppt/PptGeneratePptxDto.java deleted file mode 100644 index 427e9d6..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ppt/PptGeneratePptxDto.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.ruoyi.system.domain.vo.ppt; - -import lombok.Data; - -/** - * 鐢熸垚PPT鍙傛暟 - * - * @author NSL - * @since 2024/12/31 - */ -@Data -public class PptGeneratePptxDto { - // 妯℃澘ID锛堥潪蹇呭~锛� - private String templateId; - - // 鏄惁杩斿洖PPT鏁版嵁缁撴瀯 - private boolean pptxProperty; - - // 澶х翰鍐呭markdown - private String outlineContentMarkdown; - - // 澶囨敞锛圥PT椤甸潰澶囨敞锛岄潪蹇呭~锛屾暟缁� ["鍐呭椤甸潰涓�澶囨敞", "鍐呭椤甸潰浜屽娉�"]锛� - private String notes; -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ppt/PptTemplateFilterDto.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ppt/PptTemplateFilterDto.java deleted file mode 100644 index 2c44146..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ppt/PptTemplateFilterDto.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.ruoyi.system.domain.vo.ppt; - -import lombok.Data; - -/** - * PPT妯℃澘绛涢�夋煡璇㈠弬鏁� - * - * @author NSL - * @since 2024/12/31 - */ -@Data -public class PptTemplateFilterDto { - // 妯℃澘绫诲瀷锛堝繀浼狅級锛�1绯荤粺妯℃澘銆�4鐢ㄦ埛鑷畾涔夋ā鏉� - private Integer type; - - // 绫荤洰绛涢�� ['骞寸粓鎬荤粨', '鏁欒偛鍩硅', '鍖诲鍖荤枟', '鍟嗕笟璁″垝涔�', '浼佷笟浠嬬粛', '姣曚笟绛旇京', '钀ラ攢鎺ㄥ箍', '鏅氫細琛ㄥ桨', '涓汉绠�鍘�'] - private String category; - - // 椋庢牸绛涢�� ['鎵佸钩绠�绾�', '鍟嗗姟绉戞妧', '鏂囪壓娓呮柊', '鍗¢�氭墜缁�', '涓浗椋�', '鍒涙剰鏃跺皻', '鍒涙剰瓒e懗'] - private String style; - - // 涓婚棰滆壊绛涢�� ['#FA920A', '#589AFD', '#7664FA', '#65E5EC', '#61D328', '#F5FD59', '#E05757', '#8F5A0B', '#FFFFFF', '#000000'] - private String themeColor; -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ppt/PptTemplateQueryDto.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ppt/PptTemplateQueryDto.java deleted file mode 100644 index c219984..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/domain/vo/ppt/PptTemplateQueryDto.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.ruoyi.system.domain.vo.ppt; - -import lombok.Data; - -/** - * 鍒嗛〉鏌ヨ PPT 妯℃澘鏌ヨ鍙傛暟 - * - * @author NSL - * @since 2024/12/31 - */ -@Data -public class PptTemplateQueryDto { - // 鍒嗛〉 - private Integer page; - // 姣忛〉澶у皬锛堟渶澶т笉瓒呰繃100锛� - private Integer size; - // 妯″瀷绛涢�夊弬鏁� - private PptTemplateFilterDto filters; -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/CustomerBigDecimalSerialize.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/CustomerBigDecimalSerialize.java deleted file mode 100644 index d6996e4..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/CustomerBigDecimalSerialize.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.ruoyi.system.handler; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.JsonSerializer; -import com.fasterxml.jackson.databind.SerializerProvider; - -import java.io.IOException; -import java.math.BigDecimal; -import java.util.Objects; - -public class CustomerBigDecimalSerialize extends JsonSerializer<BigDecimal> { - @Override - public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - if(Objects.nonNull(value)) { - //杩斿洖鍒板墠绔殑鏁版嵁涓烘暟瀛楃被鍨�,鍓嶇鎺ユ敹鏈夊彲鑳戒涪澶辩簿搴� - //gen.writeNumber(value.stripTrailingZeros()); - //杩斿洖鍒板墠绔殑鏁版嵁涓哄瓧绗︿覆绫诲瀷 - gen.writeString(value.stripTrailingZeros().toPlainString()); - //鍘婚櫎0鍚庣紑,濡傛灉鎯崇粺涓�杩涜淇濈暀绮惧害锛屼篃鍙互閲囩敤绫讳技澶勭悊 - }else {//濡傛灉涓簄ull鐨勮瘽锛屽氨鍐檔ull - gen.writeNull(); - } - } -} - diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/MyMsgHandler.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/MyMsgHandler.java deleted file mode 100644 index 26936ed..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/MyMsgHandler.java +++ /dev/null @@ -1,230 +0,0 @@ -package org.ruoyi.system.handler; - -import com.jfinal.kit.PropKit; -import org.ruoyi.common.chat.domain.request.ChatRequest; -import org.ruoyi.common.chat.entity.chat.ChatCompletion; -import org.ruoyi.common.chat.entity.images.Item; -import org.ruoyi.common.wechat.itchat4j.beans.BaseMsg; -import org.ruoyi.common.wechat.itchat4j.core.CoreManage; -import org.ruoyi.common.wechat.itchat4j.face.IMsgHandlerFace; -import org.ruoyi.common.wechat.itchat4j.utils.LogInterface; -import org.ruoyi.common.wechat.itchat4j.utils.enums.SendMsgType; -import org.ruoyi.common.wechat.itchat4j.utils.tools.CommonTools; -import org.ruoyi.common.wechat.web.constant.ConfigKeys; -import org.ruoyi.common.wechat.web.model.WxRobConfig; -import org.ruoyi.common.wechat.web.model.WxRobKeyword; -import org.ruoyi.system.domain.vo.WxRobConfigVo; -import org.ruoyi.system.service.ISseService; -import org.apache.commons.lang3.StringUtils; - -import java.io.File; -import java.util.List; -import java.util.regex.Matcher; - -/** - * 娑堟伅澶勭悊瀹炵幇 榛樿鏂规 - * @author WesleyOne - * @create 2018/12/11 - */ -public class MyMsgHandler implements IMsgHandlerFace,LogInterface { - private String uniqueKey; - private final ISseService sseService; - private WxRobConfigVo robConfigVo; - - public MyMsgHandler(String uniqueKey,ISseService sseService,WxRobConfigVo robConfigVo){ - this.uniqueKey = uniqueKey; - this.sseService = sseService; - this.robConfigVo = robConfigVo; - } - - private String getDownloadPath(String fileName) { - String download_path = PropKit.get("download_path"); - return download_path+ File.separator + uniqueKey +File.separator + fileName; - } - - @Override - public void textMsgHandle(BaseMsg msg) { - String fromNickName = msg.getFromNickName(); - String fromUserName = msg.getFromUserName(); - boolean groupMsg = msg.isGroupMsg(); - String text = msg.getText().trim(); - - if (groupMsg && text.contains("@" + fromNickName)) { - handleGroupMessage(fromNickName, fromUserName, text); - } else { - respondWithChatGPT(fromUserName, text); - } - } - - private void handleGroupMessage(String fromNickName, String fromUserName, String text) { - String prompt = text.replace("@" + fromNickName + " ", ""); - if (prompt.startsWith("鐢�")) { - generateAndSendImage(fromUserName, prompt.replaceFirst("鐢� ", "")); - } else { - respondWithChatGPT(fromUserName, prompt); - } - } - - private void generateAndSendImage(String fromUserName, String prompt) { - List<Item> items = sseService.wxDall(prompt,robConfigVo.getUserId().toString()); - WxRobKeyword robKeyword = new WxRobKeyword(); - robKeyword.setTypeData(SendMsgType.IMG.toValue()); - robKeyword.setValueData(items.get(0).getUrl()); - sendDataByType(fromUserName, robKeyword); - } - - - - private void respondWithChatGPT(String fromUserName, String prompt) { - ChatRequest chatBO = new ChatRequest(); - //chatBO.setPrompt(prompt); - chatBO.setModel(ChatCompletion.Model.GPT_3_5_TURBO.getName()); - String chat = sseService.chat(chatBO,robConfigVo.getUserId().toString()); - WxRobKeyword robKeyword = new WxRobKeyword(); - robKeyword.setTypeData(SendMsgType.TEXT.toValue()); - robKeyword.setValueData(chat); - sendDataByType(fromUserName, robKeyword); - } - - private boolean sendDataByType(String fromUserName, WxRobKeyword robKeyword) { - String data; - String type; - if (robKeyword != null){ - data = robKeyword.getValueData(); - type = robKeyword.getTypeData(); - CoreManage.addSendMsg4UserName(uniqueKey,fromUserName,data,SendMsgType.fromValue(type)); - return true; - } - return false; - } - - - @Override - public void sysMsgHandle(BaseMsg msg) { - String fromNickName = msg.getFromNickName(); - String fromUserName = msg.getFromUserName(); - boolean groupMsg = msg.isGroupMsg(); - - /** - * 缇ら噷鐨勬柊浜鸿繘缇ゆ秷鎭鐞� - * 浼樺厛鍙戜笓闂ㄨ繖涓兢鐨勬杩庤瘝 - * 娌℃湁鍙戦�氱敤鐨� - * 娆㈣繋璇嶅唴瀹瑰疄璐ㄥ氨鏄湪鏈�鍓嶉潰鍔犱笂@鏄电О\n - * - * 娆㈣繋璇嶇殑鍏抽敭瀛� - * @see ConfigKeys#DEAFAULT_WELCOME - */ - - // 瑙f瀽鏂颁汉鍚嶅瓧 - String text = msg.getContent(); - String newNickName = ""; - Matcher matcher = CommonTools.getMatcher("閭�璇穃"(.+?)\"鍔犲叆浜嗙兢鑱�", text); - if (matcher.find()){ - newNickName = matcher.group(1); - }else{ - matcher = CommonTools.getMatcher("\"(.+?)\"閫氳繃鎵弿(.+?)鍒嗕韩鐨勪簩缁寸爜鍔犲叆缇よ亰", text); - if (matcher.find()){ - newNickName = matcher.group(1); - } - } - - if (StringUtils.isNotEmpty(newNickName)){ - - WxRobConfig robConfig = WxRobConfig.dao.findFirst("SELECT * FROM wx_rob_config WHERE unique_key = ? LIMIT 1", uniqueKey); - if(robConfig != null && robConfig.getEnable()){ - // 鍒ゆ柇鏄惁瑕佸洖澶� - boolean isOpen = false; - // 鍒ゆ柇鏄兢鑱婄殑璇濇槸鍚﹀厑璁稿洖澶� 鏄电О鍏抽敭瀛� - if (robConfig.getToGroup() && groupMsg){ - isOpen = true; - } - if (isOpen){ - WxRobKeyword robKeyword = WxRobKeyword.dao.findFirst("SELECT * FROM wx_rob_keyword WHERE unique_key = ? AND key_data = ? AND nick_name = ? AND enable = 1 AND to_group = ? ORDER BY id DESC LIMIT 1", uniqueKey, ConfigKeys.DEAFAULT_WELCOME,fromNickName,msg.isGroupMsg()?1:0); - if (sendSysWelcomeMsg(fromUserName, newNickName, robKeyword)){ return;} - } - - // 娌℃湁涓撻棬鐨勫叧閿瓧锛屽垯浣跨敤榛樿鍏抽敭瀛� - isOpen = false; - // 鍒ゆ柇鏄兢鑱婄殑璇濇槸鍚﹀厑璁稿洖澶� 鏄电О鍏抽敭瀛� - if (robConfig.getDefaultGroup() && groupMsg){ - isOpen = true; - } - if (isOpen){ - WxRobKeyword defaultRobKeyword = WxRobKeyword.dao.findFirst("SELECT * FROM wx_rob_keyword WHERE unique_key = ? AND key_data = ? AND nick_name = ? AND enable = 1 AND to_group = ? ORDER BY id DESC LIMIT 1", uniqueKey, ConfigKeys.DEAFAULT_WELCOME, ConfigKeys.DEAFAULT_KEYWORD,msg.isGroupMsg()?1:0); - if (sendSysWelcomeMsg(fromUserName, newNickName, defaultRobKeyword)){ return;} - } - } - } - - } - - /** - * 鍙戦�佹杩庡唴瀹� - * @param fromUserName - * @param newNickName - * @param robKeyword - * @return - */ - private boolean sendSysWelcomeMsg(String fromUserName, String newNickName, WxRobKeyword robKeyword) { - if (robKeyword != null){ - if (robKeyword.getTypeData().equals(SendMsgType.TEXT.toValue())){ - robKeyword.setValueData(String.format("@%s\n%s",newNickName,robKeyword.getValueData())); - } - if (sendDataByType(fromUserName, robKeyword)) { - return true; - } - } - return false; - } - - @Override - public void picMsgHandle(BaseMsg msg) { -// // 杩欓噷浣跨敤鏀跺埌鍥剧墖鐨勬椂闂翠綔涓烘枃浠跺悕 -// String fileName = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date()) + ".jpg"; -// // 淇濆瓨鍥剧墖鐨勮矾寰� -// String picPath = getDownloadPath(fileName); -// // 璋冪敤姝ゆ柟娉曟潵淇濆瓨鍥剧墖 -// DownloadTools.getDownloadFn(msg, MsgTypeEnum.PIC.getType(), picPath, this.uniqueKey); -// CoreManage.addSendMsg4UserName(uniqueKey,msg.getFromUserName(),"鍥剧墖淇濆瓨鎴愬姛",SendMsgType.TEXT); - return; - } - - @Override - public void voiceMsgHandle(BaseMsg msg) { -// // 杩欓噷浣跨敤鏀跺埌璇煶鐨勬椂闂翠綔涓烘枃浠跺悕 -// String fileName = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date()) + ".mp3"; -// // 淇濆瓨璇煶鐨勮矾寰� -// String voicePath = getDownloadPath(fileName); -// // 璋冪敤姝ゆ柟娉曟潵淇濆瓨璇煶 -// DownloadTools.getDownloadFn(msg, MsgTypeEnum.VOICE.getType(), voicePath, this.uniqueKey); -// CoreManage.addSendMsg4UserName(uniqueKey,msg.getFromUserName(),"澹伴煶淇濆瓨鎴愬姛",SendMsgType.TEXT); - return; - } - - @Override - public void videoMsgHandle(BaseMsg msg) { -// // 杩欓噷浣跨敤鏀跺埌灏忚棰戠殑鏃堕棿浣滀负鏂囦欢鍚� -// String fileName = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date()) + ".mp4"; -// // 淇濆瓨灏忚棰戠殑璺緞 -// String viedoPath = getDownloadPath(fileName); -// // 璋冪敤姝ゆ柟娉曟潵淇濆瓨灏忚棰� -// DownloadTools.getDownloadFn(msg, MsgTypeEnum.VIEDO.getType(), viedoPath,this.uniqueKey); -// CoreManage.addSendMsg4UserName(uniqueKey,msg.getFromUserName(),"瑙嗛淇濆瓨鎴愬姛",SendMsgType.TEXT); - return; - } - - @Override - public void nameCardMsgHandle(BaseMsg msg) { - return ; - } - - @Override - public void verifyAddFriendMsgHandle(BaseMsg msg) { - return ; - } - - @Override - public void mediaMsgHandle(BaseMsg msg) { - return ; - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/AbstractHandler.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/AbstractHandler.java deleted file mode 100644 index fa2ad94..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/AbstractHandler.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.ruoyi.system.handler.wxcp; - -import me.chanjar.weixin.cp.message.WxCpMessageHandler; - -/** - * @author <a href="https://github.com/binarywang">Binary Wang</a> - */ -public abstract class AbstractHandler implements WxCpMessageHandler { -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/ContactChangeHandler.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/ContactChangeHandler.java deleted file mode 100644 index 7beb820..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/ContactChangeHandler.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.ruoyi.system.handler.wxcp; - - -import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.common.session.WxSessionManager; -import me.chanjar.weixin.cp.api.WxCpService; -import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage; -import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage; -import org.ruoyi.common.core.utils.JsonUtils; -import org.ruoyi.system.builder.TextBuilder; -import org.springframework.stereotype.Component; - -import java.util.Map; - -/** - * 閫氳褰曞彉鏇翠簨浠跺鐞嗗櫒. - * - * @author <a href="https://github.com/binarywang">Binary Wang</a> - */ -@Slf4j -@Component -public class ContactChangeHandler extends AbstractHandler { - - @Override - public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map<String, Object> context, WxCpService cpService, - WxSessionManager sessionManager) { - String content = "鏀跺埌閫氳褰曞彉鏇翠簨浠讹紝鍐呭锛�" + JsonUtils.toJson(wxMessage); - log.info(content); - - return new TextBuilder().build(content, wxMessage, cpService); - } - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/EnterAgentHandler.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/EnterAgentHandler.java deleted file mode 100644 index 82806aa..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/EnterAgentHandler.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.ruoyi.system.handler.wxcp; - -import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.common.error.WxErrorException; -import me.chanjar.weixin.common.session.WxSessionManager; -import me.chanjar.weixin.cp.api.WxCpService; -import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage; -import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage; - -import java.util.Map; - -/** - * <pre> - * - * Created by Binary Wang on 2018/8/27. - * </pre> - * - * @author <a href="https://github.com/binarywang">Binary Wang</a> - */ -@Slf4j -public class EnterAgentHandler extends AbstractHandler { - private static final int TEST_AGENT = 1000002; - - @Override - public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map<String, Object> context, WxCpService wxCpService, WxSessionManager sessionManager) throws WxErrorException { - // do something - return null; - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/LocationHandler.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/LocationHandler.java deleted file mode 100644 index 4569617..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/LocationHandler.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.ruoyi.system.handler.wxcp; - -import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.common.api.WxConsts; -import me.chanjar.weixin.common.session.WxSessionManager; -import me.chanjar.weixin.cp.api.WxCpService; -import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage; -import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage; -import org.ruoyi.system.builder.TextBuilder; -import org.springframework.stereotype.Component; - -import java.util.Map; - -/** - * @author <a href="https://github.com/binarywang">Binary Wang</a> - */ -@Slf4j -@Component -public class LocationHandler extends AbstractHandler { - - @Override - public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map<String, Object> context, WxCpService cpService, - WxSessionManager sessionManager) { - if (wxMessage.getMsgType().equals(WxConsts.XmlMsgType.LOCATION)) { - //TODO 鎺ユ敹澶勭悊鐢ㄦ埛鍙戦�佺殑鍦扮悊浣嶇疆娑堟伅 - try { - String content = "鎰熻阿鍙嶉锛屾偍鐨勭殑鍦扮悊浣嶇疆宸叉敹鍒帮紒"; - return new TextBuilder().build(content, wxMessage, null); - } catch (Exception e) { - log.error("浣嶇疆娑堟伅鎺ユ敹澶勭悊澶辫触", e); - return null; - } - } - - //涓婃姤鍦扮悊浣嶇疆浜嬩欢 - log.info("\n涓婃姤鍦扮悊浣嶇疆锛岀含搴� : {}\n缁忓害 : {}\n绮惧害 : {}", - wxMessage.getLatitude(), wxMessage.getLongitude(), String.valueOf(wxMessage.getPrecision())); - - //TODO 鍙互灏嗙敤鎴峰湴鐞嗕綅缃俊鎭繚瀛樺埌鏈湴鏁版嵁搴擄紝浠ヤ究浠ュ悗浣跨敤 - - return null; - } - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/LogHandler.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/LogHandler.java deleted file mode 100644 index af32e16..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/LogHandler.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.ruoyi.system.handler.wxcp; - -import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.common.session.WxSessionManager; -import me.chanjar.weixin.cp.api.WxCpService; -import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage; -import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage; -import org.ruoyi.common.core.utils.JsonUtils; -import org.springframework.stereotype.Component; - -import java.util.Map; - -/** - * @author <a href="https://github.com/binarywang">Binary Wang</a> - */ -@Slf4j -@Component -public class LogHandler extends AbstractHandler { - @Override - public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map<String, Object> context, WxCpService cpService, - WxSessionManager sessionManager) { - log.info("\n鎺ユ敹鍒拌姹傛秷鎭紝鍐呭锛歿}", JsonUtils.toJson(wxMessage)); - return null; - } - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/MenuHandler.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/MenuHandler.java deleted file mode 100644 index fe4617d..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/MenuHandler.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.ruoyi.system.handler.wxcp; - -import me.chanjar.weixin.common.api.WxConsts.MenuButtonType; -import me.chanjar.weixin.common.session.WxSessionManager; -import me.chanjar.weixin.cp.api.WxCpService; -import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage; -import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage; -import org.springframework.stereotype.Component; - -import java.util.Map; - -/** - * @author <a href="https://github.com/binarywang">Binary Wang</a> - */ -@Component -public class MenuHandler extends AbstractHandler { - - @Override - public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map<String, Object> context, WxCpService cpService, - WxSessionManager sessionManager) { - - String msg = String.format("type:%s, event:%s, key:%s", - wxMessage.getMsgType(), wxMessage.getEvent(), - wxMessage.getEventKey()); - if (MenuButtonType.VIEW.equals(wxMessage.getEvent())) { - return null; - } - - return WxCpXmlOutMessage.TEXT().content(msg) - .fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName()) - .build(); - } - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/MsgHandler.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/MsgHandler.java deleted file mode 100644 index b52a628..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/MsgHandler.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.ruoyi.system.handler.wxcp; - -import lombok.RequiredArgsConstructor; -import me.chanjar.weixin.common.api.WxConsts; -import me.chanjar.weixin.common.session.WxSessionManager; -import me.chanjar.weixin.cp.api.WxCpService; -import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage; -import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage; -import org.ruoyi.system.builder.TextBuilder; -import org.ruoyi.system.service.ISseService; -import org.springframework.stereotype.Component; - -import java.util.Map; - -/** - * @author <a href="https://github.com/binarywang">Binary Wang</a> - */ -@Component -@RequiredArgsConstructor -public class MsgHandler extends AbstractHandler { - -// private final ISseService sseService; - - - - @Override - public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map<String, Object> context, WxCpService cpService, - WxSessionManager sessionManager) { - final String msgType = wxMessage.getMsgType(); - if (msgType == null) { - // 濡傛灉msgType娌℃湁锛屽氨鑷繁鏍规嵁鍏蜂綋鎶ユ枃鍐呭鍋氬鐞� - } - - if (!msgType.equals(WxConsts.XmlMsgType.EVENT)) { - //TODO 鍙互閫夋嫨灏嗘秷鎭繚瀛樺埌鏈湴 - } - - //TODO 缁勮鍥炲娑堟伅 - String content = ""; - //sseService.wxCpChat(wxMessage.getContent()); - - return new TextBuilder().build(content, wxMessage, cpService); - - } - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/NullHandler.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/NullHandler.java deleted file mode 100644 index b755444..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/NullHandler.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.ruoyi.system.handler.wxcp; - -import me.chanjar.weixin.common.session.WxSessionManager; -import me.chanjar.weixin.cp.api.WxCpService; -import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage; -import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage; -import org.springframework.stereotype.Component; - -import java.util.Map; - -/** - * @author <a href="https://github.com/binarywang">Binary Wang</a> - */ -@Component -public class NullHandler extends AbstractHandler { - - @Override - public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map<String, Object> context, WxCpService cpService, - WxSessionManager sessionManager) { - return null; - } - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/ScanHandler.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/ScanHandler.java deleted file mode 100644 index 8a797a1..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/ScanHandler.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.ruoyi.system.handler.wxcp; - -/** - * @author <a href="https://github.com/binarywang">Binary Wang</a> - */ -public abstract class ScanHandler extends AbstractHandler { - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/SubscribeHandler.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/SubscribeHandler.java deleted file mode 100644 index 6146c00..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/SubscribeHandler.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.ruoyi.system.handler.wxcp; - -import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.common.error.WxErrorException; -import me.chanjar.weixin.common.session.WxSessionManager; -import me.chanjar.weixin.cp.api.WxCpService; -import me.chanjar.weixin.cp.bean.WxCpUser; -import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage; -import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage; -import org.ruoyi.system.builder.TextBuilder; -import org.springframework.stereotype.Component; - -import java.util.Map; - -/** - * @author <a href="https://github.com/binarywang">Binary Wang</a> - */ -@Slf4j -@Component -public class SubscribeHandler extends AbstractHandler { - - @Override - public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map<String, Object> context, WxCpService cpService, - WxSessionManager sessionManager) throws WxErrorException { - - log.info("鏂板叧娉ㄧ敤鎴� OPENID: " + wxMessage.getFromUserName()); - - // 鑾峰彇寰俊鐢ㄦ埛鍩烘湰淇℃伅 - WxCpUser userWxInfo = cpService.getUserService().getById(wxMessage.getFromUserName()); - - if (userWxInfo != null) { - // TODO 鍙互娣诲姞鍏虫敞鐢ㄦ埛鍒版湰鍦� - } - - WxCpXmlOutMessage responseResult = null; - try { - responseResult = handleSpecial(wxMessage); - } catch (Exception e) { - log.error(e.getMessage(), e); - } - - if (responseResult != null) { - return responseResult; - } - - try { - return new TextBuilder().build("鎰熻阿鍏虫敞", wxMessage, cpService); - } catch (Exception e) { - log.error(e.getMessage(), e); - } - - return null; - } - - /** - * 澶勭悊鐗规畩璇锋眰锛屾瘮濡傚鏋滄槸鎵爜杩涙潵鐨勶紝鍙互鍋氱浉搴斿鐞� - */ - private WxCpXmlOutMessage handleSpecial(WxCpXmlMessage wxMessage) { - //TODO - return null; - } - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/UnsubscribeHandler.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/UnsubscribeHandler.java deleted file mode 100644 index b89713f..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/handler/wxcp/UnsubscribeHandler.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.ruoyi.system.handler.wxcp; - -import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.common.session.WxSessionManager; -import me.chanjar.weixin.cp.api.WxCpService; -import me.chanjar.weixin.cp.bean.message.WxCpXmlMessage; -import me.chanjar.weixin.cp.bean.message.WxCpXmlOutMessage; -import org.springframework.stereotype.Component; - -import java.util.Map; - -/** - * @author <a href="https://github.com/binarywang">Binary Wang</a> - */ -@Slf4j -@Component -public class UnsubscribeHandler extends AbstractHandler { - - @Override - public WxCpXmlOutMessage handle(WxCpXmlMessage wxMessage, Map<String, Object> context, WxCpService cpService, - WxSessionManager sessionManager) { - String openId = wxMessage.getFromUserName(); - log.info("鍙栨秷鍏虫敞鐢ㄦ埛 OPENID: " + openId); - // TODO 鍙互鏇存柊鏈湴鏁版嵁搴撲负鍙栨秷鍏虫敞鐘舵�� - return null; - } - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/listener/CustomerBigDecimalSerialize.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/listener/CustomerBigDecimalSerialize.java new file mode 100644 index 0000000..26beb91 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/listener/CustomerBigDecimalSerialize.java @@ -0,0 +1,25 @@ +package org.ruoyi.system.listener; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; +import java.math.BigDecimal; +import java.util.Objects; + +public class CustomerBigDecimalSerialize extends JsonSerializer<BigDecimal> { + @Override + public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + if(Objects.nonNull(value)) { + //杩斿洖鍒板墠绔殑鏁版嵁涓烘暟瀛楃被鍨�,鍓嶇鎺ユ敹鏈夊彲鑳戒涪澶辩簿搴� + //gen.writeNumber(value.stripTrailingZeros()); + //杩斿洖鍒板墠绔殑鏁版嵁涓哄瓧绗︿覆绫诲瀷 + gen.writeString(value.stripTrailingZeros().toPlainString()); + //鍘婚櫎0鍚庣紑,濡傛灉鎯崇粺涓�杩涜淇濈暀绮惧害锛屼篃鍙互閲囩敤绫讳技澶勭悊 + }else {//濡傛灉涓簄ull鐨勮瘽锛屽氨鍐檔ull + gen.writeNull(); + } + } +} + diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/listener/SSEEventSourceListener.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/listener/SSEEventSourceListener.java deleted file mode 100644 index 92d767b..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/listener/SSEEventSourceListener.java +++ /dev/null @@ -1,140 +0,0 @@ -package org.ruoyi.system.listener; - - -import cn.hutool.core.collection.CollectionUtil; -import com.fasterxml.jackson.databind.ObjectMapper; -import lombok.RequiredArgsConstructor; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import okhttp3.Response; -import okhttp3.ResponseBody; -import okhttp3.sse.EventSource; -import okhttp3.sse.EventSourceListener; -import org.ruoyi.common.chat.config.LocalCache; -import org.ruoyi.common.chat.entity.chat.ChatCompletionResponse; -import org.ruoyi.common.chat.utils.TikTokensUtil; -import org.ruoyi.common.core.utils.SpringUtils; -import org.ruoyi.common.core.utils.StringUtils; -import org.ruoyi.system.domain.bo.SysModelBo; -import org.ruoyi.system.domain.vo.SysModelVo; -import org.ruoyi.system.service.ISysModelService; -import org.jetbrains.annotations.NotNull; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter; - -import java.util.List; -import java.util.Objects; - -/** - * 鎻忚堪锛歄penAIEventSourceListener - * - * @author https:www.unfbx.com - * @date 2023-02-22 - */ -@Slf4j -@RequiredArgsConstructor -@Component -public class SSEEventSourceListener extends EventSourceListener { - - private ResponseBodyEmitter emitter; - - private StringBuilder stringBuffer = new StringBuilder(); - - @Autowired(required = false) - public SSEEventSourceListener(ResponseBodyEmitter emitter) { - this.emitter = emitter; - } - private static final ISysModelService sysModelService = SpringUtils.getBean(ISysModelService.class); - private String modelName; - /** - * {@inheritDoc} - */ - @Override - public void onOpen(EventSource eventSource, Response response) { - log.info("OpenAI寤虹珛sse杩炴帴..."); - } - - /** - * {@inheritDoc} - */ - @SneakyThrows - @Override - public void onEvent(@NotNull EventSource eventSource, String id, String type, String data) { - try { - if ("[DONE]".equals(data)) { - //鎴愬姛鍝嶅簲 - emitter.complete(); - if(StringUtils.isNotEmpty(modelName)){ - IChatCostService IChatCostService = SpringUtils.context().getBean(IChatCostService.class); - IChatMessageService chatMessageService = SpringUtils.context().getBean(IChatMessageService.class); - ChatMessageBo chatMessageBo = new ChatMessageBo(); - chatMessageBo.setModelName(modelName); - chatMessageBo.setContent(stringBuffer.toString()); - Long userId = (Long)LocalCache.CACHE.get("userId"); - if(userId == null){ - return; - } - chatMessageBo.setUserId(userId); - //鏌ヨ鎸夋鏁版墸璐圭殑妯″瀷 - SysModelBo sysModelBo = new SysModelBo(); - sysModelBo.setModelType("2"); - sysModelBo.setModelName(modelName); - List<SysModelVo> sysModelList = sysModelService.queryList(sysModelBo); - if (CollectionUtil.isNotEmpty(sysModelList)){ - chatMessageBo.setDeductCost(0d); - chatMessageBo.setRemark("鎻愰棶鏃舵墸璐�"); - // 淇濆瓨娑堟伅璁板綍 - chatMessageService.insertByBo(chatMessageBo); - }else{ - int tokens = TikTokensUtil.tokens(modelName,stringBuffer.toString()); - chatMessageBo.setTotalTokens(tokens); - // 鎸塼oken鎵h垂骞朵笖淇濆瓨娑堟伅璁板綍 - IChatCostService.deductToken(chatMessageBo); - } - } - return; - } - // 瑙f瀽杩斿洖鍐呭 - ObjectMapper mapper = new ObjectMapper(); - ChatCompletionResponse completionResponse = mapper.readValue(data, ChatCompletionResponse.class); - if(completionResponse == null || CollectionUtil.isEmpty(completionResponse.getChoices())){ - return; - } - Object content = completionResponse.getChoices().get(0).getDelta().getContent(); - if(content == null){ - content = completionResponse.getChoices().get(0).getDelta().getReasoningContent(); - if(content == null) return; - } - if(StringUtils.isEmpty(modelName)){ - modelName = completionResponse.getModel(); - } - stringBuffer.append(content); - emitter.send(data); - } catch (Exception e) { - log.error("sse淇℃伅鎺ㄩ�佸け璐}鍐呭锛歿}",e.getMessage(),data); - eventSource.cancel(); - } - } - - @Override - public void onClosed(EventSource eventSource) { - log.info("OpenAI鍏抽棴sse杩炴帴..."); - } - - @SneakyThrows - @Override - public void onFailure(EventSource eventSource, Throwable t, Response response) { - if (Objects.isNull(response)) { - return; - } - ResponseBody body = response.body(); - if (Objects.nonNull(body)) { - log.error("OpenAI sse杩炴帴寮傚父data锛歿}锛屽紓甯革細{}", body.string(), t); - } else { - log.error("OpenAI sse杩炴帴寮傚父data锛歿}锛屽紓甯革細{}", response, t); - } - eventSource.cancel(); - } - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/CoverMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/CoverMapper.java deleted file mode 100644 index 1a6f792..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/CoverMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.ruoyi.system.mapper; - -import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; -import org.ruoyi.system.domain.Cover; -import org.ruoyi.system.domain.vo.cover.CoverVo; - -/** - * 缈诲敱Mapper鎺ュ彛 - * - * @author NSL - * @since 2024-12-25 - */ -public interface CoverMapper extends BaseMapperPlus<Cover, CoverVo> { - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/CoverPromptAudioMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/CoverPromptAudioMapper.java deleted file mode 100644 index 2bf27ec..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/CoverPromptAudioMapper.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.ruoyi.system.mapper; - -import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; -import org.ruoyi.system.domain.CoverPromptAudio; -import org.ruoyi.system.domain.vo.cover.CoverPromptAudioVo; - -import java.util.List; - -/** - * 缈诲敱鐢ㄦ埛鍙傝�冮煶棰慚apper鎺ュ彛 - * - * @author NSL - * @since 2024-12-25 - */ -public interface CoverPromptAudioMapper extends BaseMapperPlus<CoverPromptAudio, CoverPromptAudioVo> { - - /** - * 鑾峰彇鏈�杩戜竴娆$炕鍞辫褰� - * @param userId 鐢ㄦ埛id - * @return 缈诲敱璁板綍 - */ - List<CoverPromptAudioVo> selectLatestVoByUserId(Long userId); -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/PaymentOrdersMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/PaymentOrdersMapper.java deleted file mode 100644 index 67e404a..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/PaymentOrdersMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.ruoyi.system.mapper; - -import org.ruoyi.system.domain.PaymentOrder; -import org.ruoyi.system.domain.vo.PaymentOrdersVo; -import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; - -/** - * 鏀粯璁㈠崟Mapper鎺ュ彛 - * - * @author Lion Li - * @date 2024-04-16 - */ -public interface PaymentOrdersMapper extends BaseMapperPlus<PaymentOrder, PaymentOrdersVo> { - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysModelMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysModelMapper.java deleted file mode 100644 index 18a1f4d..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysModelMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.ruoyi.system.mapper; - -import org.ruoyi.system.domain.SysModel; -import org.ruoyi.system.domain.vo.SysModelVo; -import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; - -/** - * 绯荤粺妯″瀷Mapper鎺ュ彛 - * - * @author Lion Li - * @date 2024-04-04 - */ -public interface SysModelMapper extends BaseMapperPlus<SysModel, SysModelVo> { - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysPackagePlanMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysPackagePlanMapper.java deleted file mode 100644 index 492cf97..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysPackagePlanMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.ruoyi.system.mapper; - -import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; -import org.ruoyi.system.domain.SysPackagePlan; -import org.ruoyi.system.domain.vo.SysPackagePlanVo; - -/** - * 濂楅绠$悊Mapper鎺ュ彛 - * - * @author Lion Li - * @date 2024-05-05 - */ -public interface SysPackagePlanMapper extends BaseMapperPlus<SysPackagePlan, SysPackagePlanVo> { - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysUserGroupMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysUserGroupMapper.java deleted file mode 100644 index 81410f3..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysUserGroupMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.ruoyi.system.mapper; - -import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; -import org.ruoyi.system.domain.SysUserGroup; -import org.ruoyi.system.domain.vo.SysUserGroupVo; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆慚apper鎺ュ彛 - * - * @author Lion Li - * @date 2024-08-03 - */ -public interface SysUserGroupMapper extends BaseMapperPlus<SysUserGroup, SysUserGroupVo> { - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysUserModelMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysUserModelMapper.java deleted file mode 100644 index 0817e82..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/SysUserModelMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.ruoyi.system.mapper; - -import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; -import org.ruoyi.system.domain.SysUserModel; -import org.ruoyi.system.domain.vo.SysUserModelVo; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆慚apper鎺ュ彛 - * - * @author Lion Li - * @date 2024-08-03 - */ -public interface SysUserModelMapper extends BaseMapperPlus<SysUserModel, SysUserModelVo> { - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/WxRobConfigMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/WxRobConfigMapper.java deleted file mode 100644 index 9cfc5b1..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/WxRobConfigMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.ruoyi.system.mapper; - -import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; -import org.ruoyi.system.domain.WxRobConfig; -import org.ruoyi.system.domain.vo.WxRobConfigVo; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆慚apper鎺ュ彛 - * - * @author Lion Li - * @date 2024-05-01 - */ -public interface WxRobConfigMapper extends BaseMapperPlus<WxRobConfig, WxRobConfigVo> { - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/WxRobKeywordMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/WxRobKeywordMapper.java deleted file mode 100644 index e76ec3e..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/WxRobKeywordMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.ruoyi.system.mapper; - -import org.ruoyi.system.domain.WxRobKeyword; -import org.ruoyi.system.domain.vo.WxRobKeywordVo; -import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆慚apper鎺ュ彛 - * - * @author Lion Li - * @date 2024-05-01 - */ -public interface WxRobKeywordMapper extends BaseMapperPlus<WxRobKeyword, WxRobKeywordVo> { - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/WxRobRelationMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/WxRobRelationMapper.java deleted file mode 100644 index edd32fe..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/mapper/WxRobRelationMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.ruoyi.system.mapper; - -import org.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; -import org.ruoyi.system.domain.WxRobRelation; -import org.ruoyi.system.domain.vo.WxRobRelationVo; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆慚apper鎺ュ彛 - * - * @author Lion Li - * @date 2024-05-01 - */ -public interface WxRobRelationMapper extends BaseMapperPlus<WxRobRelation, WxRobRelationVo> { - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/request/RoleListDto.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/request/RoleListDto.java deleted file mode 100644 index d6a8519..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/request/RoleListDto.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.ruoyi.system.request; - -import lombok.Data; - -/** - * 鎻忚堪锛� - * - * @author ageerle@163.com - * date 2024/4/27 - */ -@Data -public class RoleListDto { - - private String name; - - private String description; - - private String voicesId; - - private String avatar; - - private String previewAudio; - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/request/RoleRequest.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/request/RoleRequest.java deleted file mode 100644 index d77b1e9..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/request/RoleRequest.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.ruoyi.system.request; - -import lombok.Data; - -/** - * @author WangLe - */ -@Data -public class RoleRequest { - - /** - * 瑙掕壊鍚嶇О - */ - private String name; - - /** - * 瑙掕壊榛樿椋庢牸闊抽鏍锋湰锛宐ase64 缂栫爜鐨勯煶棰戞暟鎹� - */ - private String prompt; - - /** - * 瑙掕壊鎻忚堪 - */ - private String description; - - /** - * 澶村儚 - */ - private String avatar; - - /** - * 涓撲笟鍏嬮殕鏍锋湰Zip鏂囦欢鐨勫垎鐗囦笂浼營D锛岃鍏堥�氳繃鍒嗙墖涓婁紶鎺ュ彛瀹屾垚鏂囦欢涓婁紶 - */ - private String lora; - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/request/SimpleGenerateRequest.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/request/SimpleGenerateRequest.java deleted file mode 100644 index 6a9378e..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/request/SimpleGenerateRequest.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.ruoyi.system.request; - -import lombok.Data; - -import java.util.List; - -/** - * @author WangLe - */ -@Data -public class SimpleGenerateRequest { - - /** - * 瑙掕壊ID - */ - private String voiceId; - - /** - * 瑕佺敓鎴愮殑鏂囨湰鍐呭 - */ - private String text; - - /** - * 瑕佺敓鎴愮殑鏂囨湰鍐呭 浼樺厛绾ч珮浜巘ext - */ - private List<String> texts; - - /** - * 瑙掕壊椋庢牸 ID 锛堥粯璁や负default) - */ - private String promptId = "default"; - - /** - * 瑕佷娇鐢ㄧ殑妯″瀷ID (鐩墠缁熶竴涓簉eecho-neural-voice-001) - */ - private String model = "reecho-neural-voice-001"; - - /** - * 澶氭牱鎬� (0-100锛岄粯璁や负97) - */ - private Integer randomness; - - /** - * 绋冲畾鎬ц繃婊� (0-100锛岄粯璁や负100) - */ - private Integer stability_boost; - - /** - * 姒傜巼浼橀�夛紙0-100锛岄粯璁や负99锛� - */ - private Integer probability_optimization; - - /** - * 鏄惁鐩存帴杩斿洖鐢熸垚闊抽鐨凚ase64 DataURL锛岃�屼笉鏄疷rl閾炬帴锛堥粯璁や负false) - */ - private Boolean origin_audio; - - /** - * 鏄惁鍚敤娴佸紡鐢熸垚 - */ - private Boolean stream; - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/MetadataResponse.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/MetadataResponse.java deleted file mode 100644 index ff09e6f..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/MetadataResponse.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.ruoyi.system.response; - -import lombok.Data; - -import java.util.List; - -/** - * @author WangLe - */ -@Data -public class MetadataResponse { - - /** - * 璇煶瑙掕壊澶村儚 URL - */ - private String avatar; - - /** - * 璇煶瑙掕壊鎻忚堪 - */ - private String description; - - /** - * 璇煶瑙掕壊椋庢牸鍒楄〃 - */ - private List<PromptResponse> prompts; -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/PromptResponse.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/PromptResponse.java deleted file mode 100644 index 000f902..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/PromptResponse.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.ruoyi.system.response; - -import lombok.Data; - -/** - * 鎻忚堪锛氳闊宠鑹查鏍煎垪琛� - * - * @author ageerle@163.com - * date 2024/4/27 - */ -@Data -public class PromptResponse { - - /** - * 瑙掕壊椋庢牸 ID - */ - private String id; - - /** - * 瑙掕壊椋庢牸鍚嶇О - */ - private String name; - - /** - * 瑙掕壊椋庢牸鏍锋湰闊抽 URL - */ - private String promptOriginAudioStorageUrl; - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/RoleDataResponse.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/RoleDataResponse.java deleted file mode 100644 index 1e7c67e..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/RoleDataResponse.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.ruoyi.system.response; - -import lombok.Data; - -/** - * @author WangLe - */ -@Data -public class RoleDataResponse { - /** - * 璇煶瑙掕壊 ID - */ - private String id; - - /** - * 闊宠鑹插悕绉� - */ - private String name; - - /** - * 璇煶瑙掕壊鐘舵�侊紝鍙互涓� - * pending锛堢灛鏃跺厠闅嗗凡瀹屾垚锛� - * lora-pending锛堜笓涓氬厠闅嗚缁冧腑锛� - * lora-success锛堜笓涓氬厠闅嗗凡瀹屾垚锛� - * lora-failed锛堜笓涓氬厠闅嗗け璐ワ級 - */ - private String status; - private MetadataResponse metadata; - private String from; - private String originId; - private String createdAt; - private String updatedAt; - private String deletedAt; - private String userId; -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/RoleResponse.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/RoleResponse.java deleted file mode 100644 index 0f4ea42..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/RoleResponse.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.ruoyi.system.response; - -import lombok.Data; - -/** - * @author WangLe - */ -@Data -public class RoleResponse { - /** - * 鐘舵�佺爜 - */ - private String status; - /** - * 鐘舵�佷俊鎭� - */ - private String message; - /** - * 鍒涘缓鐨勮闊宠鑹茶鎯� - */ - private RoleDataResponse data; -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/SimpleGenerateDataResponse.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/SimpleGenerateDataResponse.java deleted file mode 100644 index 79d904b..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/SimpleGenerateDataResponse.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.ruoyi.system.response; - -import lombok.Data; - -/** - * @author WangLe - */ -@Data -public class SimpleGenerateDataResponse { - - /** - * 鏈鐢熸垚鐨処D - */ - private String id; - - /** - * 鏈鐢熸垚缁撴灉鐨勯煶棰戞枃浠跺湴鍧� - */ - private String audio; - - /** - * 娴佸紡MP3绔偣 - */ - private String streamUrl; - - /** - * 鏈鐢熸垚鎵�娑堣�楃殑鐐规暟 - */ - private Integer credit_used; -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/SimpleGenerateResponse.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/SimpleGenerateResponse.java deleted file mode 100644 index ac4b358..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/SimpleGenerateResponse.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.ruoyi.system.response; - -import lombok.Data; - -/** - * @author WangLe - */ -@Data -public class SimpleGenerateResponse { - - /** - * 鐘舵�佺爜锛屽け璐ユ椂鍒欎负500 - */ - private String status; - - /** - * 鐘舵�佹秷鎭� - */ - private String message; - - /** - * 鐢熸垚璇︽儏 - */ - private SimpleGenerateDataResponse data; -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/rolelist/ChatAppStoreVO.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/rolelist/ChatAppStoreVO.java deleted file mode 100644 index 0d22f20..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/rolelist/ChatAppStoreVO.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.ruoyi.system.response.rolelist; - -import lombok.Data; - -@Data -public class ChatAppStoreVO { - - - private String name; - - private String description; - - private String voicesId; - - private String avatar; - - private String appUrl; - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/rolelist/ContentResponse.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/rolelist/ContentResponse.java deleted file mode 100644 index ea7f747..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/rolelist/ContentResponse.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.ruoyi.system.response.rolelist; - -import lombok.Data; - -/** - * - * 鎻忚堪锛氳幏鍙栧綋鍓嶇敤鎴风殑璇煶瑙掕壊鍒楄〃杩斿洖瀵硅薄 - * - * @author ageerle@163.com - * date 2024/4/27 - */ -import java.util.List; - -@Data -public class ContentResponse { - - /** - * 璇煶瑙掕壊 ID - */ - private String id; - - /** - * 璇煶瑙掕壊鍚嶇О - */ - private String name; - - /** - * 璇煶瑙掕壊鐘舵�侊紝鍙互涓簆ending锛堢灛鏃跺厠闅嗗凡瀹屾垚锛夈�乴ora-pending锛堜笓涓氬厠闅嗚缁冧腑锛夈�乴ora-success锛堜笓涓氬厠闅嗗凡瀹屾垚锛夈�乴ora-failed锛堜笓涓氬厠闅嗗け璐ワ級 - */ - private String status; - - - private Metadata metadata; - @Data - public static class Metadata { - - /** - * 璇煶瑙掕壊澶村儚 URL - */ - private String avatar; - - /** - * 璇煶瑙掕壊鎻忚堪 - */ - private String description; - - /** - * 璇煶瑙掕壊椋庢牸鍒楄〃 - */ - private List<prompt> prompts; - - private String previewAudio; - - private String promptMP3StorageUrl; - - @Data - public static class prompt { - /** - * 瑙掕壊椋庢牸 ID - */ - private String id; - - /** - * 瑙掕壊椋庢牸鍚嶇О - */ - private String name; - - /** - * 瑙掕壊椋庢牸鏍锋湰闊抽 URL - */ - private String promptOriginAudioStorageUrl; - - } - - } - -} - diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/rolelist/RoleListResponse.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/rolelist/RoleListResponse.java deleted file mode 100644 index a985781..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/response/rolelist/RoleListResponse.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.ruoyi.system.response.rolelist; - -import lombok.Data; - -import java.util.List; - -/** - * @author WangLe - */ -@Data -public class RoleListResponse { - /** - * 鐘舵�佺爜 - */ - private String status; - /** - * 鐘舵�佷俊鎭� - */ - private String message; - /** - * 鍒涘缓鐨勮闊宠鑹茶鎯� - */ - private List<ContentResponse> data; -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/runner/SystemApplicationRunner.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/runner/SystemApplicationRunner.java deleted file mode 100644 index 13d9670..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/runner/SystemApplicationRunner.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.ruoyi.system.runner; - -import org.ruoyi.system.service.ISysOssConfigService; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.ApplicationArguments; -import org.springframework.boot.ApplicationRunner; -import org.springframework.stereotype.Component; - -/** - * 鍒濆鍖� system 妯″潡瀵瑰簲涓氬姟鏁版嵁 - * - * @author Lion Li - */ -@Slf4j -@RequiredArgsConstructor -@Component -public class SystemApplicationRunner implements ApplicationRunner { - - private final ISysOssConfigService ossConfigService; - - @Override - public void run(ApplicationArguments args) throws Exception { - ossConfigService.init(); - log.info("鍒濆鍖朞SS閰嶇疆鎴愬姛"); - } - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ICoverPromptAudioService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ICoverPromptAudioService.java deleted file mode 100644 index d610a68..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ICoverPromptAudioService.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.ruoyi.system.service; - -/** - * 缈诲敱鐢ㄦ埛鍙傝�冮煶棰慡ervice鎺ュ彛 - * - * @author NSL - * @since 2024-12-25 - */ -public interface ICoverPromptAudioService { - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ICoverService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ICoverService.java deleted file mode 100644 index f6c22bd..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ICoverService.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.ruoyi.system.service; - -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.system.domain.vo.cover.CoverCallbackVo; -import org.ruoyi.system.domain.vo.cover.CoverParamVo; -import org.ruoyi.system.domain.vo.cover.CoverVo; -import org.ruoyi.system.domain.vo.cover.MusicVo; - -import java.util.List; - -/** - * 缈诲敱Service鎺ュ彛 - * - * @author NSL - * @since 2024-12-25 - */ -public interface ICoverService { - - /** - * 鏌ユ壘姝屾洸 - * - * @param musicName 姝屾洸鍚嶇О - * @return 鍖归厤鐨勬瓕鏇蹭俊鎭泦鍚� - */ - List<MusicVo> searchMusic(String musicName); - - /** - * 缈诲敱鍥炶皟 - * - * @param coverCallbackVo 鍥炶皟淇℃伅 - */ - void callback(CoverCallbackVo coverCallbackVo); - - /** - * 缈诲敱姝屾洸 - * - * @param coverParamVo 缈诲敱淇℃伅 - */ - void saveCoverTask(CoverParamVo coverParamVo); - - /** - * 鏌ヨ鐢ㄦ埛鐨勭炕鍞辫褰� - * - * @return 缈诲敱璁板綍 - */ - TableDataInfo<CoverVo> searchCoverRecord(PageQuery pageQuery); - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IPaymentOrdersService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IPaymentOrdersService.java deleted file mode 100644 index 1ac29b4..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IPaymentOrdersService.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.ruoyi.system.service; - -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.system.domain.bo.PaymentOrdersBo; -import org.ruoyi.system.domain.request.OrderRequest; -import org.ruoyi.system.domain.vo.PaymentOrdersVo; - -import java.util.Collection; -import java.util.List; - -/** - * 鏀粯璁㈠崟Service鎺ュ彛 - * - * @author Lion Li - * @date 2024-04-16 - */ -public interface IPaymentOrdersService { - - /** - * 鏌ヨ鏀粯璁㈠崟 - */ - PaymentOrdersVo queryById(Long id); - - - /** - * 鍒涘缓鏀粯璁㈠崟 - */ - PaymentOrdersBo createPayOrder(OrderRequest orderRequest); - - /** - * 淇敼璁㈠崟鐘舵�佷负宸叉敮浠� - * - */ - void updatePayOrder(OrderRequest orderRequest); - - - /** - * 鏌ヨ鏀粯璁㈠崟鍒楄〃 - */ - TableDataInfo<PaymentOrdersVo> queryPageList(PaymentOrdersBo bo, PageQuery pageQuery); - - /** - * 鏌ヨ鏀粯璁㈠崟鍒楄〃 - */ - List<PaymentOrdersVo> queryList(PaymentOrdersBo bo); - - /** - * 鏂板鏀粯璁㈠崟 - */ - Boolean insertByBo(PaymentOrdersBo bo); - - /** - * 淇敼鏀粯璁㈠崟 - */ - Boolean updateByBo(PaymentOrdersBo bo); - - /** - * 鏍¢獙骞舵壒閲忓垹闄ゆ敮浠樿鍗曚俊鎭� - */ - Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IPptService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IPptService.java deleted file mode 100644 index eb284ab..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IPptService.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.ruoyi.system.service; - -import com.alibaba.fastjson.JSONObject; -import org.ruoyi.system.domain.vo.ppt.*; -import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; - -/** - * AI_PPT Service鎺ュ彛 - * - * @author NSL - * @since 2024-12-30 - */ -public interface IPptService { - /** - * 鍚屾娴佸紡鐢熸垚 PPT - * - * @param title ppt 鏍囬 - */ - void syncStreamGeneratePpt(String title); - - /** - * 鏌ヨ PPT 鍒楄〃 - * - * @param pptQueryVo 鏌ヨ鍙傛暟 - */ - void selectPptList(PptAllQueryDto pptQueryVo); - - /** - * 鍒嗛〉鏌ヨ PPT 妯℃澘 - * @param pptQueryVo 鏌ヨ鍙傛暟 - */ - JSONObject getPptTemplates(PptTemplateQueryDto pptQueryVo); - - /** - * 鐢熸垚澶х翰 - * @param generateOutlineDto 鐢熸垚澶х翰鍙傛暟 - */ - SseEmitter generateOutline(PptGenerateOutlineDto generateOutlineDto); - - /** - * 鐢熸垚澶х翰鍐呭 - * @param generateContentDto 鐢熸垚澶х翰鍐呭鍙傛暟 - */ - SseEmitter generateContent(PptGenerateContentDto generateContentDto); - - /** - * 鐢熸垚ppt - * @param generatePptxDto 鐢熸垚PPT鍙傛暟 - */ - JSONObject generatePptx(PptGeneratePptxDto generatePptxDto); - - /** - * 鑾峰彇API Token - * @return 鏂囧澶歍oken - */ - String getApiToken(); - - /** - * 鐢熸垚PPT鎴愬姛鍥炶皟鎺ュ彛 - */ - void successCallback(); - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISseService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISseService.java deleted file mode 100644 index 7230c78..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISseService.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.ruoyi.system.service; - - -import jakarta.servlet.http.HttpServletRequest; -import org.ruoyi.common.chat.domain.request.ChatRequest; -import org.ruoyi.common.chat.domain.request.Dall3Request; -import org.ruoyi.common.chat.entity.Tts.TextToSpeech; -import org.ruoyi.common.chat.entity.files.UploadFileResponse; -import org.ruoyi.common.chat.entity.images.Item; -import org.ruoyi.common.chat.entity.whisper.WhisperResponse; -import org.ruoyi.system.domain.request.translation.TranslationRequest; -import org.springframework.core.io.Resource; -import org.springframework.http.ResponseEntity; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; - -import java.util.List; - -/** - * 鎻忚堪锛� - * - * @author https:www.unfbx.com - * @date 2023-04-08 - */ -public interface ISseService { - - /** - * 瀹㈡埛绔彂閫佹秷鎭埌鏈嶅姟绔� - * @param chatRequest - */ - SseEmitter sseChat(ChatRequest chatRequest,HttpServletRequest request); - - /** - * 璇煶杞枃瀛� - * @param file - */ - WhisperResponse speechToTextTranscriptionsV2(MultipartFile file); - - /** - * 鏂囧瓧杞闊� - */ - ResponseEntity<Resource> textToSpeed(TextToSpeech textToSpeech); - - /** - * 瀹㈡埛绔彂閫佹秷鎭埌鏈嶅姟绔� - * @param chatRequest - */ - String chat(ChatRequest chatRequest,String userId); - - /** - * 瀹㈡埛绔彂閫佹秷鎭埌鏈嶅姟绔� - */ - List<Item> wxDall(String prompt,String userId); - - /** - * 缁樼敾鎺ュ彛 - * @param request - */ - List<Item> dall3(Dall3Request request); - - - UploadFileResponse upload(MultipartFile file); - - /** - * 鏂囨湰缈昏瘧 - * @param - */ - String translation(TranslationRequest translationRequest); - - /** - * 璋冪敤鏈湴妯″瀷 - * @param chatRequest - */ - SseEmitter ollamaChat(ChatRequest chatRequest); - - /** - * 浼佷笟搴旂敤鍥炲 - * @param prompt 鎻愮ず璇� - * @return 鍥炲鍐呭 - */ - String wxCpChat(String prompt); -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysModelService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysModelService.java deleted file mode 100644 index ac5182c..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysModelService.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.ruoyi.system.service; - -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.system.domain.SysModel; -import org.ruoyi.system.domain.bo.SysModelBo; -import org.ruoyi.system.domain.vo.SysModelVo; - -import java.util.Collection; -import java.util.List; - -/** - * 绯荤粺妯″瀷Service鎺ュ彛 - * - * @author Lion Li - * @date 2024-04-04 - */ -public interface ISysModelService { - - /** - * 鏌ヨ绯荤粺妯″瀷 - */ - SysModelVo queryById(Long id); - - /** - * 鏌ヨ绯荤粺妯″瀷鍒楄〃 - */ - TableDataInfo<SysModelVo> queryPageList(SysModelBo bo, PageQuery pageQuery); - - /** - * 鏌ヨ绯荤粺妯″瀷鍒楄〃 - */ - List<SysModelVo> queryList(SysModelBo bo); - - /** - * 鏂板绯荤粺妯″瀷 - */ - Boolean insertByBo(SysModelBo bo); - - /** - * 淇敼绯荤粺妯″瀷 - */ - Boolean updateByBo(SysModelBo bo); - - /** - * 鏍¢獙骞舵壒閲忓垹闄ょ郴缁熸ā鍨嬩俊鎭� - */ - Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); - - /** - * 鏍规嵁妯″瀷鍚嶇О鏌ヨ妯″瀷 - */ - SysModel selectModelByName(String modelName); -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysPackagePlanService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysPackagePlanService.java deleted file mode 100644 index d8bb581..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysPackagePlanService.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.ruoyi.system.service; - -import org.ruoyi.system.domain.vo.SysPackagePlanVo; -import org.ruoyi.system.domain.bo.SysPackagePlanBo; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.common.mybatis.core.page.PageQuery; - -import java.util.Collection; -import java.util.List; - -/** - * 濂楅绠$悊Service鎺ュ彛 - * - * @author Lion Li - * @date 2024-05-05 - */ -public interface ISysPackagePlanService { - - /** - * 鏌ヨ濂楅绠$悊 - */ - SysPackagePlanVo queryById(Long id); - - /** - * 鏌ヨ濂楅绠$悊鍒楄〃 - */ - TableDataInfo<SysPackagePlanVo> queryPageList(SysPackagePlanBo bo, PageQuery pageQuery); - - /** - * 鏌ヨ濂楅绠$悊鍒楄〃 - */ - List<SysPackagePlanVo> queryList(SysPackagePlanBo bo); - - /** - * 鏂板濂楅绠$悊 - */ - Boolean insertByBo(SysPackagePlanBo bo); - - /** - * 淇敼濂楅绠$悊 - */ - Boolean updateByBo(SysPackagePlanBo bo); - - /** - * 鏍¢獙骞舵壒閲忓垹闄ゅ椁愮鐞嗕俊鎭� - */ - Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysUserGroupService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysUserGroupService.java deleted file mode 100644 index b018639..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysUserGroupService.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.ruoyi.system.service; - -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.system.domain.bo.SysUserGroupBo; -import org.ruoyi.system.domain.vo.SysUserGroupVo; - -import java.util.Collection; -import java.util.List; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice鎺ュ彛 - * - * @author Lion Li - * @date 2024-08-03 - */ -public interface ISysUserGroupService { - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆� - */ - SysUserGroupVo queryById(Long id); - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - TableDataInfo<SysUserGroupVo> queryPageList(SysUserGroupBo bo, PageQuery pageQuery); - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - List<SysUserGroupVo> queryList(SysUserGroupBo bo); - - /** - * 鏂板銆愯濉啓鍔熻兘鍚嶇О銆� - */ - Boolean insertByBo(SysUserGroupBo bo); - - /** - * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆� - */ - Boolean updateByBo(SysUserGroupBo bo); - - /** - * 鏍¢獙骞舵壒閲忓垹闄ゃ�愯濉啓鍔熻兘鍚嶇О銆戜俊鎭� - */ - Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysUserModelService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysUserModelService.java deleted file mode 100644 index 45e2d40..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/ISysUserModelService.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.ruoyi.system.service; - -import org.ruoyi.system.domain.vo.SysUserModelVo; -import org.ruoyi.system.domain.bo.SysUserModelBo; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.common.mybatis.core.page.PageQuery; - -import java.util.Collection; -import java.util.List; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice鎺ュ彛 - * - * @author Lion Li - * @date 2024-08-03 - */ -public interface ISysUserModelService { - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆� - */ - SysUserModelVo queryById(Long id); - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - TableDataInfo<SysUserModelVo> queryPageList(SysUserModelBo bo, PageQuery pageQuery); - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - List<SysUserModelVo> queryList(SysUserModelBo bo); - - /** - * 鏂板銆愯濉啓鍔熻兘鍚嶇О銆� - */ - Boolean insertByBo(SysUserModelBo bo); - - /** - * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆� - */ - Boolean updateByBo(SysUserModelBo bo); - - /** - * 鏍¢獙骞舵壒閲忓垹闄ゃ�愯濉啓鍔熻兘鍚嶇О銆戜俊鎭� - */ - Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IWxRobConfigService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IWxRobConfigService.java deleted file mode 100644 index bcfd940..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IWxRobConfigService.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.ruoyi.system.service; - -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.system.domain.bo.WxRobConfigBo; -import org.ruoyi.system.domain.vo.WxRobConfigVo; - -import java.util.Collection; -import java.util.List; - -/** - * 鏈哄櫒浜篠ervice鎺ュ彛 - * - * @author Lion Li - * @date 2024-05-01 - */ -public interface IWxRobConfigService { - - /** - * 鏌ヨ鏈哄櫒浜� - */ - WxRobConfigVo queryById(Long id); - - /** - * 鏌ヨ鏈哄櫒浜哄垪琛� - */ - TableDataInfo<WxRobConfigVo> queryPageList(WxRobConfigBo bo, PageQuery pageQuery); - - /** - * 鏌ヨ褰撳墠鐢ㄦ埛缁戝畾鐨勬満鍣ㄤ汉淇℃伅 - */ - List<WxRobConfigVo> queryList(WxRobConfigBo bo); - - /** - * 鏂板鏈哄櫒浜� - */ - Boolean insertByBo(WxRobConfigBo bo); - - /** - * 淇敼鏈哄櫒浜� - */ - Boolean updateByBo(WxRobConfigBo bo); - - /** - * 鏍¢獙骞舵壒閲忓垹闄ゆ満鍣ㄤ汉淇℃伅 - */ - Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IWxRobKeywordService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IWxRobKeywordService.java deleted file mode 100644 index 39bb526..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IWxRobKeywordService.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.ruoyi.system.service; - -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.system.domain.bo.WxRobKeywordBo; -import org.ruoyi.system.domain.vo.WxRobKeywordVo; - -import java.util.Collection; -import java.util.List; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice鎺ュ彛 - * - * @author Lion Li - * @date 2024-05-01 - */ -public interface IWxRobKeywordService { - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆� - */ - WxRobKeywordVo queryById(Long id); - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - TableDataInfo<WxRobKeywordVo> queryPageList(WxRobKeywordBo bo, PageQuery pageQuery); - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - List<WxRobKeywordVo> queryList(WxRobKeywordBo bo); - - /** - * 鏂板銆愯濉啓鍔熻兘鍚嶇О銆� - */ - Boolean insertByBo(WxRobKeywordBo bo); - - /** - * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆� - */ - Boolean updateByBo(WxRobKeywordBo bo); - - /** - * 鏍¢獙骞舵壒閲忓垹闄ゃ�愯濉啓鍔熻兘鍚嶇О銆戜俊鎭� - */ - Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IWxRobRelationService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IWxRobRelationService.java deleted file mode 100644 index 4344fbd..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/IWxRobRelationService.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.ruoyi.system.service; - -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.system.domain.bo.WxRobRelationBo; -import org.ruoyi.system.domain.vo.WxRobRelationVo; - -import java.util.Collection; -import java.util.List; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice鎺ュ彛 - * - * @author Lion Li - * @date 2024-05-01 - */ -public interface IWxRobRelationService { - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆� - */ - WxRobRelationVo queryById(Long id); - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - TableDataInfo<WxRobRelationVo> queryPageList(WxRobRelationBo bo, PageQuery pageQuery); - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - List<WxRobRelationVo> queryList(WxRobRelationBo bo); - - /** - * 鏂板銆愯濉啓鍔熻兘鍚嶇О銆� - */ - Boolean insertByBo(WxRobRelationBo bo); - - /** - * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆� - */ - Boolean updateByBo(WxRobRelationBo bo); - - /** - * 鏍¢獙骞舵壒閲忓垹闄ゃ�愯濉啓鍔熻兘鍚嶇О銆戜俊鎭� - */ - Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/SysLoginService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/SysLoginService.java deleted file mode 100644 index 017388c..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/SysLoginService.java +++ /dev/null @@ -1,435 +0,0 @@ -package org.ruoyi.system.service; - -import cn.binarywang.wx.miniapp.api.WxMaService; -import cn.binarywang.wx.miniapp.api.WxMaUserService; -import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; -import cn.binarywang.wx.miniapp.util.WxMaConfigHolder; -import cn.dev33.satoken.exception.NotLoginException; -import cn.dev33.satoken.secure.BCrypt; -import cn.dev33.satoken.stp.StpUtil; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.util.ObjectUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import org.ruoyi.common.core.constant.Constants; -import org.ruoyi.common.core.constant.GlobalConstants; -import org.ruoyi.common.core.constant.TenantConstants; -import org.ruoyi.common.core.domain.dto.RoleDTO; -import org.ruoyi.common.core.domain.model.LoginUser; -import org.ruoyi.common.core.domain.model.VisitorLoginBody; -import org.ruoyi.common.core.domain.model.VisitorLoginUser; -import org.ruoyi.common.core.enums.*; -import org.ruoyi.common.core.exception.user.CaptchaException; -import org.ruoyi.common.core.exception.user.CaptchaExpireException; -import org.ruoyi.common.core.exception.user.UserException; -import org.ruoyi.common.core.service.ConfigService; -import org.ruoyi.common.core.utils.*; -import org.ruoyi.common.log.event.LogininforEvent; -import org.ruoyi.common.redis.utils.RedisUtils; -import org.ruoyi.common.satoken.utils.LoginHelper; -import org.ruoyi.common.tenant.exception.TenantException; -import org.ruoyi.common.tenant.helper.TenantHelper; -import org.ruoyi.common.wechat.web.utils.UUIDShortUtil; -import org.ruoyi.system.domain.SysUser; -import org.ruoyi.system.domain.bo.SysUserBo; -import org.ruoyi.system.domain.vo.LoginVo; -import org.ruoyi.system.domain.vo.SysTenantVo; -import org.ruoyi.system.domain.vo.SysUserVo; -import org.ruoyi.system.mapper.SysUserMapper; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.common.error.WxErrorException; -import org.apache.commons.lang3.math.NumberUtils; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; - -import java.time.Duration; -import java.util.Date; -import java.util.List; -import java.util.function.Supplier; - -/** - * 鐧诲綍鏍¢獙鏂规硶 - * - * @author Lion Li - */ -@RequiredArgsConstructor -@Slf4j -@Service -public class SysLoginService { - - private final SysUserMapper userMapper; - private final ISysPermissionService permissionService; - private final ISysTenantService tenantService; - private final WxMaService wxMaService; - private final ISysUserService userService; - private final ConfigService configService; - @Value("${user.password.maxRetryCount}") - private Integer maxRetryCount; - - @Value("${user.password.lockTime}") - private Integer lockTime; - - /** - * 鑾峰彇寰俊 - * @param xcxCode 鑾峰彇xcxCode - */ - public String getOpenidFromCode(String xcxCode) { - try { - WxMaJscode2SessionResult sessionInfo = wxMaService.getUserService().getSessionInfo(xcxCode); - return sessionInfo.getOpenid(); - } catch (WxErrorException e) { - e.printStackTrace(); - return null; - } - } - /** - * 鐧诲綍楠岃瘉 - * - * @param username 鐢ㄦ埛鍚� - * @param password 瀵嗙爜 - * @param code 楠岃瘉鐮� - * @param uuid 鍞竴鏍囪瘑 - * @return 缁撴灉 - */ - public String login(String tenantId, String username, String password, String code, String uuid) { - SysUserVo user = loadUserByUsername(tenantId, username); - checkLogin(LoginType.PASSWORD, tenantId, username, () -> !BCrypt.checkpw(password, user.getPassword())); - // 姝ゅ鍙牴鎹櫥褰曠敤鎴风殑鏁版嵁涓嶅悓 鑷鍒涘缓 loginUser - LoginUser loginUser = buildLoginUser(user); - // 鐢熸垚token - LoginHelper.loginByDevice(loginUser, DeviceType.PC); - - recordLogininfor(loginUser.getTenantId(), username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); - recordLoginInfo(user.getUserId()); - return StpUtil.getTokenValue(); - } - - public String smsLogin(String tenantId, String phonenumber, String smsCode) { - // 鏍¢獙绉熸埛 - checkTenant(tenantId); - // 閫氳繃鎵嬫満鍙锋煡鎵剧敤鎴� - SysUserVo user = loadUserByPhonenumber(tenantId, phonenumber); - - checkLogin(LoginType.SMS, tenantId, user.getUserName(), () -> !validateSmsCode(tenantId, phonenumber, smsCode)); - // 姝ゅ鍙牴鎹櫥褰曠敤鎴风殑鏁版嵁涓嶅悓 鑷鍒涘缓 loginUser - LoginUser loginUser = buildLoginUser(user); - // 鐢熸垚token - LoginHelper.loginByDevice(loginUser, DeviceType.APP); - - recordLogininfor(loginUser.getTenantId(), user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); - recordLoginInfo(user.getUserId()); - return StpUtil.getTokenValue(); - } - - public String emailLogin(String tenantId, String email, String emailCode) { - // 鏍¢獙绉熸埛 - checkTenant(tenantId); - // 閫氳繃鎵嬫満鍙锋煡鎵剧敤鎴� - SysUserVo user = loadUserByEmail(tenantId, email); - - checkLogin(LoginType.EMAIL, tenantId, user.getUserName(), () -> !validateEmailCode(tenantId, email, emailCode)); - // 姝ゅ鍙牴鎹櫥褰曠敤鎴风殑鏁版嵁涓嶅悓 鑷鍒涘缓 loginUser - LoginUser loginUser = buildLoginUser(user); - // 鐢熸垚token - LoginHelper.loginByDevice(loginUser, DeviceType.APP); - - recordLogininfor(loginUser.getTenantId(), user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); - recordLoginInfo(user.getUserId()); - return StpUtil.getTokenValue(); - } - - - /** - * 娓稿鐧诲綍 - * - * @param loginBody - * @return String - * @Date 2023/5/18 - **/ - public void visitorLogin(VisitorLoginBody loginBody) { - String openid = ""; - // PC绔父瀹㈢櫥褰� - if (LoginUserType.PC.getCode().equals(loginBody.getType())) { - openid = loginBody.getCode(); - } else { - // 灏忕▼搴忓尶鍚嶇櫥褰� - try { - WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(loginBody.getCode()); - openid = session.getOpenid(); - } catch (WxErrorException e) { - log.error(e.getMessage(), e); - } finally { - // 娓呯悊ThreadLocal - WxMaConfigHolder.remove(); - } - } - } - - public LoginVo mpLogin(String openid) { - // 浣跨敤 openid 鏌ヨ缁戝畾鐢ㄦ埛 濡傛湭缁戝畾鐢ㄦ埛 鍒欐牴鎹笟鍔¤嚜琛屽鐞� 渚嬪 鍒涘缓榛樿鐢ㄦ埛 - SysUserVo user = userService.selectUserByOpenId(openid); - VisitorLoginUser loginUser = new VisitorLoginUser(); - if (ObjectUtil.isNull(user)) { - SysUserBo sysUser = new SysUserBo(); - // 鏀逛负鑷 - String name = "鐢ㄦ埛" + UUIDShortUtil.generateShortUuid(); - ; - // 璁剧疆榛樿鐢ㄦ埛鍚� - sysUser.setUserName(name); - // 璁剧疆榛樿鏄电О - sysUser.setNickName(name); - // 璁剧疆榛樿瀵嗙爜 - sysUser.setPassword(BCrypt.hashpw("123456")); - // 璁剧疆寰俊openId - sysUser.setOpenId(openid); - String configValue = configService.getConfigValue("mail", "amount"); - // 璁剧疆榛樿浣欓 - sysUser.setUserBalance(NumberUtils.toDouble(configValue, 1)); - // 娉ㄥ唽鐢ㄦ埛,璁剧疆榛樿绉熸埛涓�0 - SysUser registerUser = userService.registerUser(sysUser, "0"); - - // 鏋勫缓鐧诲綍鐢ㄦ埛淇℃伅 - loginUser.setTenantId("0"); - loginUser.setUserId(registerUser.getUserId()); - loginUser.setUsername(registerUser.getUserName()); - loginUser.setUserType(UserType.APP_USER.getUserType()); - loginUser.setOpenid(openid); - loginUser.setNickName(registerUser.getNickName()); - - } else { - // 姝ゅ鍙牴鎹櫥褰曠敤鎴风殑鏁版嵁涓嶅悓 鑷鍒涘缓 loginUser - loginUser.setTenantId(user.getTenantId()); - loginUser.setUserId(user.getUserId()); - loginUser.setUsername(user.getUserName()); - loginUser.setUserType(user.getUserType()); - loginUser.setNickName(user.getNickName()); - loginUser.setAvatar(user.getWxAvatar()); - loginUser.setOpenid(openid); - } - // 鐢熸垚token - LoginHelper.loginByDevice(loginUser, DeviceType.XCX); - recordLogininfor(loginUser.getTenantId(), loginUser.getUsername(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); - LoginVo loginVo = new LoginVo(); - // 鐢熸垚浠ょ墝 - loginVo.setToken(StpUtil.getTokenValue()); - loginVo.setUserInfo(loginUser); - return loginVo; - } - - - /** - * 閫�鍑虹櫥褰� - */ - public void logout() { - try { - LoginUser loginUser = LoginHelper.getLoginUser(); - if (TenantHelper.isEnable() && LoginHelper.isSuperAdmin()) { - // 瓒呯骇绠$悊鍛� 鐧诲嚭娓呴櫎鍔ㄦ�佺鎴� - TenantHelper.clearDynamic(); - } - StpUtil.logout(); - if (loginUser !=null) { - recordLogininfor(loginUser.getTenantId(), loginUser.getUsername(), Constants.LOGOUT, MessageUtils.message("user.logout.success")); - } - } catch (NotLoginException ignored) { - } - } - - /** - * 璁板綍鐧诲綍淇℃伅 - * - * @param tenantId 绉熸埛ID - * @param username 鐢ㄦ埛鍚� - * @param status 鐘舵�� - * @param message 娑堟伅鍐呭 - */ - private void recordLogininfor(String tenantId, String username, String status, String message) { - LogininforEvent logininforEvent = new LogininforEvent(); - logininforEvent.setTenantId(tenantId); - logininforEvent.setUsername(username); - logininforEvent.setStatus(status); - logininforEvent.setMessage(message); - logininforEvent.setRequest(ServletUtils.getRequest()); - SpringUtils.context().publishEvent(logininforEvent); - } - - /** - * 鏍¢獙鐭俊楠岃瘉鐮� - */ - private boolean validateSmsCode(String tenantId, String phonenumber, String smsCode) { - String code = RedisUtils.getCacheObject(GlobalConstants.CAPTCHA_CODE_KEY + phonenumber); - if (StringUtils.isBlank(code)) { - recordLogininfor(tenantId, phonenumber, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")); - throw new CaptchaExpireException(); - } - return code.equals(smsCode); - } - - /** - * 鏍¢獙閭楠岃瘉鐮� - */ - private boolean validateEmailCode(String tenantId, String email, String emailCode) { - String code = RedisUtils.getCacheObject(GlobalConstants.CAPTCHA_CODE_KEY + email); - if (StringUtils.isBlank(code)) { - recordLogininfor(tenantId, email, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")); - throw new CaptchaExpireException(); - } - return code.equals(emailCode); - } - - /** - * 鏍¢獙楠岃瘉鐮� - * - * @param username 鐢ㄦ埛鍚� - * @param code 楠岃瘉鐮� - * @param uuid 鍞竴鏍囪瘑 - */ - public void validateCaptcha(String tenantId, String username, String code, String uuid) { - String verifyKey = GlobalConstants.CAPTCHA_CODE_KEY + StringUtils.defaultString(uuid, ""); - String captcha = RedisUtils.getCacheObject(verifyKey); - RedisUtils.deleteObject(verifyKey); - if (captcha == null) { - recordLogininfor(tenantId, username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")); - throw new CaptchaExpireException(); - } - if (!code.equalsIgnoreCase(captcha)) { - recordLogininfor(tenantId, username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")); - throw new CaptchaException(); - } - } - - private SysUserVo loadUserByUsername(String tenantId, String username) { - - SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>().select(SysUser::getUserName, SysUser::getStatus).eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId).eq(SysUser::getUserName, username)); - if (ObjectUtil.isNull(user)) { - log.info("鐧诲綍鐢ㄦ埛锛歿} 涓嶅瓨鍦�.", username); - throw new UserException("user.not.exists", username); - } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { - log.info("鐧诲綍鐢ㄦ埛锛歿} 宸茶鍋滅敤.", username); - throw new UserException("user.blocked", username); - } - if (TenantHelper.isEnable()) { - return userMapper.selectTenantUserByUserName(username, tenantId); - } - return userMapper.selectUserByUserName(username); - } - - private SysUserVo loadUserByPhonenumber(String tenantId, String phonenumber) { - SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>().select(SysUser::getPhonenumber, SysUser::getStatus).eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId).eq(SysUser::getPhonenumber, phonenumber)); - if (ObjectUtil.isNull(user)) { - log.info("鐧诲綍鐢ㄦ埛锛歿} 涓嶅瓨鍦�.", phonenumber); - throw new UserException("user.not.exists", phonenumber); - } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { - log.info("鐧诲綍鐢ㄦ埛锛歿} 宸茶鍋滅敤.", phonenumber); - throw new UserException("user.blocked", phonenumber); - } - if (TenantHelper.isEnable()) { - return userMapper.selectTenantUserByPhonenumber(phonenumber, tenantId); - } - return userMapper.selectUserByPhonenumber(phonenumber); - } - - private SysUserVo loadUserByEmail(String tenantId, String email) { - SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>().select(SysUser::getPhonenumber, SysUser::getStatus).eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId).eq(SysUser::getEmail, email)); - if (ObjectUtil.isNull(user)) { - log.info("鐧诲綍鐢ㄦ埛锛歿} 涓嶅瓨鍦�.", email); - throw new UserException("user.not.exists", email); - } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { - log.info("鐧诲綍鐢ㄦ埛锛歿} 宸茶鍋滅敤.", email); - throw new UserException("user.blocked", email); - } - if (TenantHelper.isEnable()) { - return userMapper.selectTenantUserByEmail(email, tenantId); - } - return userMapper.selectUserByEmail(email); - } - - /** - * 鏋勫缓鐧诲綍鐢ㄦ埛 - */ - private LoginUser buildLoginUser(SysUserVo user) { - LoginUser loginUser = new LoginUser(); - loginUser.setTenantId(user.getTenantId()); - loginUser.setUserId(user.getUserId()); - loginUser.setDeptId(user.getDeptId()); - loginUser.setUsername(user.getUserName()); - loginUser.setAvatar(user.getAvatar()); - loginUser.setUserType(user.getUserType()); - loginUser.setMenuPermission(permissionService.getMenuPermission(user.getUserId())); - loginUser.setRolePermission(permissionService.getRolePermission(user.getUserId())); - loginUser.setDeptName(ObjectUtil.isNull(user.getDept()) ? "" : user.getDept().getDeptName()); - List<RoleDTO> roles = BeanUtil.copyToList(user.getRoles(), RoleDTO.class); - loginUser.setRoles(roles); - return loginUser; - } - - /** - * 璁板綍鐧诲綍淇℃伅 - * - * @param userId 鐢ㄦ埛ID - */ - public void recordLoginInfo(Long userId) { - SysUser sysUser = new SysUser(); - sysUser.setUserId(userId); - sysUser.setLoginIp(ServletUtils.getClientIP()); - sysUser.setLoginDate(DateUtils.getNowDate()); - sysUser.setUpdateBy(userId); - userMapper.updateById(sysUser); - } - - /** - * 鐧诲綍鏍¢獙 - */ - private void checkLogin(LoginType loginType, String tenantId, String username, Supplier<Boolean> supplier) { - String errorKey = GlobalConstants.PWD_ERR_CNT_KEY + username; - String loginFail = Constants.LOGIN_FAIL; - - // 鑾峰彇鐢ㄦ埛鐧诲綍閿欒娆℃暟(鍙嚜瀹氫箟闄愬埗绛栫暐 渚嬪: key + username + ip) - Integer errorNumber = RedisUtils.getCacheObject(errorKey); - // 閿佸畾鏃堕棿鍐呯櫥褰� 鍒欒涪鍑� - if (ObjectUtil.isNotNull(errorNumber) && errorNumber.equals(maxRetryCount)) { - recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime)); - throw new UserException(loginType.getRetryLimitExceed(), maxRetryCount, lockTime); - } - - if (supplier.get()) { - // 鏄惁绗竴娆� - errorNumber = ObjectUtil.isNull(errorNumber) ? 1 : errorNumber + 1; - // 杈惧埌瑙勫畾閿欒娆℃暟 鍒欓攣瀹氱櫥褰� - if (errorNumber.equals(maxRetryCount)) { - RedisUtils.setCacheObject(errorKey, errorNumber, Duration.ofMinutes(lockTime)); - recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime)); - throw new UserException(loginType.getRetryLimitExceed(), maxRetryCount, lockTime); - } else { - // 鏈揪鍒拌瀹氶敊璇鏁� 鍒欓�掑 - RedisUtils.setCacheObject(errorKey, errorNumber); - recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitCount(), errorNumber)); - throw new UserException(loginType.getRetryLimitCount(), errorNumber); - } - } - - // 鐧诲綍鎴愬姛 娓呯┖閿欒娆℃暟 - RedisUtils.deleteObject(errorKey); - } - - private void checkTenant(String tenantId) { - if (!TenantHelper.isEnable()) { - return; - } - if (TenantConstants.DEFAULT_TENANT_ID.equals(tenantId)) { - return; - } - SysTenantVo tenant = tenantService.queryByTenantId(tenantId); - if (ObjectUtil.isNull(tenant)) { - log.info("鐧诲綍绉熸埛锛歿} 涓嶅瓨鍦�.", tenantId); - throw new TenantException("tenant.not.exists"); - } else if (TenantStatus.DISABLE.getCode().equals(tenant.getStatus())) { - log.info("鐧诲綍绉熸埛锛歿} 宸茶鍋滅敤.", tenantId); - throw new TenantException("tenant.blocked"); - } else if (ObjectUtil.isNotNull(tenant.getExpireTime()) && new Date().after(tenant.getExpireTime())) { - log.info("鐧诲綍绉熸埛锛歿} 宸茶秴杩囨湁鏁堟湡.", tenantId); - throw new TenantException("tenant.expired"); - } - } - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/WeixinUserService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/WeixinUserService.java deleted file mode 100644 index 6cf778c..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/WeixinUserService.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.ruoyi.system.service; - -/** - * @Author 鍏紬鍙凤細绋嬪簭鐚块樋鏈� - */ -public interface WeixinUserService { - - void checkSignature(String signature, String timestamp, String nonce); - - String handleWeixinMsg(String body); - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/CoverPromptAudioServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/CoverPromptAudioServiceImpl.java deleted file mode 100644 index 51200fc..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/CoverPromptAudioServiceImpl.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.ruoyi.system.service.impl; - -import jakarta.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.ruoyi.system.mapper.CoverPromptAudioMapper; -import org.ruoyi.system.service.ICoverPromptAudioService; -import org.springframework.stereotype.Service; - -/** - * 缈诲敱鐢ㄦ埛鍙傝�冮煶棰慡ervice涓氬姟灞傚鐞� - * - * @author NSL - * @since 2024-12-25 - */ -@Service -@Slf4j -public class CoverPromptAudioServiceImpl implements ICoverPromptAudioService { - - @Resource - private CoverPromptAudioMapper coverPromptAudioMapper; - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/CoverServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/CoverServiceImpl.java deleted file mode 100644 index 4b6d96e..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/CoverServiceImpl.java +++ /dev/null @@ -1,133 +0,0 @@ -package org.ruoyi.system.service.impl; - -import cn.dev33.satoken.exception.NotLoginException; -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.lang.TypeReference; -import cn.hutool.json.JSONUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import okhttp3.Request; -import org.apache.commons.lang3.math.NumberUtils; -import org.ruoyi.common.core.exception.base.BaseException; -import org.ruoyi.common.core.service.ConfigService; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.common.wechat.itchat4j.utils.enums.ResultEnum; -import org.ruoyi.system.cofing.OkHttpConfig; -import org.ruoyi.system.domain.Cover; -import org.ruoyi.system.domain.CoverPromptAudio; -import org.ruoyi.system.domain.model.ApiResult; -import org.ruoyi.system.domain.vo.cover.*; -import org.ruoyi.system.mapper.CoverMapper; -import org.ruoyi.system.mapper.CoverPromptAudioMapper; -import org.ruoyi.system.service.ICoverService; -import org.ruoyi.system.util.WeChatScanHttpUtil; -import org.springframework.stereotype.Service; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import static org.ruoyi.common.satoken.utils.LoginHelper.getLoginUser; - -/** - * 缈诲敱Service涓氬姟灞傚鐞� - * - * @author NSL - * @since 2024-12-25 - */ -@RequiredArgsConstructor -@Service -@Slf4j -public class CoverServiceImpl implements ICoverService { - - private final CoverMapper coverMapper; - private final CoverPromptAudioMapper coverPromptAudioMapper; - private final ConfigService configService; - private final IChatCostService chatCostService; - private final WeChatScanHttpUtil weChatScanHttpUtil; - private final OkHttpConfig okHttpConfig; - - @Override - public List<MusicVo> searchMusic(String musicName) { - Map<String, String> queryMap = new HashMap<>(); - queryMap.put("keyword", musicName); - String json = JSONUtil.toJsonStr(queryMap); - Request postRequest = weChatScanHttpUtil.createPostRequest(getKey("search_music_url"), json); - String body = weChatScanHttpUtil.executeRequest(postRequest); - ApiResult apiResult = JSONUtil.toBean(body, ApiResult.class); - Object data = apiResult.getData(); - Map<String, List<MusicVo>> userMap = JSONUtil.toBean(JSONUtil.toJsonStr(data), new TypeReference<>() {}, true); - return userMap.get("musicList"); - } - - @Override - public void callback(CoverCallbackVo coverCallbackVo) { - Cover cover = BeanUtil.copyProperties(coverCallbackVo, Cover.class); - coverMapper.insertOrUpdate(cover); - } - - @Override - public void saveCoverTask(CoverParamVo coverParamVo) { - Long userId = null; - try { - userId = getLoginUser().getUserId(); - } catch (Exception e) { - throw new NotLoginException(NotLoginException.NOT_TOKEN_MESSAGE, NotLoginException.NOT_TOKEN, NotLoginException.NOT_TOKEN); - } - List<String> promptAudioUrl = coverParamVo.getPromptAudioUrl(); - Cover cover = BeanUtil.copyProperties(coverParamVo, Cover.class); - cover.setUserId(userId); - coverMapper.insertOrUpdate(cover); - if (CollUtil.isEmpty(promptAudioUrl)) { - // 鏌ヨ鐢ㄦ埛鏈�杩戜竴娆$炕鍞辫褰� - List<CoverPromptAudioVo> coverPromptAudioVoList = coverPromptAudioMapper.selectLatestVoByUserId(userId); - if (CollUtil.isEmpty(coverPromptAudioVoList)) { - throw new BaseException("鏈煡璇㈠埌缈诲敱璁板綍锛岃涓婁紶鍙傝�冮煶棰戯紒"); - } - List<String> promptAudioUrlList = coverPromptAudioVoList.stream().map(CoverPromptAudioVo::getPromptAudioUrl).collect(Collectors.toList()); - coverParamVo.setPromptAudioUrl(promptAudioUrlList); - } else { - // 淇濆瓨鐢ㄦ埛缈诲敱璁板綍 - for (String audioUrl : promptAudioUrl) { - CoverPromptAudio coverPromptAudio = new CoverPromptAudio(); - coverPromptAudio.setPromptAudioUrl(audioUrl); - coverPromptAudio.setUserId(userId); - coverPromptAudio.setCoverId(cover.getId()); - coverPromptAudioMapper.insertOrUpdate(coverPromptAudio); - } - } - coverParamVo.setUserId(String.valueOf(userId)); - coverParamVo.setOrderId(String.valueOf(cover.getId())); - coverParamVo.setUserGender(""); - log.info("鍙戣捣缈诲敱浠诲姟,鍏ュ弬{}", JSONUtil.toJsonStr(coverParamVo)); - // 璋冪敤缈诲敱API - Request postRequest = weChatScanHttpUtil.createPostRequest(getKey("cover_url"), JSONUtil.toJsonStr(coverParamVo)); - String body = weChatScanHttpUtil.executeRequest(postRequest); - ApiResult apiResult = JSONUtil.toBean(body, ApiResult.class); - if (ResultEnum.SUCCESS.getCode().equals(String.valueOf(apiResult.getCode()))) { - // 鎵h垂 - chatCostService.taskDeduct("cover", "token", NumberUtils.toDouble(okHttpConfig.getGenerate(), 2.5)); - } - log.info("璋冪敤缈诲敱缁撴灉,鍑哄弬{}", body); - } - - @Override - public TableDataInfo<CoverVo> searchCoverRecord(PageQuery pageQuery) { - LambdaQueryWrapper<Cover> queryWrapper = Wrappers.lambdaQuery(); - queryWrapper.eq(Cover::getUserId, getLoginUser().getUserId()); - queryWrapper.orderByDesc(Cover::getCreateTime); - Page<CoverVo> result = coverMapper.selectVoPage(pageQuery.build(), queryWrapper); - return TableDataInfo.build(result); - } - - public String getKey(String key) { - return configService.getConfigValue("cover", key); - } - -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/PaymentOrdersServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/PaymentOrdersServiceImpl.java deleted file mode 100644 index 1415aaa..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/PaymentOrdersServiceImpl.java +++ /dev/null @@ -1,211 +0,0 @@ -package org.ruoyi.system.service.impl; - -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.collection.CollectionUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import org.ruoyi.common.core.domain.model.LoginUser; -import org.ruoyi.common.core.exception.base.BaseException; -import org.ruoyi.common.core.utils.MapstructUtils; -import org.ruoyi.common.core.utils.StringUtils; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.common.satoken.utils.LoginHelper; -import org.ruoyi.system.domain.PaymentOrder; -import org.ruoyi.system.domain.SysUser; -import org.ruoyi.system.domain.bo.PaymentOrdersBo; -import org.ruoyi.system.domain.bo.SysPackagePlanBo; -import org.ruoyi.system.domain.bo.SysUserBo; -import org.ruoyi.system.domain.request.OrderRequest; -import org.ruoyi.system.domain.vo.PaymentOrdersVo; -import org.ruoyi.system.domain.vo.SysPackagePlanVo; -import org.ruoyi.system.domain.vo.SysUserVo; -import org.ruoyi.system.mapper.PaymentOrdersMapper; -import org.ruoyi.system.mapper.SysUserMapper; -import org.ruoyi.system.service.IPaymentOrdersService; -import org.ruoyi.system.service.ISysPackagePlanService; -import org.ruoyi.system.service.ISysUserService; -import org.ruoyi.system.util.OrderNumberGenerator; -import org.springframework.stereotype.Service; - -import java.math.BigDecimal; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -/** - * 鏀粯璁㈠崟Service涓氬姟灞傚鐞� - * - * @author Lion Li - * @date 2024-04-16 - */ -@RequiredArgsConstructor -@Service -public class PaymentOrdersServiceImpl implements IPaymentOrdersService { - - private final PaymentOrdersMapper baseMapper; - - private final SysUserMapper sysUserMapper; - - private final ISysUserService userService; - - private final ISysPackagePlanService planService; - - /** - * 鏌ヨ鏀粯璁㈠崟 - */ - @Override - public PaymentOrdersVo queryById(Long id){ - return baseMapper.selectVoById(id); - } - - /** - * 鍒涘缓鏀粯璁㈠崟 - */ - @Override - public PaymentOrdersBo createPayOrder(OrderRequest orderRequest) { - LoginUser loginUser = LoginHelper.getLoginUser(); - PaymentOrdersBo paymentOrder = new PaymentOrdersBo(); - paymentOrder.setOrderName(orderRequest.getName()); - paymentOrder.setAmount(new BigDecimal(orderRequest.getMoney())); - paymentOrder.setOrderNo(OrderNumberGenerator.generate()); - paymentOrder.setUserId(loginUser.getUserId()); - // TODO 鏀粯鐘舵�侀粯璁ゅ緟鏀粯 - 娣诲姞鏋氫妇 - paymentOrder.setPaymentStatus("1"); - // 淇濆瓨鏀粯璁㈠崟 - insertByBo(paymentOrder); - return paymentOrder; - } - - /** - * 淇敼璁㈠崟鐘舵�佷负宸叉敮浠� - * - */ - @Override - public void updatePayOrder(OrderRequest orderRequest) { - PaymentOrdersBo paymentOrdersBo = new PaymentOrdersBo(); - paymentOrdersBo.setOrderNo(orderRequest.getOrderNo()); - List<PaymentOrdersVo> paymentOrdersList = queryList(paymentOrdersBo); - if (CollectionUtil.isEmpty(paymentOrdersList)){ - throw new BaseException("璁㈠崟涓嶅瓨鍦紒"); - } - // 鏍规嵁浠锋牸鏌ヨ濂楅 - SysPackagePlanBo sysPackagePlanBo = new SysPackagePlanBo(); - sysPackagePlanBo.setPrice(new BigDecimal(orderRequest.getMoney())); - SysPackagePlanVo sysPackagePlanVo = planService.queryList(sysPackagePlanBo).get(0); - - - // 璁㈠崟鐘舵�佷慨鏀逛负宸叉敮浠� - PaymentOrdersVo paymentOrdersVo = paymentOrdersList.get(0); - // 1 鏈敮浠� 2鏈敮浠� - paymentOrdersVo.setPaymentStatus("2"); - paymentOrdersVo.setPaymentMethod(orderRequest.getPayType()); - BeanUtil.copyProperties(paymentOrdersVo,paymentOrdersBo); - updateByBo(paymentOrdersBo); - // 鐢ㄦ埛鍏呭�艰垂鐢� - double money = paymentOrdersBo.getAmount().doubleValue(); - SysUserVo sysUserVo = userService.selectUserById(paymentOrdersVo.getUserId()); - sysUserVo.setUserBalance(sysUserVo.getUserBalance() + money); - SysUserBo sysUserBo = new SysUserBo(); - BeanUtil.copyProperties(sysUserVo,sysUserBo); - // 璁剧疆涓轰粯璐圭敤鎴� - sysUserBo.setUserGrade("1"); - sysUserBo.setUserPlan(sysPackagePlanVo.getId().toString()); - userService.updateUser(sysUserBo); - } - - /** - * 鏌ヨ鏀粯璁㈠崟鍒楄〃 - */ - @Override - public TableDataInfo<PaymentOrdersVo> queryPageList(PaymentOrdersBo bo, PageQuery pageQuery) { - LambdaQueryWrapper<PaymentOrder> lqw = buildQueryWrapper(bo); - Page<PaymentOrdersVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); - if(CollectionUtil.isEmpty(result.getRecords())){ - return TableDataInfo.build(result); - } - // 鑾峰彇鎵�鏈塽serId - List<Long> userIds = result.getRecords().stream() - .map(PaymentOrdersVo::getUserId) - .collect(Collectors.toList()); - // 涓�娆℃�ф煡璇㈡墍鏈塽serName - Map<Long, String> userIdToUserNameMap = getUserNamesByUserIds(userIds); - // 璁剧疆userName - result.getRecords().forEach(paymentOrderVo -> { - paymentOrderVo.setUserName(userIdToUserNameMap.get(paymentOrderVo.getUserId())); - }); - return TableDataInfo.build(result); - } - private Map<Long, String> getUserNamesByUserIds(List<Long> userIds) { - // 瀹炵幇鎵归噺鏌ヨuserName鐨勯�昏緫锛屼緥濡傞�氳繃sysUserMapper鏌ヨsys_user琛� - List<SysUser> sysUsers = sysUserMapper.selectBatchIds(userIds); - return sysUsers.stream() - .collect(Collectors.toMap(SysUser::getUserId, SysUser::getUserName)); - } - - /** - * 鏌ヨ鏀粯璁㈠崟鍒楄〃 - */ - @Override - public List<PaymentOrdersVo> queryList(PaymentOrdersBo bo) { - LambdaQueryWrapper<PaymentOrder> lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - private LambdaQueryWrapper<PaymentOrder> buildQueryWrapper(PaymentOrdersBo bo) { - Map<String, Object> params = bo.getParams(); - LambdaQueryWrapper<PaymentOrder> lqw = Wrappers.lambdaQuery(); - lqw.eq(StringUtils.isNotBlank(bo.getOrderNo()), PaymentOrder::getOrderNo, bo.getOrderNo()); - lqw.like(StringUtils.isNotBlank(bo.getOrderName()), PaymentOrder::getOrderName, bo.getOrderName()); - lqw.eq(bo.getAmount() != null, PaymentOrder::getAmount, bo.getAmount()); - lqw.eq(StringUtils.isNotBlank(bo.getPaymentStatus()), PaymentOrder::getPaymentStatus, bo.getPaymentStatus()); - lqw.eq(StringUtils.isNotBlank(bo.getPaymentMethod()), PaymentOrder::getPaymentMethod, bo.getPaymentMethod()); - lqw.eq(bo.getUserId() != null, PaymentOrder::getUserId, bo.getUserId()); - return lqw; - } - - /** - * 鏂板鏀粯璁㈠崟 - */ - @Override - public Boolean insertByBo(PaymentOrdersBo bo) { - PaymentOrder add = MapstructUtils.convert(bo, PaymentOrder.class); - validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); - } - return flag; - } - - /** - * 淇敼鏀粯璁㈠崟 - */ - @Override - public Boolean updateByBo(PaymentOrdersBo bo) { - PaymentOrder update = MapstructUtils.convert(bo, PaymentOrder.class); - validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; - } - - /** - * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙 - */ - private void validEntityBeforeSave(PaymentOrder entity){ - //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫 - } - - /** - * 鎵归噺鍒犻櫎鏀粯璁㈠崟 - */ - @Override - public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { - if(isValid){ - //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� - } - return baseMapper.deleteBatchIds(ids) > 0; - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/PptServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/PptServiceImpl.java deleted file mode 100644 index a3f17e9..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/PptServiceImpl.java +++ /dev/null @@ -1,136 +0,0 @@ -package org.ruoyi.system.service.impl; - -import cn.dev33.satoken.exception.NotLoginException; -import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONUtil; -import com.alibaba.fastjson.JSONObject; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.math.NumberUtils; -import org.ruoyi.common.core.constant.Constants; -import org.ruoyi.common.core.domain.model.LoginUser; -import org.ruoyi.common.core.service.ConfigService; -import org.ruoyi.common.redis.utils.RedisUtils; -import org.ruoyi.common.satoken.utils.LoginHelper; -import org.ruoyi.system.cofing.OkHttpConfig; -import org.ruoyi.system.domain.vo.ppt.*; -import org.ruoyi.system.service.IPptService; -import org.ruoyi.system.util.HttpUtils; -import org.ruoyi.system.util.WddPptApi; -import org.springframework.stereotype.Service; -import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; - -import javax.swing.filechooser.FileSystemView; -import java.io.File; -import java.time.Duration; - -/** - * AI-PPTService涓氬姟灞傚鐞� - * - * @author NSL - * @since 2024-12-30 - */ -@RequiredArgsConstructor -@Service -@Slf4j -public class PptServiceImpl implements IPptService { - - private final OkHttpConfig okHttpConfig; - private final ConfigService configService; - private final IChatCostService chatCostService; - - @Override - public void syncStreamGeneratePpt(String title) { - // 鍒涘缓 api token (鏈夋晥鏈�2灏忔椂锛屽悓涓�涓� uid 鍒涘缓鏃朵箣鍓嶇殑 token 浼氬湪10绉掑唴澶辨晥) - String apiToken = getApiToken(); - // 鐢熸垚澶х翰 - System.out.println("\n\n========== 姝e湪鐢熸垚澶х翰 =========="); - String outline = WddPptApi.generateOutline(apiToken, title, null, null); - - // 鐢熸垚澶х翰鍐呭 - System.out.println("\n\n========== 姝e湪鐢熸垚澶х翰鍐呭 =========="); - String markdown = WddPptApi.generateContent(apiToken, outline, null, null); - - // 闅忔満涓�涓ā鏉� - System.out.println("\n\n========== 闅忔満閫夋嫨妯℃澘 =========="); - String templateId = WddPptApi.randomOneTemplateId(apiToken); - System.out.println(templateId); - - // 鐢熸垚PPT - System.out.println("\n\n========== 姝e湪鐢熸垚PPT =========="); - JSONObject pptInfo = WddPptApi.generatePptx(apiToken, templateId, markdown, false); - String pptId = pptInfo.getString("id"); - System.out.println("pptId: " + pptId); - System.out.println("ppt涓婚锛�" + pptInfo.getString("subject")); - System.out.println("ppt灏侀潰锛�" + pptInfo.getString("coverUrl") + "?token=" + apiToken); - - // 涓嬭浇PPT鍒版闈� - System.out.println("\n\n========== 姝e湪涓嬭浇PPT =========="); - JSONObject result = WddPptApi.downloadPptx(apiToken, pptId); - String url = result.getString("fileUrl"); - System.out.println("ppt閾炬帴锛�" + url); - String savePath = FileSystemView.getFileSystemView().getHomeDirectory().getAbsolutePath() + File.separator + pptId + ".pptx"; - try { - HttpUtils.download(url, new File(savePath)); - } catch (Exception e) { - - } - System.out.println("ppt涓嬭浇瀹屾垚锛屼繚瀛樿矾寰勶細" + savePath); - } - - @Override - public void selectPptList(PptAllQueryDto pptQueryVo) { - String apiToken = getApiToken(); - // todo 鏃犳潈闄愯闂� - JSONObject jsonObject = WddPptApi.listAllPptx(apiToken, JSONUtil.toJsonStr(pptQueryVo)); - System.out.println(jsonObject); - } - - @Override - public JSONObject getPptTemplates(PptTemplateQueryDto pptQueryVo) { - return WddPptApi.getPptTemplates(getApiToken(), JSONUtil.toJsonStr(pptQueryVo)); - } - - @Override - public SseEmitter generateOutline(PptGenerateOutlineDto generateOutlineDto) { - return WddPptApi.sseGenerateOutline(getApiToken(), generateOutlineDto.getSubject(), generateOutlineDto.getDataUrl(), generateOutlineDto.getPrompt()); - } - - @Override - public SseEmitter generateContent(PptGenerateContentDto generateContentDto) { - return WddPptApi.sseGenerateContent(getApiToken(), generateContentDto.getOutlineMarkdown(), generateContentDto.getDataUrl(), generateContentDto.getPrompt()); - } - - @Override - public JSONObject generatePptx(PptGeneratePptxDto generatePptxDto) { - return WddPptApi.generatePptx(getApiToken(), generatePptxDto.getTemplateId(), generatePptxDto.getOutlineContentMarkdown(), generatePptxDto.isPptxProperty()); - } - - public String getKey(String key) { - return configService.getConfigValue("ppt", key); - } - - @Override - public String getApiToken() { - LoginUser loginUser = null; - try { - loginUser = LoginHelper.getLoginUser(); - } catch (Exception e) { - throw new NotLoginException(NotLoginException.NOT_TOKEN_MESSAGE, NotLoginException.NOT_TOKEN, NotLoginException.NOT_TOKEN); - } - String userId = String.valueOf(loginUser.getUserId()); - // 鍒涘缓 api token (鏈夋晥鏈�2灏忔椂锛屽悓涓�涓� uid 鍒涘缓鏃朵箣鍓嶇殑 token 浼氬湪10绉掑唴澶辨晥) - String apiToken = RedisUtils.getCacheObject(Constants.WDD_TOKEN_KEY + userId); - if (StrUtil.isEmpty(apiToken)) { - apiToken = WddPptApi.createApiToken(getKey("apiKey"), userId, null); - RedisUtils.setCacheObject(Constants.WDD_TOKEN_KEY, apiToken, Duration.ofMinutes(Constants.WDD_TOKEN_EXPIRATION)); - } - return apiToken; - } - - @Override - public void successCallback() { - // 鎵h垂 - chatCostService.taskDeduct("ppt", "AI-PPT", NumberUtils.toDouble(okHttpConfig.getGenerate(), 1.1)); - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SseServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SseServiceImpl.java deleted file mode 100644 index 807650d..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SseServiceImpl.java +++ /dev/null @@ -1,685 +0,0 @@ -package org.ruoyi.system.service.impl; - -import cn.dev33.satoken.stp.StpUtil; -import com.alibaba.fastjson.JSONObject; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.zhipu.oapi.ClientV4; -import com.zhipu.oapi.service.v4.tools.*; -import io.github.ollama4j.OllamaAPI; -import io.github.ollama4j.models.chat.OllamaChatMessage; -import io.github.ollama4j.models.chat.OllamaChatMessageRole; -import io.github.ollama4j.models.chat.OllamaChatRequestBuilder; -import io.github.ollama4j.models.chat.OllamaChatRequestModel; -import io.github.ollama4j.models.generate.OllamaStreamHandler; -import jakarta.servlet.http.HttpServletRequest; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import okhttp3.*; -import org.ruoyi.common.chat.config.ChatConfig; -import org.ruoyi.common.chat.config.LocalCache; -import org.ruoyi.common.chat.domain.request.ChatRequest; -import org.ruoyi.common.chat.domain.request.Dall3Request; -import org.ruoyi.common.chat.entity.Tts.TextToSpeech; -import org.ruoyi.common.chat.entity.chat.*; -import org.ruoyi.common.chat.entity.files.UploadFileResponse; -import org.ruoyi.common.chat.entity.images.Image; -import org.ruoyi.common.chat.entity.images.ImageResponse; -import org.ruoyi.common.chat.entity.images.Item; -import org.ruoyi.common.chat.entity.images.ResponseFormat; -import org.ruoyi.common.chat.entity.whisper.WhisperResponse; -import org.ruoyi.common.chat.openai.OpenAiStreamClient; -import org.ruoyi.common.chat.openai.plugin.PluginAbstract; -import org.ruoyi.common.chat.plugin.CmdPlugin; -import org.ruoyi.common.chat.plugin.CmdReq; -import org.ruoyi.common.chat.plugin.SqlPlugin; -import org.ruoyi.common.chat.plugin.SqlReq; -import org.ruoyi.common.chat.utils.TikTokensUtil; -import org.ruoyi.common.core.domain.model.LoginUser; -import org.ruoyi.common.core.exception.base.BaseException; -import org.ruoyi.common.core.service.ConfigService; -import org.ruoyi.common.core.utils.StringUtils; -import org.ruoyi.common.core.utils.file.FileUtils; -import org.ruoyi.common.core.utils.file.MimeTypeUtils; -import org.ruoyi.common.satoken.utils.LoginHelper; -import org.ruoyi.system.domain.SysModel; -import org.ruoyi.system.domain.request.translation.TranslationRequest; -import org.ruoyi.system.listener.SSEEventSourceListener; -import org.ruoyi.system.service.*; -import org.springframework.core.io.InputStreamResource; -import org.springframework.core.io.Resource; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Service; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.URLEncoder; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicReference; - - -@Service -@Slf4j -@RequiredArgsConstructor -public class SseServiceImpl implements ISseService { - - private OpenAiStreamClient openAiStreamClient; - - ChatConfig chatConfig; - - private final IChatCostService chatService; - - private final IChatMessageService chatMessageService; - - private final ISysModelService sysModelService; - - private final ConfigService configService; - - private final IChatGptsService chatGptsService; - - static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build(); - - private static final String requestIdTemplate = "mycompany-%d"; - - private static final ObjectMapper mapper = new ObjectMapper(); - - @Override - public SseEmitter sseChat(ChatRequest chatRequest, HttpServletRequest request) { - openAiStreamClient = chatConfig.getOpenAiStreamClient(); - SseEmitter sseEmitter = new SseEmitter(0L); - SSEEventSourceListener openAIEventSourceListener = new SSEEventSourceListener(sseEmitter); - // 鑾峰彇瀵硅瘽娑堟伅鍒楄〃 - List<Message> messages = chatRequest.getMessages(); - - try { - String chatString = null; - Object content = messages.get(messages.size() - 1).getContent(); - if (content instanceof List<?> listContent) { - if (!listContent.isEmpty() && listContent.get(0) instanceof Content) { - chatString = ((Content) listContent.get(0)).getText(); - } - } else if (content instanceof String) { - chatString = (String) content; - } - - String configValue = getKey("enabled"); - if (Boolean.parseBoolean(configValue)) { - // 鍒ゆ柇鏂囨湰鏄惁鍚堣 - String type = textReview(chatString); - // 瀹℃牳鐘舵�� 1 浠h〃鍚堟硶 - if (!"1".equals(type) && StringUtils.isNotEmpty(type)) { - throw new BaseException("鏂囨湰涓嶅悎瑙�,璇蜂慨鏀�!"); - } - } - - if (StpUtil.isLogin()) { - LocalCache.CACHE.put("userId", getUserId()); - - ChatMessageBo chatMessageBo = new ChatMessageBo(); - chatMessageBo.setUserId(getUserId()); - chatMessageBo.setModelName(chatRequest.getModel()); - chatMessageBo.setContent(chatString); - - String model = chatRequest.getModel(); - SysModel sysModel = sysModelService.selectModelByName(model); - if (sysModel == null) { - // 濡傛灉妯″瀷涓嶅瓨鍦ㄩ粯璁や娇鐢╰oken鎵h垂鏂瑰紡 - processByToken(chatRequest.getModel(), chatString, chatMessageBo); - } else { - openAiStreamClient = chatConfig.createOpenAiStreamClient(sysModel.getApiHost(), sysModel.getApiKey()); - if (StringUtils.isNotEmpty(chatRequest.getAppId())) { // 璁剧疆搴旂敤鐨勭郴缁熻鑹蹭负鎻忚堪 - ChatGptsVo chatGptsVo = chatGptsService.queryById(Long.valueOf(chatRequest.getAppId())); - Message sysMessage = Message.builder().content(chatGptsVo.getSystemPrompt()).role(Message.Role.SYSTEM).build(); - messages.add(0,sysMessage); - } else { - // 妯″瀷璁剧疆榛樿鎻愮ず璇� - if (StringUtils.isNotEmpty(sysModel.getSystemPrompt())) { - Message sysMessage = Message.builder().content(sysModel.getSystemPrompt()).role(Message.Role.SYSTEM).build(); - messages.add(0,sysMessage); - } - } - // 璁¤垂绫诲瀷: 1 token鎵h垂 2 娆℃暟鎵h垂 - if ("2".equals(sysModel.getModelType())) { - processByModelPrice(sysModel, chatMessageBo); - } else { - processByToken(chatRequest.getModel(), chatString, chatMessageBo); - } - } - } - String zhipuValue = configService.getConfigValue("zhipu", "key"); - // 娣诲姞鑱旂綉淇℃伅 - if(StringUtils.isNotEmpty(zhipuValue)){ - ClientV4 client = new ClientV4.Builder(zhipuValue) - .networkConfig(300, 100, 100, 100, TimeUnit.SECONDS) - .connectionPool(new okhttp3.ConnectionPool(8, 1, TimeUnit.SECONDS)) - .build(); - - SearchChatMessage jsonNodes = new SearchChatMessage(); - jsonNodes.setRole(Message.Role.USER.getName()); - jsonNodes.setContent(chatString); - - String requestId = String.format(requestIdTemplate, System.currentTimeMillis()); - WebSearchParamsRequest chatCompletionRequest = WebSearchParamsRequest.builder() - .model("web-search-pro") - .stream(Boolean.TRUE) - .messages(Collections.singletonList(jsonNodes)) - .requestId(requestId) - .build(); - WebSearchApiResponse webSearchApiResponse = client.webSearchProStreamingInvoke(chatCompletionRequest); - List<ChoiceDelta> choices = new ArrayList<>(); - if (webSearchApiResponse.isSuccess()) { - AtomicBoolean isFirst = new AtomicBoolean(true); - - AtomicReference<WebSearchPro> lastAccumulator = new AtomicReference<>(); - - webSearchApiResponse.getFlowable().map(result -> result) - .doOnNext(accumulator -> { - { - if (isFirst.getAndSet(false)) { - log.info("Response: "); - } - ChoiceDelta delta = accumulator.getChoices().get(0).getDelta(); - if (delta != null && delta.getToolCalls() != null) { - log.info("tool_calls: {}", mapper.writeValueAsString(delta.getToolCalls())); - } - choices.add(delta); - } - }) - .doOnComplete(() -> System.out.println("Stream completed.")) - .doOnError(throwable -> System.err.println("Error: " + throwable)) - .blockingSubscribe(); - - WebSearchPro chatMessageAccumulator = lastAccumulator.get(); - - webSearchApiResponse.setFlowable(null);// 鎵撳嵃鍓嶇疆绌� - webSearchApiResponse.setData(chatMessageAccumulator); - } - - - Message message = Message.builder().role(Message.Role.ASSISTANT).content(choices.get(1).getToolCalls().toString()).build(); - messages.add(message); - } - - if ("openCmd".equals(chatRequest.getModel())) { - sseEmitter.send(cmdPlugin(messages)); - sseEmitter.complete(); - } else if ("sqlPlugin".equals(chatRequest.getModel())) { - sseEmitter.send(sqlPlugin(messages)); - sseEmitter.complete(); - } else { - ChatCompletion completion = ChatCompletion - .builder() - .messages(messages) - .model(chatRequest.getModel()) - .temperature(chatRequest.getTemperature()) - .topP(chatRequest.getTop_p()) - .stream(true) - .build(); - openAiStreamClient.streamChatCompletion(completion, openAIEventSourceListener); - } - } catch (Exception e) { - String message = e.getMessage(); - sendErrorEvent(sseEmitter, message); - return sseEmitter; - } - return sseEmitter; - } - - public String cmdPlugin(List<Message> messages) { - CmdPlugin plugin = new CmdPlugin(CmdReq.class); - // 鎻掍欢鍚嶇О - plugin.setName("鍛戒护琛屽伐鍏�"); - // 鏂规硶鍚嶇О - plugin.setFunction("openCmd"); - // 鏂规硶璇存槑 - plugin.setDescription("鎻愪緵涓�涓懡浠よ鎸囦护,姣斿<璁颁簨鏈�>,鎸囦护浣跨敤涓枃"); - - PluginAbstract.Arg arg = new PluginAbstract.Arg(); - // 鍙傛暟鍚嶇О - arg.setName("cmd"); - // 鍙傛暟璇存槑 - arg.setDescription("鍛戒护琛屾寚浠�"); - // 鍙傛暟绫诲瀷 - arg.setType("string"); - arg.setRequired(true); - plugin.setArgs(Collections.singletonList(arg)); - //鏈夊洓涓噸杞芥柟娉曪紝閮藉彲浠ヤ娇鐢� - ChatCompletionResponse response = openAiStreamClient.chatCompletionWithPlugin(messages,"gpt-4o-mini",plugin); - return response.getChoices().get(0).getMessage().getContent().toString(); - } - - public String sqlPlugin(List<Message> messages) { - SqlPlugin plugin = new SqlPlugin(SqlReq.class); - // 鎻掍欢鍚嶇О - plugin.setName("鏁版嵁搴撴煡璇㈡彃浠�"); - // 鏂规硶鍚嶇О - plugin.setFunction("sqlPlugin"); - // 鏂规硶璇存槑 - plugin.setDescription("鎻愪緵涓�涓敤鎴峰悕绉版煡璇綑棰濅俊鎭�"); - - PluginAbstract.Arg arg = new PluginAbstract.Arg(); - // 鍙傛暟鍚嶇О - arg.setName("username"); - // 鍙傛暟璇存槑 - arg.setDescription("鐢ㄦ埛鍚嶇О"); - // 鍙傛暟绫诲瀷 - arg.setType("string"); - arg.setRequired(true); - plugin.setArgs(Collections.singletonList(arg)); - //鏈夊洓涓噸杞芥柟娉曪紝閮藉彲浠ヤ娇鐢� - ChatCompletionResponse response = openAiStreamClient.chatCompletionWithPlugin(messages,"gpt-4o-mini",plugin); - return response.getChoices().get(0).getMessage().getContent().toString(); - } - - /** - * 鏍规嵁娆℃暟鎵i櫎浣欓 - * - * @param model 妯″瀷淇℃伅 - * @param chatMessageBo 瀵硅瘽淇℃伅 - */ - private void processByModelPrice(SysModel model, ChatMessageBo chatMessageBo) { - double cost = model.getModelPrice(); - chatService.deductUserBalance(getUserId(), cost); - chatMessageBo.setDeductCost(cost); - chatMessageService.insertByBo(chatMessageBo); - } - - /** - * 鏍规嵁token鎵i櫎浣欓 - * - * @param modelName 妯″瀷鍚嶇О - * @param text 娑堟伅鍐呭 - * @param chatMessageBo 娑堟伅璁板綍 - */ - private void processByToken(String modelName, String text, ChatMessageBo chatMessageBo) { - int tokens = TikTokensUtil.tokens(modelName, text); - chatMessageBo.setTotalTokens(tokens); - chatService.deductToken(chatMessageBo); - } - - /** - * 鏂囧瓧杞闊� - */ - @Override - public ResponseEntity<Resource> textToSpeed(TextToSpeech textToSpeech) { - ResponseBody body = openAiStreamClient.textToSpeech(textToSpeech); - if (body != null) { - // 灏哛esponseBody杞崲涓篒nputStreamResource - InputStreamResource resource = new InputStreamResource(body.byteStream()); - - // 鍒涘缓骞惰繑鍥濺esponseEntity - return ResponseEntity.ok() - .contentType(MediaType.parseMediaType("audio/mpeg")) - .body(resource); - } else { - // 濡傛灉ResponseBody涓虹┖锛岃繑鍥�404鐘舵�佺爜 - return ResponseEntity.notFound().build(); - } - } - - - /** - * 璇煶杞枃瀛� - */ - @Override - public WhisperResponse speechToTextTranscriptionsV2(MultipartFile file) { - // 纭繚鏂囦欢涓嶄负绌� - if (file.isEmpty()) { - throw new IllegalStateException("Cannot convert an empty MultipartFile"); - } - if (!FileUtils.isValidFileExtention(file, MimeTypeUtils.AUDIO__EXTENSION)) { - throw new IllegalStateException("File Extention not supported"); - } - // 鍒涘缓涓�涓枃浠跺璞� - File fileA = new File(System.getProperty("java.io.tmpdir") + File.separator + file.getOriginalFilename()); - try { - // 灏� MultipartFile 鐨勫唴瀹瑰啓鍏ユ枃浠� - file.transferTo(fileA); - } catch (IOException e) { - throw new RuntimeException("Failed to convert MultipartFile to File", e); - } - return openAiStreamClient.speechToTextTranscriptions(fileA); - } - - @Override - public String chat(ChatRequest chatRequest, String userId) { - return null; - } - - /** - * dall-e-3缁樼敾鎺ュ彛 - * - * @param request - * @return - */ - @Override - public List<Item> dall3(Dall3Request request) { - openAiStreamClient = chatConfig.getOpenAiStreamClient(); - chatService.checkUserGrade(); - // DALL3 缁樺浘妯″瀷 - Image image = Image.builder() - .responseFormat(ResponseFormat.URL.getName()) - .model(Image.Model.DALL_E_3.getName()) - .prompt(request.getPrompt()) - .n(1) - .quality(request.getQuality()) - .size(request.getSize()) - .style(request.getStyle()) - .build(); - ImageResponse imageResponse = openAiStreamClient.genImages(image); - SysModel sysModel = sysModelService.selectModelByName(request.getModel()); - //chatService.deductUserBalance(getUserId(),sysModelList.get(0).getModelPrice()); - // 淇濆瓨娑堟伅璁板綍 - ChatMessageBo chatMessageBo = new ChatMessageBo(); - chatMessageBo.setUserId(getUserId()); - chatMessageBo.setModelName(Image.Model.DALL_E_3.getName()); - chatMessageBo.setContent(request.getPrompt()); - chatMessageBo.setDeductCost(sysModel.getModelPrice()); - chatMessageBo.setTotalTokens(0); - chatMessageService.insertByBo(chatMessageBo); - return imageResponse.getData(); - } - - @Override - public List<Item> wxDall(String prompt, String userId) { - openAiStreamClient = chatConfig.getOpenAiStreamClient(); - // DALL3 缁樺浘妯″瀷 - Image image = Image.builder() - .responseFormat(ResponseFormat.URL.getName()) - .model(Image.Model.DALL_E_3.getName()) - .prompt(prompt) - .n(1) - .build(); - ImageResponse imageResponse = openAiStreamClient.genImages(image); - SysModel dall3 = sysModelService.selectModelByName("dall3"); - chatService.deductUserBalance(Long.valueOf(userId), 0.3); - // 淇濆瓨娑堟伅璁板綍 - ChatMessageBo chatMessageBo = new ChatMessageBo(); - chatMessageBo.setUserId(getUserId()); - chatMessageBo.setModelName(Image.Model.DALL_E_3.getName()); - chatMessageBo.setContent(prompt); - chatMessageBo.setDeductCost(dall3.getModelPrice()); - chatMessageBo.setTotalTokens(0); - chatMessageService.insertByBo(chatMessageBo); - return imageResponse.getData(); - } - - /** - * 鑾峰彇鐢ㄦ埛Id - * - * @return - */ - public Long getUserId() { - LoginUser loginUser = LoginHelper.getLoginUser(); - if (loginUser == null) { - throw new BaseException("鐢ㄦ埛鏈櫥褰曪紒"); - } - return loginUser.getUserId(); - } - - @Override - public UploadFileResponse upload(MultipartFile file) { - if (file.isEmpty()) { - throw new IllegalStateException("Cannot upload an empty MultipartFile"); - } - if (!FileUtils.isValidFileExtention(file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION)) { - throw new IllegalStateException("File Extention not supported"); - } - openAiStreamClient = chatConfig.getOpenAiStreamClient(); - return openAiStreamClient.uploadFile("fine-tune", convertMultiPartToFile(file)); - } - - private File convertMultiPartToFile(MultipartFile multipartFile) { - File file = null; - try { - // 鑾峰彇鍘熷鏂囦欢鍚� - String originalFileName = multipartFile.getOriginalFilename(); - // 榛樿鎵╁睍鍚� - String extension = ".tmp"; - // 灏濊瘯浠庡師濮嬫枃浠跺悕涓幏鍙栨墿灞曞悕 - if (originalFileName != null && originalFileName.contains(".")) { - extension = originalFileName.substring(originalFileName.lastIndexOf(".")); - } - - // 浣跨敤鍘熷鏂囦欢鐨勬墿灞曞悕鍒涘缓涓存椂鏂囦欢 - Path tempFile = Files.createTempFile(null, extension); - file = tempFile.toFile(); - - // 灏哅ultipartFile鐨勫唴瀹瑰啓鍏ユ枃浠� - try (InputStream inputStream = multipartFile.getInputStream(); - FileOutputStream outputStream = new FileOutputStream(file)) { - int read; - byte[] bytes = new byte[1024]; - while ((read = inputStream.read(bytes)) != -1) { - outputStream.write(bytes, 0, read); - } - } catch (IOException e) { - // 澶勭悊鏂囦欢鍐欏叆寮傚父 - e.printStackTrace(); - } - } catch (IOException e) { - // 澶勭悊涓存椂鏂囦欢鍒涘缓寮傚父 - e.printStackTrace(); - } - return file; - } - - // 鍙戦�丼SE閿欒浜嬩欢鐨勫皝瑁呮柟娉� - private void sendErrorEvent(SseEmitter sseEmitter, String errorMessage) { - SseEmitter.SseEventBuilder event = SseEmitter.event() - .name("error") - .data(errorMessage); - try { - sseEmitter.send(event); - } catch (IOException e) { - log.error("鍙戦�佷簨浠跺け璐�: {}", e.getMessage()); - } - sseEmitter.complete(); - } - - /** - * 鏂囨湰鍐呭瀹℃牳 - * - * @param msg - * @return String - * @Date 2023/5/27 - **/ - public String textReview(String msg) { - String conclusionType = ""; - try { - String text = URLEncoder.encode(msg); - okhttp3.MediaType mediaType = okhttp3.MediaType.parse("application/x-www-form-urlencoded"); - RequestBody body = RequestBody.create(mediaType, "text=" + text); - Request request = new Request.Builder() - .url("https://aip.baidubce.com/rest/2.0/solution/v1/text_censor/v2/user_defined?access_token=" + getAccessToken()) - .method("POST", body) - .addHeader("Content-Type", "application/x-www-form-urlencoded") - .addHeader("Accept", "application/json") - .build(); - Response response = HTTP_CLIENT.newCall(request).execute(); - JSONObject jsonObject = JSONObject.parseObject(response.body().string()); - conclusionType = jsonObject.getString("conclusionType"); - } catch (IOException e) { - log.info("鍙戠敓閿欒{}", e.getMessage()); - } - return conclusionType; - } - - /** - * 浠庣敤鎴风殑AK锛孲K鐢熸垚閴存潈绛惧悕锛圓ccess Token锛� - * - * @return 閴存潈绛惧悕锛圓ccess Token锛� - * @throws IOException IO寮傚父 - */ - public String getAccessToken() throws IOException { - okhttp3.MediaType mediaType = okhttp3.MediaType.parse("application/x-www-form-urlencoded"); - RequestBody body = RequestBody.create(mediaType, "grant_type=client_credentials&client_id=" + getKey("apiKey") - + "&client_secret=" + getKey("secretKey")); - Request request = new Request.Builder() - .url("https://aip.baidubce.com/oauth/2.0/token") - .method("POST", body) - .addHeader("Content-Type", "application/x-www-form-urlencoded") - .build(); - Response response = HTTP_CLIENT.newCall(request).execute(); - return JSONObject.parseObject(response.body().string()).getString("access_token"); - } - - public String getKey(String key) { - return configService.getConfigValue("review", key); - } - - /** - * 鑾峰彇瀹㈡埛绔殑 IP 鍦板潃 - * - * @param request HTTP 璇锋眰瀵硅薄 - * @return 瀹㈡埛绔殑 IP 鍦板潃锛屽鏋滄棤娉曡幏鍙栧垯杩斿洖 "unknown" - */ - public static String getClientIpAddress(HttpServletRequest request) { - String ipAddress = request.getHeader("X-Forwarded-For"); - if (ipAddress != null && !ipAddress.isEmpty() && !"unknown".equalsIgnoreCase(ipAddress)) { - return ipAddress.split(",")[0].trim(); - } - - ipAddress = request.getHeader("Proxy-Client-IP"); - if (ipAddress != null && !ipAddress.isEmpty() && !"unknown".equalsIgnoreCase(ipAddress)) { - return ipAddress; - } - - ipAddress = request.getHeader("WL-Proxy-Client-IP"); - if (ipAddress != null && !ipAddress.isEmpty() && !"unknown".equalsIgnoreCase(ipAddress)) { - return ipAddress; - } - - ipAddress = request.getHeader("HTTP_CLIENT_IP"); - if (ipAddress != null && !ipAddress.isEmpty() && !"unknown".equalsIgnoreCase(ipAddress)) { - return ipAddress; - } - - ipAddress = request.getHeader("HTTP_X_FORWARDED_FOR"); - if (ipAddress != null && !ipAddress.isEmpty() && !"unknown".equalsIgnoreCase(ipAddress)) { - return ipAddress; - } - - ipAddress = request.getRemoteAddr(); - if (ipAddress != null && !ipAddress.isEmpty() && !"unknown".equalsIgnoreCase(ipAddress)) { - return ipAddress; - } - - return "unknown"; - } - - - @Override - public String translation(TranslationRequest translationRequest) { - // 缈昏瘧妯″瀷鍥哄畾涓篻pt-4o-mini - translationRequest.setModel("gpt-4o-mini"); - ChatMessageBo chatMessageBo = new ChatMessageBo(); - chatMessageBo.setUserId(getUserId()); - chatMessageBo.setModelName(translationRequest.getModel()); - chatMessageBo.setContent(translationRequest.getPrompt()); - chatMessageBo.setDeductCost(0.01); - chatMessageBo.setTotalTokens(0); - chatMessageService.insertByBo(chatMessageBo); - openAiStreamClient = chatConfig.getOpenAiStreamClient(); - List<Message> messageList = new ArrayList<>(); - Message sysMessage = Message.builder().role(Message.Role.SYSTEM).content("浣犳槸涓�浣嶇簿閫氬悇鍥借瑷�鐨勭炕璇戝ぇ甯圽n" + - "\n" + - "璇峰皢鐢ㄦ埛杈撳叆璇嶈缈昏瘧鎴恵" + translationRequest.getTargetLanguage() + "}\n" + - "\n" + - "==绀轰緥杈撳嚭==\n" + - "**鍘熸枃** : <杩欓噷鏄剧ず瑕佺炕璇戠殑鍘熸枃淇℃伅>\n" + - "**缈昏瘧** : <杩欓噷鏄剧ず缈昏瘧鎴愯嫳璇殑缁撴灉>\n" + - "==绀轰緥缁撴潫==\n" + - "\n" + - "娉ㄦ剰锛氳涓ユ牸鎸夌ず渚嬭繘琛岃緭鍑猴紝杩斿洖markdown鏍煎紡").build(); - messageList.add(sysMessage); - Message message = Message.builder().role(Message.Role.USER).content(translationRequest.getPrompt()).build(); - messageList.add(message); - ChatCompletionResponse chatCompletionResponse = null; - try { - ChatCompletion chatCompletion = ChatCompletion - .builder() - .messages(messageList) - .model(translationRequest.getModel()) - .stream(false) - .build(); - chatCompletionResponse = openAiStreamClient.chatCompletion(chatCompletion); - }catch (Exception e) { - log.error(e.getMessage()); - } - - return chatCompletionResponse.getChoices().get(0).getMessage().getContent().toString(); - } - - @Override - public SseEmitter ollamaChat(ChatRequest chatRequest) { - String[] parts = chatRequest.getModel().split("ollama-"); - SysModel sysModel = sysModelService.selectModelByName(chatRequest.getModel()); - final SseEmitter emitter = new SseEmitter(); - String host = sysModel.getApiHost(); - List<Message> msgList = chatRequest.getMessages(); - List<OllamaChatMessage> messages = new ArrayList<>(); - - for (Message message : msgList) { - OllamaChatMessage ollamaChatMessage = new OllamaChatMessage(); - ollamaChatMessage.setRole(OllamaChatMessageRole.USER); - ollamaChatMessage.setContent(message.getContent().toString()); - messages.add(ollamaChatMessage); - } - OllamaAPI api = new OllamaAPI(host); - api.setRequestTimeoutSeconds(100); - OllamaChatRequestBuilder builder = OllamaChatRequestBuilder.getInstance(parts[1]); - - OllamaChatRequestModel requestModel = builder - .withMessages(messages) - .build(); - - // 寮傛鎵ц OllAma API 璋冪敤 - CompletableFuture.runAsync(() -> { - try { - StringBuilder response = new StringBuilder(); - OllamaStreamHandler streamHandler = (s) -> { - String substr = s.substring(response.length()); - response.append(substr); - System.out.println(substr); - try { - emitter.send(substr); - } catch (IOException e) { - sendErrorEvent(emitter, e.getMessage()); - } - }; - api.chat(requestModel, streamHandler); - emitter.complete(); - } catch (Exception e) { - sendErrorEvent(emitter, e.getMessage()); - } - }); - return emitter; - } - - @Override - public String wxCpChat(String prompt) { - List<Message> messageList = new ArrayList<>(); - Message message = Message.builder().role(Message.Role.USER).content(prompt).build(); - messageList.add(message); - ChatCompletion chatCompletion = ChatCompletion - .builder() - .messages(messageList) - .model("gpt-4o-mini") - .stream(false) - .build(); - ChatCompletionResponse chatCompletionResponse = openAiStreamClient.chatCompletion(chatCompletion); - return chatCompletionResponse.getChoices().get(0).getMessage().getContent().toString(); - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysModelServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysModelServiceImpl.java deleted file mode 100644 index d48ac6d..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysModelServiceImpl.java +++ /dev/null @@ -1,118 +0,0 @@ -package org.ruoyi.system.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import org.ruoyi.common.core.utils.MapstructUtils; -import org.ruoyi.common.core.utils.StringUtils; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.system.domain.SysModel; -import org.ruoyi.system.domain.bo.SysModelBo; -import org.ruoyi.system.domain.vo.SysModelVo; -import org.ruoyi.system.mapper.SysModelMapper; -import org.ruoyi.system.service.ISysModelService; -import org.springframework.stereotype.Service; - -import java.util.Collection; -import java.util.List; - -/** - * 绯荤粺妯″瀷Service涓氬姟灞傚鐞� - * - * @author Lion Li - * @date 2024-04-04 - */ -@RequiredArgsConstructor -@Service -public class SysModelServiceImpl implements ISysModelService { - - private final SysModelMapper baseMapper; - - /** - * 鏌ヨ绯荤粺妯″瀷 - */ - @Override - public SysModelVo queryById(Long id){ - return baseMapper.selectVoById(id); - } - - /** - * 鏌ヨ绯荤粺妯″瀷鍒楄〃 - */ - @Override - public TableDataInfo<SysModelVo> queryPageList(SysModelBo bo, PageQuery pageQuery) { - LambdaQueryWrapper<SysModel> lqw = buildQueryWrapper(bo); - Page<SysModelVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 鏌ヨ绯荤粺妯″瀷鍒楄〃 - */ - @Override - public List<SysModelVo> queryList(SysModelBo bo) { - LambdaQueryWrapper<SysModel> lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - private LambdaQueryWrapper<SysModel> buildQueryWrapper(SysModelBo bo) { - LambdaQueryWrapper<SysModel> lqw = Wrappers.lambdaQuery(); - lqw.like(StringUtils.isNotBlank(bo.getModelName()), SysModel::getModelName, bo.getModelName()); - lqw.like(StringUtils.isNotBlank(bo.getModelShow()), SysModel::getModelShow, bo.getModelShow()); - lqw.eq(StringUtils.isNotBlank(bo.getModelDescribe()), SysModel::getModelDescribe, bo.getModelDescribe()); - lqw.eq(StringUtils.isNotBlank(bo.getModelType()), SysModel::getModelType, bo.getModelType()); - lqw.eq(StringUtils.isNotBlank(bo.getCategory()), SysModel::getCategory, bo.getCategory()); - return lqw; - } - - /** - * 鏂板绯荤粺妯″瀷 - */ - @Override - public Boolean insertByBo(SysModelBo bo) { - SysModel add = MapstructUtils.convert(bo, SysModel.class); - validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); - } - return flag; - } - - /** - * 淇敼绯荤粺妯″瀷 - */ - @Override - public Boolean updateByBo(SysModelBo bo) { - SysModel update = MapstructUtils.convert(bo, SysModel.class); - validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; - } - - /** - * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙 - */ - private void validEntityBeforeSave(SysModel entity){ - //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫 - } - - /** - * 鎵归噺鍒犻櫎绯荤粺妯″瀷 - */ - @Override - public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { - if(isValid){ - //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� - } - return baseMapper.deleteBatchIds(ids) > 0; - } - - @Override - public SysModel selectModelByName(String modelName) { - return baseMapper.selectOne( - new LambdaQueryWrapper<SysModel>().eq(SysModel::getModelName, modelName) - ); - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysPackagePlanServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysPackagePlanServiceImpl.java deleted file mode 100644 index 06dc539..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysPackagePlanServiceImpl.java +++ /dev/null @@ -1,112 +0,0 @@ -package org.ruoyi.system.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import org.ruoyi.common.core.utils.MapstructUtils; -import org.ruoyi.common.core.utils.StringUtils; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.system.domain.SysPackagePlan; -import org.ruoyi.system.domain.bo.SysPackagePlanBo; -import org.ruoyi.system.domain.vo.SysPackagePlanVo; -import org.ruoyi.system.mapper.SysPackagePlanMapper; -import org.ruoyi.system.service.ISysPackagePlanService; -import org.springframework.stereotype.Service; - -import java.util.Collection; -import java.util.List; -import java.util.Map; - -/** - * 濂楅绠$悊Service涓氬姟灞傚鐞� - * - * @author Lion Li - * @date 2024-05-05 - */ -@RequiredArgsConstructor -@Service -public class SysPackagePlanServiceImpl implements ISysPackagePlanService { - - private final SysPackagePlanMapper baseMapper; - - /** - * 鏌ヨ濂楅绠$悊 - */ - @Override - public SysPackagePlanVo queryById(Long id){ - return baseMapper.selectVoById(id); - } - - /** - * 鏌ヨ濂楅绠$悊鍒楄〃 - */ - @Override - public TableDataInfo<SysPackagePlanVo> queryPageList(SysPackagePlanBo bo, PageQuery pageQuery) { - LambdaQueryWrapper<SysPackagePlan> lqw = buildQueryWrapper(bo); - Page<SysPackagePlanVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 鏌ヨ濂楅绠$悊鍒楄〃 - */ - @Override - public List<SysPackagePlanVo> queryList(SysPackagePlanBo bo) { - LambdaQueryWrapper<SysPackagePlan> lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - private LambdaQueryWrapper<SysPackagePlan> buildQueryWrapper(SysPackagePlanBo bo) { - Map<String, Object> params = bo.getParams(); - LambdaQueryWrapper<SysPackagePlan> lqw = Wrappers.lambdaQuery(); - lqw.like(StringUtils.isNotBlank(bo.getName()), SysPackagePlan::getName, bo.getName()); - lqw.eq(bo.getPrice() != null, SysPackagePlan::getPrice, bo.getPrice()); - lqw.eq(bo.getDuration() != null, SysPackagePlan::getDuration, bo.getDuration()); - lqw.eq(StringUtils.isNotBlank(bo.getPlanDetail()), SysPackagePlan::getPlanDetail, bo.getPlanDetail()); - return lqw; - } - - /** - * 鏂板濂楅绠$悊 - */ - @Override - public Boolean insertByBo(SysPackagePlanBo bo) { - SysPackagePlan add = MapstructUtils.convert(bo, SysPackagePlan.class); - validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); - } - return flag; - } - - /** - * 淇敼濂楅绠$悊 - */ - @Override - public Boolean updateByBo(SysPackagePlanBo bo) { - SysPackagePlan update = MapstructUtils.convert(bo, SysPackagePlan.class); - validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; - } - - /** - * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙 - */ - private void validEntityBeforeSave(SysPackagePlan entity){ - //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫 - } - - /** - * 鎵归噺鍒犻櫎濂楅绠$悊 - */ - @Override - public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { - if(isValid){ - //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� - } - return baseMapper.deleteBatchIds(ids) > 0; - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysUserGroupServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysUserGroupServiceImpl.java deleted file mode 100644 index 7da71d5..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysUserGroupServiceImpl.java +++ /dev/null @@ -1,110 +0,0 @@ -package org.ruoyi.system.service.impl; - -import org.ruoyi.common.core.utils.MapstructUtils; -import org.ruoyi.common.core.utils.StringUtils; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.ruoyi.system.domain.bo.SysUserGroupBo; -import org.ruoyi.system.domain.vo.SysUserGroupVo; -import org.ruoyi.system.domain.SysUserGroup; -import org.ruoyi.system.mapper.SysUserGroupMapper; -import org.ruoyi.system.service.ISysUserGroupService; - -import java.util.List; -import java.util.Map; -import java.util.Collection; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice涓氬姟灞傚鐞� - * - * @author Lion Li - * @date 2024-08-03 - */ -@RequiredArgsConstructor -@Service -public class SysUserGroupServiceImpl implements ISysUserGroupService { - - private final SysUserGroupMapper baseMapper; - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @Override - public SysUserGroupVo queryById(Long id){ - return baseMapper.selectVoById(id); - } - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - @Override - public TableDataInfo<SysUserGroupVo> queryPageList(SysUserGroupBo bo, PageQuery pageQuery) { - LambdaQueryWrapper<SysUserGroup> lqw = buildQueryWrapper(bo); - Page<SysUserGroupVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - @Override - public List<SysUserGroupVo> queryList(SysUserGroupBo bo) { - LambdaQueryWrapper<SysUserGroup> lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - private LambdaQueryWrapper<SysUserGroup> buildQueryWrapper(SysUserGroupBo bo) { - Map<String, Object> params = bo.getParams(); - LambdaQueryWrapper<SysUserGroup> lqw = Wrappers.lambdaQuery(); - lqw.like(StringUtils.isNotBlank(bo.getGroupName()), SysUserGroup::getGroupName, bo.getGroupName()); - lqw.eq(StringUtils.isNotBlank(bo.getUpdateIp()), SysUserGroup::getUpdateIp, bo.getUpdateIp()); - return lqw; - } - - /** - * 鏂板銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @Override - public Boolean insertByBo(SysUserGroupBo bo) { - SysUserGroup add = MapstructUtils.convert(bo, SysUserGroup.class); - validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); - } - return flag; - } - - /** - * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @Override - public Boolean updateByBo(SysUserGroupBo bo) { - SysUserGroup update = MapstructUtils.convert(bo, SysUserGroup.class); - validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; - } - - /** - * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙 - */ - private void validEntityBeforeSave(SysUserGroup entity){ - //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫 - } - - /** - * 鎵归噺鍒犻櫎銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @Override - public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { - if(isValid){ - //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� - } - return baseMapper.deleteBatchIds(ids) > 0; - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysUserModelServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysUserModelServiceImpl.java deleted file mode 100644 index 1a401c7..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/SysUserModelServiceImpl.java +++ /dev/null @@ -1,109 +0,0 @@ -package org.ruoyi.system.service.impl; - -import org.ruoyi.common.core.utils.MapstructUtils; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.ruoyi.system.domain.bo.SysUserModelBo; -import org.ruoyi.system.domain.vo.SysUserModelVo; -import org.ruoyi.system.domain.SysUserModel; -import org.ruoyi.system.mapper.SysUserModelMapper; -import org.ruoyi.system.service.ISysUserModelService; - -import java.util.List; -import java.util.Map; -import java.util.Collection; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice涓氬姟灞傚鐞� - * - * @author Lion Li - * @date 2024-08-03 - */ -@RequiredArgsConstructor -@Service -public class SysUserModelServiceImpl implements ISysUserModelService { - - private final SysUserModelMapper baseMapper; - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @Override - public SysUserModelVo queryById(Long id){ - return baseMapper.selectVoById(id); - } - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - @Override - public TableDataInfo<SysUserModelVo> queryPageList(SysUserModelBo bo, PageQuery pageQuery) { - LambdaQueryWrapper<SysUserModel> lqw = buildQueryWrapper(bo); - Page<SysUserModelVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - @Override - public List<SysUserModelVo> queryList(SysUserModelBo bo) { - LambdaQueryWrapper<SysUserModel> lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - private LambdaQueryWrapper<SysUserModel> buildQueryWrapper(SysUserModelBo bo) { - Map<String, Object> params = bo.getParams(); - LambdaQueryWrapper<SysUserModel> lqw = Wrappers.lambdaQuery(); - lqw.eq(bo.getMid() != null, SysUserModel::getMid, bo.getMid()); - lqw.eq(bo.getGid() != null, SysUserModel::getGid, bo.getGid()); - return lqw; - } - - /** - * 鏂板銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @Override - public Boolean insertByBo(SysUserModelBo bo) { - SysUserModel add = MapstructUtils.convert(bo, SysUserModel.class); - validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); - } - return flag; - } - - /** - * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @Override - public Boolean updateByBo(SysUserModelBo bo) { - SysUserModel update = MapstructUtils.convert(bo, SysUserModel.class); - validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; - } - - /** - * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙 - */ - private void validEntityBeforeSave(SysUserModel entity){ - //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫 - } - - /** - * 鎵归噺鍒犻櫎銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @Override - public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { - if(isValid){ - //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� - } - return baseMapper.deleteBatchIds(ids) > 0; - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/WeixinUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/WeixinUserServiceImpl.java deleted file mode 100644 index 9c84602..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/WeixinUserServiceImpl.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.ruoyi.system.service.impl; - -import org.ruoyi.system.domain.model.ReceiveMessage; -import org.ruoyi.system.service.WeixinUserService; -import org.ruoyi.system.util.WeixinMsgUtil; -import org.ruoyi.system.util.WeixinQrCodeCacheUtil; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.codec.digest.DigestUtils; -import org.springframework.stereotype.Service; - -import java.util.Arrays; - - -@Slf4j -@Service -public class WeixinUserServiceImpl implements WeixinUserService { - - private String token = "panda"; - - @Override - public void checkSignature(String signature, String timestamp, String nonce) { - String[] arr = new String[] {token, timestamp, nonce}; - Arrays.sort(arr); - StringBuilder content = new StringBuilder(); - for (String str : arr) { - content.append(str); - } - String tmpStr = DigestUtils.sha1Hex(content.toString()); - if (tmpStr.equals(signature)) { - log.info("check success"); - return; - } - log.error("check fail"); - throw new RuntimeException("check fail"); - } - - @Override - public String handleWeixinMsg(String requestBody) { - ReceiveMessage receiveMessage = WeixinMsgUtil.msgToReceiveMessage(requestBody); - // 鎵爜鐧诲綍 - if (WeixinMsgUtil.isScanQrCode(receiveMessage)) { - return handleScanLogin(receiveMessage); - } - // 鍏虫敞 - if (WeixinMsgUtil.isEventAndSubscribe(receiveMessage)) { - return receiveMessage.getReplyTextMsg("娆㈣繋鍏虫敞銆愮唺鐚姙鍏姪鎵嬨��,璇疯闂甴ttps://web.pandarobot.chat/浣跨敤AI鍔╂墜"); - } - return receiveMessage.getReplyTextMsg("鏀跺埌锛堣嚜鍔ㄥ洖澶嶏級"); - } - - /** - * 澶勭悊鎵爜鐧诲綍 - * - * @param receiveMessage - * @return - */ - private String handleScanLogin(ReceiveMessage receiveMessage) { - String qrCodeTicket = WeixinMsgUtil.getQrCodeTicket(receiveMessage); - if (WeixinQrCodeCacheUtil.get(qrCodeTicket) == null) { - String openId = receiveMessage.getFromUserName(); - WeixinQrCodeCacheUtil.put(qrCodeTicket, openId); - } - return receiveMessage.getReplyTextMsg("浣犲凡鎴愬姛鐧诲綍锛�"); - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/WxRobConfigServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/WxRobConfigServiceImpl.java deleted file mode 100644 index 18887e6..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/WxRobConfigServiceImpl.java +++ /dev/null @@ -1,138 +0,0 @@ -package org.ruoyi.system.service.impl; - -import cn.hutool.core.collection.CollectionUtil; -import org.ruoyi.common.core.utils.MapstructUtils; -import org.ruoyi.common.core.utils.StringUtils; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import org.ruoyi.system.domain.SysUser; -import org.ruoyi.system.mapper.SysUserMapper; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.ruoyi.system.domain.bo.WxRobConfigBo; -import org.ruoyi.system.domain.vo.WxRobConfigVo; -import org.ruoyi.system.domain.WxRobConfig; -import org.ruoyi.system.mapper.WxRobConfigMapper; -import org.ruoyi.system.service.IWxRobConfigService; - -import java.util.List; -import java.util.Map; -import java.util.Collection; -import java.util.stream.Collectors; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice涓氬姟灞傚鐞� - * - * @author Lion Li - * @date 2024-05-01 - */ -@RequiredArgsConstructor -@Service -public class WxRobConfigServiceImpl implements IWxRobConfigService { - - private final WxRobConfigMapper baseMapper; - - private final SysUserMapper sysUserMapper; - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @Override - public WxRobConfigVo queryById(Long id){ - return baseMapper.selectVoById(id); - } - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - @Override - public TableDataInfo<WxRobConfigVo> queryPageList(WxRobConfigBo bo, PageQuery pageQuery) { - LambdaQueryWrapper<WxRobConfig> lqw = buildQueryWrapper(bo); - Page<WxRobConfigVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); - if(CollectionUtil.isEmpty(result.getRecords())){ - return TableDataInfo.build(result); - } - // 鑾峰彇鎵�鏈塽serId - List<Long> userIds = result.getRecords().stream() - .map(WxRobConfigVo::getUserId) - .collect(Collectors.toList()); - // 涓�娆℃�ф煡璇㈡墍鏈塽serName - Map<Long, String> userIdToUserNameMap = getUserNamesByUserIds(userIds); - // 璁剧疆userName - result.getRecords().forEach(wxRobConfigVo -> { - wxRobConfigVo.setUserName(userIdToUserNameMap.get(wxRobConfigVo.getUserId())); - }); - return TableDataInfo.build(result); - } - - private Map<Long, String> getUserNamesByUserIds(List<Long> userIds) { - // 瀹炵幇鎵归噺鏌ヨuserName鐨勯�昏緫锛屼緥濡傞�氳繃sysUserMapper鏌ヨsys_user琛� - List<SysUser> sysUsers = sysUserMapper.selectBatchIds(userIds); - return sysUsers.stream() - .collect(Collectors.toMap(SysUser::getUserId, SysUser::getUserName)); - } - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - @Override - public List<WxRobConfigVo> queryList(WxRobConfigBo bo) { - LambdaQueryWrapper<WxRobConfig> lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - private LambdaQueryWrapper<WxRobConfig> buildQueryWrapper(WxRobConfigBo bo) { - Map<String, Object> params = bo.getParams(); - LambdaQueryWrapper<WxRobConfig> lqw = Wrappers.lambdaQuery(); - lqw.eq(bo.getUserId() != null, WxRobConfig::getUserId, bo.getUserId()); - lqw.eq(StringUtils.isNotBlank(bo.getUniqueKey()), WxRobConfig::getUniqueKey, bo.getUniqueKey()); - lqw.eq(bo.getDefaultFriend() != null, WxRobConfig::getDefaultFriend, bo.getDefaultFriend()); - lqw.eq(bo.getDefaultGroup() != null, WxRobConfig::getDefaultGroup, bo.getDefaultGroup()); - lqw.eq(bo.getEnable() != null, WxRobConfig::getEnable, bo.getEnable()); - return lqw; - } - - /** - * 鏂板銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @Override - public Boolean insertByBo(WxRobConfigBo bo) { - WxRobConfig add = MapstructUtils.convert(bo, WxRobConfig.class); - validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); - } - return flag; - } - - /** - * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @Override - public Boolean updateByBo(WxRobConfigBo bo) { - WxRobConfig update = MapstructUtils.convert(bo, WxRobConfig.class); - validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; - } - - /** - * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙 - */ - private void validEntityBeforeSave(WxRobConfig entity){ - //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫 - } - - /** - * 鎵归噺鍒犻櫎銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @Override - public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { - if(isValid){ - //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� - } - return baseMapper.deleteBatchIds(ids) > 0; - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/WxRobKeywordServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/WxRobKeywordServiceImpl.java deleted file mode 100644 index 461ca1a..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/WxRobKeywordServiceImpl.java +++ /dev/null @@ -1,115 +0,0 @@ -package org.ruoyi.system.service.impl; - -import org.ruoyi.common.core.utils.MapstructUtils; -import org.ruoyi.common.core.utils.StringUtils; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.ruoyi.system.domain.bo.WxRobKeywordBo; -import org.ruoyi.system.domain.vo.WxRobKeywordVo; -import org.ruoyi.system.domain.WxRobKeyword; -import org.ruoyi.system.mapper.WxRobKeywordMapper; -import org.ruoyi.system.service.IWxRobKeywordService; - -import java.util.List; -import java.util.Map; -import java.util.Collection; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice涓氬姟灞傚鐞� - * - * @author Lion Li - * @date 2024-05-01 - */ -@RequiredArgsConstructor -@Service -public class WxRobKeywordServiceImpl implements IWxRobKeywordService { - - private final WxRobKeywordMapper baseMapper; - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @Override - public WxRobKeywordVo queryById(Long id){ - return baseMapper.selectVoById(id); - } - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - @Override - public TableDataInfo<WxRobKeywordVo> queryPageList(WxRobKeywordBo bo, PageQuery pageQuery) { - LambdaQueryWrapper<WxRobKeyword> lqw = buildQueryWrapper(bo); - Page<WxRobKeywordVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - @Override - public List<WxRobKeywordVo> queryList(WxRobKeywordBo bo) { - LambdaQueryWrapper<WxRobKeyword> lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - private LambdaQueryWrapper<WxRobKeyword> buildQueryWrapper(WxRobKeywordBo bo) { - Map<String, Object> params = bo.getParams(); - LambdaQueryWrapper<WxRobKeyword> lqw = Wrappers.lambdaQuery(); - lqw.eq(StringUtils.isNotBlank(bo.getUniqueKey()), WxRobKeyword::getUniqueKey, bo.getUniqueKey()); - lqw.eq(StringUtils.isNotBlank(bo.getKeyData()), WxRobKeyword::getKeyData, bo.getKeyData()); - lqw.eq(StringUtils.isNotBlank(bo.getValueData()), WxRobKeyword::getValueData, bo.getValueData()); - lqw.eq(StringUtils.isNotBlank(bo.getTypeData()), WxRobKeyword::getTypeData, bo.getTypeData()); - lqw.like(StringUtils.isNotBlank(bo.getNickName()), WxRobKeyword::getNickName, bo.getNickName()); - lqw.eq(bo.getToGroup() != null, WxRobKeyword::getToGroup, bo.getToGroup()); - lqw.eq(bo.getEnable() != null, WxRobKeyword::getEnable, bo.getEnable()); - return lqw; - } - - /** - * 鏂板銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @Override - public Boolean insertByBo(WxRobKeywordBo bo) { - WxRobKeyword add = MapstructUtils.convert(bo, WxRobKeyword.class); - validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); - } - return flag; - } - - /** - * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @Override - public Boolean updateByBo(WxRobKeywordBo bo) { - WxRobKeyword update = MapstructUtils.convert(bo, WxRobKeyword.class); - validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; - } - - /** - * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙 - */ - private void validEntityBeforeSave(WxRobKeyword entity){ - //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫 - } - - /** - * 鎵归噺鍒犻櫎銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @Override - public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { - if(isValid){ - //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� - } - return baseMapper.deleteBatchIds(ids) > 0; - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/WxRobRelationServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/WxRobRelationServiceImpl.java deleted file mode 100644 index bfb2cb0..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/service/impl/WxRobRelationServiceImpl.java +++ /dev/null @@ -1,114 +0,0 @@ -package org.ruoyi.system.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.RequiredArgsConstructor; -import org.ruoyi.common.core.utils.MapstructUtils; -import org.ruoyi.common.core.utils.StringUtils; -import org.ruoyi.common.mybatis.core.page.PageQuery; -import org.ruoyi.common.mybatis.core.page.TableDataInfo; -import org.ruoyi.system.domain.WxRobRelation; -import org.ruoyi.system.domain.bo.WxRobRelationBo; -import org.ruoyi.system.domain.vo.WxRobRelationVo; -import org.ruoyi.system.mapper.WxRobRelationMapper; -import org.ruoyi.system.service.IWxRobRelationService; -import org.springframework.stereotype.Service; - -import java.util.Collection; -import java.util.List; -import java.util.Map; - -/** - * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice涓氬姟灞傚鐞� - * - * @author Lion Li - * @date 2024-05-01 - */ -@RequiredArgsConstructor -@Service -public class WxRobRelationServiceImpl implements IWxRobRelationService { - - private final WxRobRelationMapper baseMapper; - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @Override - public WxRobRelationVo queryById(Long id){ - return baseMapper.selectVoById(id); - } - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - @Override - public TableDataInfo<WxRobRelationVo> queryPageList(WxRobRelationBo bo, PageQuery pageQuery) { - LambdaQueryWrapper<WxRobRelation> lqw = buildQueryWrapper(bo); - Page<WxRobRelationVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛� - */ - @Override - public List<WxRobRelationVo> queryList(WxRobRelationBo bo) { - LambdaQueryWrapper<WxRobRelation> lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - private LambdaQueryWrapper<WxRobRelation> buildQueryWrapper(WxRobRelationBo bo) { - Map<String, Object> params = bo.getParams(); - LambdaQueryWrapper<WxRobRelation> lqw = Wrappers.lambdaQuery(); - lqw.eq(StringUtils.isNotBlank(bo.getOutKey()), WxRobRelation::getOutKey, bo.getOutKey()); - lqw.eq(StringUtils.isNotBlank(bo.getUniqueKey()), WxRobRelation::getUniqueKey, bo.getUniqueKey()); - lqw.like(StringUtils.isNotBlank(bo.getNickName()), WxRobRelation::getNickName, bo.getNickName()); - lqw.eq(bo.getToGroup() != null, WxRobRelation::getToGroup, bo.getToGroup()); - lqw.eq(bo.getEnable() != null, WxRobRelation::getEnable, bo.getEnable()); - lqw.eq(StringUtils.isNotBlank(bo.getWhiteList()), WxRobRelation::getWhiteList, bo.getWhiteList()); - return lqw; - } - - /** - * 鏂板銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @Override - public Boolean insertByBo(WxRobRelationBo bo) { - WxRobRelation add = MapstructUtils.convert(bo, WxRobRelation.class); - validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); - } - return flag; - } - - /** - * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @Override - public Boolean updateByBo(WxRobRelationBo bo) { - WxRobRelation update = MapstructUtils.convert(bo, WxRobRelation.class); - validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; - } - - /** - * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙 - */ - private void validEntityBeforeSave(WxRobRelation entity){ - //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫 - } - - /** - * 鎵归噺鍒犻櫎銆愯濉啓鍔熻兘鍚嶇О銆� - */ - @Override - public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { - if(isValid){ - //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠� - } - return baseMapper.deleteBatchIds(ids) > 0; - } -} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/WeixinApiUtil.java b/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/WeixinApiUtil.java deleted file mode 100644 index 49d2b18..0000000 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/ruoyi/system/util/WeixinApiUtil.java +++ /dev/null @@ -1,81 +0,0 @@ -package org.ruoyi.system.util; - -import cn.hutool.http.HttpUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import org.ruoyi.common.core.service.ConfigService; -import org.ruoyi.system.domain.model.WeixinQrCode; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import java.net.URI; -import java.time.LocalDateTime; - -/** - * @author https://www.wdbyte.com - */ -@Slf4j -@Component -@RequiredArgsConstructor -public class WeixinApiUtil { - - private final ConfigService configService; - - private static String QR_CODE_URL_PREFIX = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket="; - - private static String ACCESS_TOKEN = null; - private static LocalDateTime ACCESS_TOKEN_EXPIRE_TIME = null; - /** - * 浜岀淮鐮� Ticket 杩囨湡鏃堕棿 - */ - private static int QR_CODE_TICKET_TIMEOUT = 10 * 60; - - /** - * 鑾峰彇 access token - * - * @return - */ - public synchronized String getAccessToken() { - if (ACCESS_TOKEN != null && ACCESS_TOKEN_EXPIRE_TIME.isAfter(LocalDateTime.now())) { - return ACCESS_TOKEN; - } - String api = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + getKey("appid") + "&secret=" - + getKey("secret"); - String result = HttpUtil.get(api); - JSONObject jsonObject = JSON.parseObject(result); - ACCESS_TOKEN = jsonObject.getString("access_token"); - ACCESS_TOKEN_EXPIRE_TIME = LocalDateTime.now().plusSeconds(jsonObject.getLong("expires_in") - 10); - return ACCESS_TOKEN; - } - - /** - * 鑾峰彇浜岀淮鐮� Ticket - * - * https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Generating_a_Parametric_QR_Code.html - * - * @return - */ - public WeixinQrCode getQrCode() { - String api = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=" + getAccessToken(); - String jsonBody = String.format("{\n" - + " \"expire_seconds\": %d,\n" - + " \"action_name\": \"QR_STR_SCENE\",\n" - + " \"action_info\": {\n" - + " \"scene\": {\n" - + " \"scene_str\": \"%s\"\n" - + " }\n" - + " }\n" - + "}", QR_CODE_TICKET_TIMEOUT, KeyUtils.uuid32()); - String result = HttpUtil.post(api, jsonBody); - log.info("get qr code params:{}", jsonBody); - log.info("get qr code result:{}", result); - WeixinQrCode weixinQrCode = JSON.parseObject(result, WeixinQrCode.class); - weixinQrCode.setQrCodeUrl(QR_CODE_URL_PREFIX + URI.create(weixinQrCode.getTicket()).toASCIIString()); - return weixinQrCode; - } - - public String getKey(String key) { - return configService.getConfigValue("weixin", key); - } -} diff --git a/ruoyi-modules/ruoyi-weixin/pom.xml b/ruoyi-modules/ruoyi-weixin/pom.xml deleted file mode 100644 index 3e067c0..0000000 --- a/ruoyi-modules/ruoyi-weixin/pom.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.ruoyi</groupId> - <artifactId>ruoyi-ai</artifactId> - <version>1.0.0</version> - <relativePath>../../pom.xml</relativePath> - </parent> - - <artifactId>ruoyi-weixin</artifactId> - - <properties> - <maven.compiler.source>17</maven.compiler.source> - <maven.compiler.target>17</maven.compiler.target> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - </properties> - -</project> diff --git a/script/docker/localModels/Dockerfile b/script/docker/localModels/Dockerfile deleted file mode 100644 index 0f1e606..0000000 --- a/script/docker/localModels/Dockerfile +++ /dev/null @@ -1,26 +0,0 @@ -# 浣跨敤 Python 3.8 slim 浣滀负鍩虹闀滃儚锛堣交閲忕ǔ瀹氾級 -FROM python:3.10 - -# 璁剧疆宸ヤ綔鐩綍 -WORKDIR /app - -# 澶嶅埗鎵�鏈夋枃浠跺埌瀹瑰櫒 -COPY . /app - -# 鏇存柊 pip 骞跺畨瑁� wheel锛堥伩鍏嶄緷璧栭棶棰橈級 -RUN pip install --upgrade pip wheel - -# 浣跨敤闃块噷浜� PyPI 闀滃儚瀹夎渚濊禆锛屽苟娣诲姞 trusted-host -RUN pip install -i https://mirrors.aliyun.com/pypi/simple \ - --trusted-host mirrors.aliyun.com \ - --no-cache-dir -r requirements.txt - -# 鏆撮湶 Flask 绔彛 -EXPOSE 5000 - -# 璁剧疆鐜鍙橀噺 -ENV FLASK_APP=app.py -ENV FLASK_RUN_HOST=0.0.0.0 - -# 杩愯 Flask -CMD ["flask", "run", "--host=0.0.0.0"] diff --git a/script/docker/localModels/app.py b/script/docker/localModels/app.py deleted file mode 100644 index 645a9b4..0000000 --- a/script/docker/localModels/app.py +++ /dev/null @@ -1,116 +0,0 @@ -from flask import Flask, request, jsonify -from sentence_transformers import SentenceTransformer -from sklearn.metrics.pairwise import cosine_similarity -import json - -app = Flask(__name__) - -# 鍒涘缓涓�涓叏灞�鐨勬ā鍨嬬紦瀛樺瓧鍏� -model_cache = {} - -# 鍒嗗壊鏂囨湰鍧� -def split_text(text, block_size, overlap_chars, delimiter): - chunks = text.split(delimiter) - text_blocks = [] - current_block = "" - - for chunk in chunks: - if len(current_block) + len(chunk) + 1 <= block_size: - if current_block: - current_block += " " + chunk - else: - current_block = chunk - else: - text_blocks.append(current_block) - current_block = chunk - if current_block: - text_blocks.append(current_block) - - overlap_blocks = [] - for i in range(len(text_blocks)): - if i > 0: - overlap_block = text_blocks[i - 1][-overlap_chars:] + text_blocks[i] - overlap_blocks.append(overlap_block) - overlap_blocks.append(text_blocks[i]) - - return overlap_blocks - -# 鏂囨湰鍚戦噺鍖� -def vectorize_text_blocks(text_blocks, model): - return model.encode(text_blocks) - -# 鏂囨湰妫�绱� -def retrieve_top_k(query, knowledge_base, k, block_size, overlap_chars, delimiter, model): - # 灏嗙煡璇嗗簱鎷嗗垎涓烘枃鏈潡 - text_blocks = split_text(knowledge_base, block_size, overlap_chars, delimiter) - # 鍚戦噺鍖栨枃鏈潡 - knowledge_vectors = vectorize_text_blocks(text_blocks, model) - # 鍚戦噺鍖栨煡璇㈡枃鏈� - query_vector = model.encode([query]).reshape(1, -1) - # 璁$畻鐩镐技搴� - similarities = cosine_similarity(query_vector, knowledge_vectors) - # 鑾峰彇鐩镐技搴︽渶楂樼殑 k 涓枃鏈潡鐨勭储寮� - top_k_indices = similarities[0].argsort()[-k:][::-1] - - # 杩斿洖鏂囨湰鍧楀拰瀹冧滑鐨勫悜閲� - top_k_texts = [text_blocks[i] for i in top_k_indices] - top_k_embeddings = [knowledge_vectors[i] for i in top_k_indices] - - return top_k_texts, top_k_embeddings - -@app.route('/vectorize', methods=['POST']) -def vectorize_text(): - # 浠庤姹備腑鑾峰彇 JSON 鏁版嵁 - data = request.json - print(f"Received request data: {data}") # 璋冭瘯杈撳嚭璇锋眰鏁版嵁 - - text_list = data.get("text", []) - model_name = data.get("model_name", "msmarco-distilbert-base-tas-b") # 榛樿妯″瀷 - - delimiter = data.get("delimiter", "\n") # 榛樿鍒嗛殧绗� - k = int(data.get("k", 3)) # 榛樿妫�绱㈡潯鏁� - block_size = int(data.get("block_size", 500)) # 榛樿鏂囨湰鍧楀ぇ灏� - overlap_chars = int(data.get("overlap_chars", 50)) # 榛樿閲嶅彔瀛楃鏁� - - if not text_list: - return jsonify({"error": "Text is required."}), 400 - - # 妫�鏌ユā鍨嬫槸鍚﹀凡缁忓姞杞� - if model_name not in model_cache: - try: - model = SentenceTransformer(model_name) - model_cache[model_name] = model # 缂撳瓨妯″瀷 - except Exception as e: - return jsonify({"error": f"Failed to load model: {e}"}), 500 - - model = model_cache[model_name] - - top_k_texts_all = [] - top_k_embeddings_all = [] - - # 濡傛灉鍙湁涓�涓煡璇㈡枃鏈� - if len(text_list) == 1: - top_k_texts, top_k_embeddings = retrieve_top_k(text_list[0], text_list[0], k, block_size, overlap_chars, delimiter, model) - top_k_texts_all.append(top_k_texts) - top_k_embeddings_all.append(top_k_embeddings) - elif len(text_list) > 1: - # 濡傛灉澶氫釜鏌ヨ鏂囨湰锛屼緷娆″鐞� - for query in text_list: - top_k_texts, top_k_embeddings = retrieve_top_k(query, text_list[0], k, block_size, overlap_chars, delimiter, model) - top_k_texts_all.append(top_k_texts) - top_k_embeddings_all.append(top_k_embeddings) - - # 灏嗗祵鍏ュ悜閲忥紙ndarray锛夎浆鎹负鍙簭鍒楀寲鐨勫垪琛� - top_k_embeddings_all = [[embedding.tolist() for embedding in embeddings] for embeddings in top_k_embeddings_all] - - print(f"Top K texts: {top_k_texts_all}") # 鎵撳嵃妫�绱㈠埌鐨勬枃鏈� - print(f"Top K embeddings: {top_k_embeddings_all}") # 鎵撳嵃妫�绱㈠埌鐨勫悜閲� - - # 杩斿洖 JSON 鏍煎紡鐨勬暟鎹� - return jsonify({ - - "topKEmbeddings": top_k_embeddings_all # 杩斿洖宓屽叆鍚戦噺 - }) - -if __name__ == '__main__': - app.run(host="0.0.0.0", port=5000, debug=True) diff --git a/script/docker/localModels/remade.md b/script/docker/localModels/remade.md deleted file mode 100644 index d6af3d2..0000000 --- a/script/docker/localModels/remade.md +++ /dev/null @@ -1,4 +0,0 @@ -1.涓嬭浇闀滃儚 -docker pull registry.cn-hangzhou.aliyuncs.com/hejh-docker/localmodel:0.1.1 -2. 鍚姩 -docker run -p 5000:5000 <imageId> \ No newline at end of file diff --git a/script/docker/localModels/requirements.txt b/script/docker/localModels/requirements.txt deleted file mode 100644 index 2d62483..0000000 --- a/script/docker/localModels/requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -Flask==3.1.0 -sentence-transformers==3.4.1 -scikit-learn==1.6.1 -werkzeug>=3.1 - -- Gitblit v1.9.3