From c063b1a0ecc52c12f71b326cfdc50ede2b8fe721 Mon Sep 17 00:00:00 2001
From: Hoshi <1196756653@qq.com>
Date: Tue, 20 Aug 2024 17:57:30 +0800
Subject: [PATCH] Initial commit all
---
bocloud.sms.booter/pom.xml | 228 ++
.../com/bocloud/sms/booter/Application.java | 20 +
.../sms/booter/config/AccountCache.java | 222 ++
.../bocloud/sms/booter/config/DictCache.java | 63 +
.../booter/config/RabbitMQConfiguration.java | 155 ++
.../booter/config/SwaggerConfiguration.java | 45 +
.../config/WebInterceptorConfiguration.java | 108 +
.../booter/config/WebSocketConfiguration.java | 71 +
.../sms/booter/config/WhiteApiCache.java | 39 +
.../controller/AdmissionController.java | 107 +
.../booter/controller/ApiTokenController.java | 85 +
.../controller/AutoLoginController.java | 29 +
.../booter/controller/BusinessController.java | 221 ++
.../booter/controller/ConfigController.java | 167 ++
.../controller/DepartmentController.java | 117 +
.../sms/booter/controller/DictController.java | 106 +
.../booter/controller/DispatchController.java | 96 +
.../controller/EnvironmentController.java | 99 +
.../controller/GlobalManConfigController.java | 66 +
.../sms/booter/controller/IconController.java | 66 +
.../booter/controller/LabelController.java | 88 +
.../LogArchiveRecordController.java | 44 +
.../sms/booter/controller/LogController.java | 76 +
.../controller/LogDownloadController.java | 332 +++
.../booter/controller/LoginController.java | 266 ++
.../booter/controller/MessageController.java | 90 +
.../booter/controller/NameRuleController.java | 114 +
.../controller/PermissionController.java | 196 ++
.../booter/controller/PluginController.java | 274 ++
.../controller/PluginInsideController.java | 81 +
.../PortalElementConfigController.java | 42 +
.../PortalElementPoolController.java | 39 +
.../controller/PortalPanelController.java | 81 +
.../booter/controller/ProjectController.java | 330 +++
.../sms/booter/controller/RoleController.java | 179 ++
.../controller/SingleLoginController.java | 27 +
.../controller/SysDateViewController.java | 35 +
.../controller/SystemConfigController.java | 104 +
.../booter/controller/SystemController.java | 949 +++++++
.../controller/SystemHomeController.java | 29 +
.../controller/SystemNoticeController.java | 105 +
.../booter/controller/TenantController.java | 426 ++++
.../booter/controller/TokenController.java | 109 +
.../booter/controller/UpgradeController.java | 149 ++
.../sms/booter/controller/UserController.java | 417 +++
.../controller/UserGroupController.java | 135 +
.../listener/BocloudMessageListener.java | 54 +
.../sms/booter/listener/EventListener.java | 120 +
.../sms/booter/listener/LogListener.java | 91 +
.../scheduler/AccountStatusMonitor.java | 121 +
.../scheduler/SystemNoticeScheduler.java | 66 +
.../booter/scheduler/UserPasswordMonitor.java | 142 ++
.../scheduler/YunKongMessageSchedule.java | 98 +
.../syslog/SysLogAppenderTcpAndUdp.java | 15 +
.../booter/syslog/SysLogLevelConvertor.java | 22 +
.../syslog/SyslogOutputStreamTcpAndUdp.java | 70 +
.../websocket/logview/LogViewHandler.java | 265 ++
.../websocket/message/MessageHandler.java | 171 ++
.../websocket/message/MessageInterceptor.java | 67 +
.../booter/websocket/model/CommonMessage.java | 63 +
.../websocket/model/LogViewMessage.java | 88 +
.../websocket/model/MessageCategory.java | 32 +
.../sms/booter/websocket/model/UploadACK.java | 53 +
.../booter/websocket/model/UploadBean.java | 15 +
.../booter/websocket/model/UploadCancel.java | 53 +
.../booter/websocket/model/UploadMessage.java | 51 +
.../upload/UploadServiceHandler.java | 214 ++
.../src/main/resources/application.yml | 133 +
.../src/main/resources/banner.txt | 11 +
.../src/main/resources/logback-spring.xml | 75 +
bocloud.sms.service/pom.xml | 94 +
.../sms/interfaces/AdmissionService.java | 62 +
.../sms/interfaces/ApiTokenService.java | 23 +
.../sms/interfaces/AutoLoginService.java | 10 +
.../sms/interfaces/BusinessService.java | 126 +
.../sms/interfaces/DepartmentService.java | 85 +
.../bocloud/sms/interfaces/DictService.java | 88 +
.../sms/interfaces/EnvironmentService.java | 56 +
.../interfaces/GlobalManConfigService.java | 23 +
.../bocloud/sms/interfaces/IconService.java | 24 +
.../bocloud/sms/interfaces/LabelService.java | 53 +
.../interfaces/LogArchiveRecordService.java | 22 +
.../bocloud/sms/interfaces/LogService.java | 55 +
.../sms/interfaces/ManagerService.java | 23 +
.../sms/interfaces/MessageService.java | 78 +
.../sms/interfaces/NameRuleService.java | 69 +
.../sms/interfaces/PermissionService.java | 129 +
.../bocloud/sms/interfaces/PluginService.java | 120 +
.../PortalElementConfigService.java | 21 +
.../interfaces/PortalElementPoolService.java | 20 +
.../sms/interfaces/PortalPanelService.java | 48 +
.../sms/interfaces/ProjectService.java | 151 ++
.../sms/interfaces/PrometheusService.java | 158 ++
.../bocloud/sms/interfaces/QueryService.java | 30 +
.../bocloud/sms/interfaces/RoleService.java | 135 +
.../sms/interfaces/SingleLoginService.java | 10 +
.../sms/interfaces/SysDateViewService.java | 13 +
.../sms/interfaces/SystemConfigService.java | 52 +
.../sms/interfaces/SystemHomeService.java | 9 +
.../sms/interfaces/SystemNoticeService.java | 41 +
.../bocloud/sms/interfaces/TenantService.java | 403 +++
.../sms/interfaces/UpgradeService.java | 68 +
.../sms/interfaces/UserGroupService.java | 94 +
.../sms/interfaces/UserPermissionService.java | 33 +
.../bocloud/sms/interfaces/UserService.java | 344 +++
.../sms/service/AdmissionServiceImpl.java | 151 ++
.../sms/service/ApiTokenServiceImpl.java | 126 +
.../sms/service/AutoLoginServiceImpl.java | 57 +
.../sms/service/BusinessServiceImpl.java | 400 +++
.../sms/service/DepartmentServiceImpl.java | 226 ++
.../bocloud/sms/service/DictServiceImpl.java | 221 ++
.../sms/service/EnvironmentServiceImpl.java | 136 +
.../service/GlobalManConfigServiceImpl.java | 103 +
.../bocloud/sms/service/IconServiceImpl.java | 104 +
.../bocloud/sms/service/LabelServiceImpl.java | 166 ++
.../service/LogArchiveRecordServiceImpl.java | 46 +
.../bocloud/sms/service/LogServiceImpl.java | 237 ++
.../sms/service/ManagerServiceImpl.java | 253 ++
.../sms/service/MessageServiceImpl.java | 181 ++
.../sms/service/NameRuleServiceImpl.java | 290 +++
.../sms/service/PermissionServiceImpl.java | 599 +++++
.../sms/service/PluginServiceImpl.java | 451 ++++
.../PortalElementConfigServiceImpl.java | 34 +
.../service/PortalElementPoolServiceImpl.java | 39 +
.../sms/service/PortalPanelServiceImpl.java | 134 +
.../sms/service/ProjectServiceImpl.java | 641 +++++
.../sms/service/PrometheusServiceImpl.java | 207 ++
.../bocloud/sms/service/RoleServiceImpl.java | 546 ++++
.../sms/service/SingleLoginServiceImpl.java | 271 ++
.../bocloud/sms/service/SysDateViewImpl.java | 66 +
.../sms/service/SystemConfigServiceImpl.java | 334 +++
.../sms/service/SystemHomeServiceImpl.java | 56 +
.../sms/service/SystemNoticeServiceImpl.java | 384 +++
.../sms/service/TenantServiceImpl.java | 2260 +++++++++++++++++
.../sms/service/UserGroupServiceImpl.java | 261 ++
.../service/UserPermissionServiceImpl.java | 151 ++
.../bocloud/sms/service/UserServiceImpl.java | 1779 +++++++++++++
.../service/internel/CmpInternalService.java | 70 +
.../service/internel/CosInternelService.java | 179 ++
.../sms/service/internel/CosQuotaService.java | 157 ++
.../service/internel/PluginInsideService.java | 126 +
.../sms/service/ldap/LdapConnector.java | 71 +
.../sms/service/ldap/LdapRepository.java | 182 ++
.../service/monitor/MySqlConfiguration.java | 155 ++
.../sms/service/monitor/PrometheusConfig.java | 26 +
.../service/monitor/PrometheusMonitor.java | 78 +
.../sms/service/monitor/PrometheusUtils.java | 92 +
.../sms/service/monitor/QueryServiceImpl.java | 100 +
.../sms/service/monitor/RabbitMqMonitor.java | 104 +
.../sms/service/monitor/RedisMonitor.java | 44 +
.../sms/service/monitor/ZooKeeperMonitor.java | 61 +
.../sms/service/upgrade/UpgradeException.java | 44 +
.../service/upgrade/UpgradeServiceImpl.java | 504 ++++
.../sms/service/upgrade/UpgradeStatus.java | 30 +
.../sms/service/upgrade/UpgradeTask.java | 42 +
.../sms/service/upgrade/UpgradeUtils.java | 409 +++
.../sms/service/utils/AdmissionUtil.java | 75 +
.../sms/service/utils/ConfigRegister.java | 81 +
.../sms/service/utils/Configuration.java | 127 +
.../sms/service/utils/DingTalkSender.java | 231 ++
.../sms/service/utils/EmailSender.java | 204 ++
.../bocloud/sms/service/utils/ExportUtil.java | 213 ++
.../sms/service/utils/HttpClientUtil.java | 77 +
.../sms/service/utils/ImportExcelUtil.java | 63 +
.../bocloud/sms/service/utils/LdapConfig.java | 16 +
.../sms/service/utils/LdapTransportor.java | 340 +++
.../service/utils/OrderExceptionQuartz.java | 34 +
.../sms/service/utils/ServiceWatcher.java | 73 +
.../sms/service/utils/SyncScheduler.java | 83 +
.../sms/service/utils/WeChatWorkSender.java | 200 ++
bocloud.sms.storage/pom.xml | 39 +
.../sms/cache/UserPermissionCache.java | 43 +
.../com/bocloud/sms/entity/AccessLog.java | 69 +
.../bocloud/sms/entity/AccountSecurity.java | 58 +
.../com/bocloud/sms/entity/Admission.java | 75 +
.../com/bocloud/sms/entity/ApiPermission.java | 38 +
.../java/com/bocloud/sms/entity/ApiToken.java | 63 +
.../java/com/bocloud/sms/entity/Business.java | 49 +
.../com/bocloud/sms/entity/CloudService.java | 67 +
.../com/bocloud/sms/entity/Department.java | 47 +
.../com/bocloud/sms/entity/Dictionary.java | 60 +
.../com/bocloud/sms/entity/Environment.java | 35 +
.../java/com/bocloud/sms/entity/Favorite.java | 53 +
.../bocloud/sms/entity/GlobalManConfig.java | 45 +
.../java/com/bocloud/sms/entity/Icon.java | 31 +
.../java/com/bocloud/sms/entity/Label.java | 70 +
.../bocloud/sms/entity/LogArchiveRecord.java | 66 +
.../com/bocloud/sms/entity/LoginRecord.java | 70 +
.../com/bocloud/sms/entity/ManagerRole.java | 39 +
.../java/com/bocloud/sms/entity/Message.java | 76 +
.../java/com/bocloud/sms/entity/NameRule.java | 179 ++
.../com/bocloud/sms/entity/Permission.java | 113 +
.../java/com/bocloud/sms/entity/Plugin.java | 138 +
.../sms/entity/PortalElementConfig.java | 82 +
.../bocloud/sms/entity/PortalElementPool.java | 100 +
.../com/bocloud/sms/entity/PortalPanel.java | 83 +
.../java/com/bocloud/sms/entity/Project.java | 99 +
.../com/bocloud/sms/entity/ResourceQuota.java | 151 ++
.../java/com/bocloud/sms/entity/Role.java | 34 +
.../bocloud/sms/entity/RolePermission.java | 33 +
.../com/bocloud/sms/entity/SystemConfig.java | 104 +
.../com/bocloud/sms/entity/SystemNotice.java | 75 +
.../java/com/bocloud/sms/entity/Tenant.java | 192 ++
.../com/bocloud/sms/entity/TenantAccount.java | 160 ++
.../com/bocloud/sms/entity/TenantPool.java | 64 +
.../bocloud/sms/entity/UpgradeHistory.java | 103 +
.../com/bocloud/sms/entity/UpgradeTask.java | 79 +
.../java/com/bocloud/sms/entity/User.java | 188 ++
.../com/bocloud/sms/entity/UserGroup.java | 51 +
.../bocloud/sms/entity/UserGroupRelation.java | 48 +
.../com/bocloud/sms/entity/UserProject.java | 44 +
.../java/com/bocloud/sms/entity/UserRole.java | 37 +
.../bocloud/sms/enums/QuotaTargetCatalog.java | 20 +
.../com/bocloud/sms/model/ActionModel.java | 32 +
.../com/bocloud/sms/model/AdmissionModel.java | 19 +
.../bocloud/sms/model/ApiAccreditModel.java | 19 +
.../java/com/bocloud/sms/model/ApiInfo.java | 50 +
.../bocloud/sms/model/BatchActionModel.java | 41 +
.../com/bocloud/sms/model/BusinessModel.java | 33 +
.../bocloud/sms/model/CloudServiceBean.java | 70 +
.../com/bocloud/sms/model/ConfigModel.java | 17 +
.../bocloud/sms/model/DepartmentModel.java | 22 +
.../com/bocloud/sms/model/DictionaryBean.java | 46 +
.../sms/model/ImpExpBusinessExcelModel.java | 28 +
.../sms/model/ImpExpProjectExcelModel.java | 31 +
.../sms/model/ImportTenantTemplate.java | 45 +
.../bocloud/sms/model/ImportUserTemplate.java | 47 +
.../com/bocloud/sms/model/LicenseMask.java | 26 +
.../bocloud/sms/model/LineChartResult.java | 139 +
.../com/bocloud/sms/model/LoginModel.java | 19 +
.../java/com/bocloud/sms/model/MenuBean.java | 113 +
.../java/com/bocloud/sms/model/MetaBean.java | 29 +
.../com/bocloud/sms/model/NotifyMessage.java | 65 +
.../com/bocloud/sms/model/PasswordModel.java | 17 +
.../com/bocloud/sms/model/PermissionBean.java | 51 +
.../com/bocloud/sms/model/PermissionIcon.java | 50 +
.../bocloud/sms/model/PermissionModel.java | 30 +
.../sms/model/PermissionParentsBean.java | 64 +
.../bocloud/sms/model/PermissionPlugins.java | 30 +
.../sms/model/PluginDescriptorModel.java | 20 +
.../bocloud/sms/model/PluginInfoModel.java | 20 +
.../bocloud/sms/model/PluginListModel.java | 21 +
.../java/com/bocloud/sms/model/PoolGroup.java | 150 ++
.../bocloud/sms/model/PortalPanelBean.java | 44 +
.../com/bocloud/sms/model/PriorityModel.java | 18 +
.../com/bocloud/sms/model/ProjectModel.java | 79 +
.../bocloud/sms/model/ProjectUserBean.java | 22 +
.../java/com/bocloud/sms/model/RoleModel.java | 19 +
.../com/bocloud/sms/model/ServiceBean.java | 32 +
.../bocloud/sms/model/ServiceMenuBean.java | 21 +
.../bocloud/sms/model/TenantGrantMessage.java | 53 +
.../com/bocloud/sms/model/TenantModel.java | 94 +
.../java/com/bocloud/sms/model/UserBean.java | 107 +
.../com/bocloud/sms/model/UserGroupBean.java | 32 +
.../com/bocloud/sms/model/log/LogModel.java | 19 +
.../sms/model/single/RoleRequestModel.java | 20 +
.../sms/model/single/RoleResponseModel.java | 27 +
.../sms/model/single/UserRequestModel.java | 27 +
.../sms/model/single/UserResponseModel.java | 62 +
.../model/single/VerifyTokenRequestModel.java | 14 +
.../single/VerifyTokenResponseModel.java | 13 +
.../bocloud/sms/monitor/ComponentModel.java | 49 +
.../com/bocloud/sms/monitor/Constant.java | 39 +
.../com/bocloud/sms/monitor/LabelParam.java | 49 +
.../com/bocloud/sms/monitor/Operator.java | 40 +
.../com/bocloud/sms/monitor/PluginsModel.java | 24 +
.../bocloud/sms/monitor/PrometheusResult.java | 28 +
.../bocloud/sms/monitor/ServicesModel.java | 36 +
.../com/bocloud/sms/monitor/SystemBean.java | 109 +
.../com/bocloud/sms/monitor/ZooKeeper.java | 36 +
.../repository/AccountSecurityRepository.java | 58 +
.../sms/repository/AdmissionRepository.java | 125 +
.../repository/ApiPermissionRepository.java | 45 +
.../sms/repository/ApiTokenRepository.java | 69 +
.../sms/repository/BusinessRepository.java | 132 +
.../CloudServiceBeanRepository.java | 81 +
.../sms/repository/DepartmentRepository.java | 113 +
.../sms/repository/DictionaryRepository.java | 88 +
.../sms/repository/EnvironmentRepository.java | 90 +
.../sms/repository/FavoriteRepository.java | 68 +
.../repository/GlobalManConfigRepository.java | 72 +
.../sms/repository/IconRepository.java | 68 +
.../sms/repository/LabelRepository.java | 81 +
.../LogArchiveRecordRepository.java | 39 +
.../bocloud/sms/repository/LogRepository.java | 102 +
.../sms/repository/LoginRecordRepository.java | 79 +
.../sms/repository/ManagerRoleRepository.java | 36 +
.../sms/repository/MessageRepository.java | 219 ++
.../sms/repository/NameRuleRepository.java | 111 +
.../sms/repository/PermissionRepository.java | 407 +++
.../sms/repository/PluginRepository.java | 159 ++
.../sms/repository/PoolGroupRepository.java | 42 +
.../PortalElementConfigRepository.java | 30 +
.../PortalElementPoolRepository.java | 32 +
.../sms/repository/PortalPanelRepository.java | 70 +
.../sms/repository/ProjectRepository.java | 257 ++
.../repository/RolePermissionRepository.java | 100 +
.../sms/repository/RoleRepository.java | 254 ++
.../repository/SystemConfigRepository.java | 107 +
.../repository/SystemNoticeRepository.java | 58 +
.../sms/repository/TenantPoolRepository.java | 92 +
.../sms/repository/TenantRepository.java | 353 +++
.../repository/UpgradeHistoryRepository.java | 68 +
.../sms/repository/UpgradeTaskRepository.java | 75 +
.../UserGroupRelationRepository.java | 75 +
.../sms/repository/UserGroupRepository.java | 131 +
.../sms/repository/UserProjectRepository.java | 122 +
.../sms/repository/UserRepository.java | 441 ++++
.../sms/repository/UserRoleRepository.java | 42 +
.../sms/utils/AuthParentsComparator.java | 16 +
.../com/bocloud/sms/utils/DBKeywordUtil.java | 34 +
.../bocloud/sms/utils/FavoriteComparator.java | 24 +
.../com/bocloud/sms/utils/MenuComparator.java | 17 +
.../sms/utils/PermissionComparator.java | 19 +
.../bocloud/sms/utils/PermitComparator.java | 19 +
pom.xml | 75 +
316 files changed, 37410 insertions(+)
create mode 100644 bocloud.sms.booter/pom.xml
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/Application.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/AccountCache.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/DictCache.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/RabbitMQConfiguration.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/SwaggerConfiguration.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/WebInterceptorConfiguration.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/WebSocketConfiguration.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/WhiteApiCache.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/AdmissionController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/ApiTokenController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/AutoLoginController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/BusinessController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/ConfigController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/DepartmentController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/DictController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/DispatchController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/EnvironmentController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/GlobalManConfigController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/IconController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/LabelController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/LogArchiveRecordController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/LogController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/LogDownloadController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/LoginController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/MessageController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/NameRuleController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/PermissionController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/PluginController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/PluginInsideController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/PortalElementConfigController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/PortalElementPoolController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/PortalPanelController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/ProjectController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/RoleController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/SingleLoginController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/SysDateViewController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/SystemConfigController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/SystemController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/SystemHomeController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/SystemNoticeController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/TenantController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/TokenController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/UpgradeController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/UserController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/UserGroupController.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/listener/BocloudMessageListener.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/listener/EventListener.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/listener/LogListener.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/scheduler/AccountStatusMonitor.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/scheduler/SystemNoticeScheduler.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/scheduler/UserPasswordMonitor.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/scheduler/YunKongMessageSchedule.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/syslog/SysLogAppenderTcpAndUdp.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/syslog/SysLogLevelConvertor.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/syslog/SyslogOutputStreamTcpAndUdp.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/websocket/logview/LogViewHandler.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/websocket/message/MessageHandler.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/websocket/message/MessageInterceptor.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/websocket/model/CommonMessage.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/websocket/model/LogViewMessage.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/websocket/model/MessageCategory.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/websocket/model/UploadACK.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/websocket/model/UploadBean.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/websocket/model/UploadCancel.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/websocket/model/UploadMessage.java
create mode 100644 bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/websocket/upload/UploadServiceHandler.java
create mode 100644 bocloud.sms.booter/src/main/resources/application.yml
create mode 100644 bocloud.sms.booter/src/main/resources/banner.txt
create mode 100644 bocloud.sms.booter/src/main/resources/logback-spring.xml
create mode 100644 bocloud.sms.service/pom.xml
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/AdmissionService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/ApiTokenService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/AutoLoginService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/BusinessService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/DepartmentService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/DictService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/EnvironmentService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/GlobalManConfigService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/IconService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/LabelService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/LogArchiveRecordService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/LogService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/ManagerService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/MessageService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/NameRuleService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/PermissionService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/PluginService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/PortalElementConfigService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/PortalElementPoolService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/PortalPanelService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/ProjectService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/PrometheusService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/QueryService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/RoleService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/SingleLoginService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/SysDateViewService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/SystemConfigService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/SystemHomeService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/SystemNoticeService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/TenantService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/UpgradeService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/UserGroupService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/UserPermissionService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/interfaces/UserService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/AdmissionServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/ApiTokenServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/AutoLoginServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/BusinessServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/DepartmentServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/DictServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/EnvironmentServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/GlobalManConfigServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/IconServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/LabelServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/LogArchiveRecordServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/LogServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/ManagerServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/MessageServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/NameRuleServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/PermissionServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/PluginServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/PortalElementConfigServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/PortalElementPoolServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/PortalPanelServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/ProjectServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/PrometheusServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/RoleServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/SingleLoginServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/SysDateViewImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/SystemConfigServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/SystemHomeServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/SystemNoticeServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/TenantServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/UserGroupServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/UserPermissionServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/UserServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/internel/CmpInternalService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/internel/CosInternelService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/internel/CosQuotaService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/internel/PluginInsideService.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/ldap/LdapConnector.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/ldap/LdapRepository.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/monitor/MySqlConfiguration.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/monitor/PrometheusConfig.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/monitor/PrometheusMonitor.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/monitor/PrometheusUtils.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/monitor/QueryServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/monitor/RabbitMqMonitor.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/monitor/RedisMonitor.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/monitor/ZooKeeperMonitor.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/upgrade/UpgradeException.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/upgrade/UpgradeServiceImpl.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/upgrade/UpgradeStatus.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/upgrade/UpgradeTask.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/upgrade/UpgradeUtils.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/utils/AdmissionUtil.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/utils/ConfigRegister.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/utils/Configuration.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/utils/DingTalkSender.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/utils/EmailSender.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/utils/ExportUtil.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/utils/HttpClientUtil.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/utils/ImportExcelUtil.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/utils/LdapConfig.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/utils/LdapTransportor.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/utils/OrderExceptionQuartz.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/utils/ServiceWatcher.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/utils/SyncScheduler.java
create mode 100644 bocloud.sms.service/src/main/java/com/bocloud/sms/service/utils/WeChatWorkSender.java
create mode 100644 bocloud.sms.storage/pom.xml
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/cache/UserPermissionCache.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/AccessLog.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/AccountSecurity.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/Admission.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/ApiPermission.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/ApiToken.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/Business.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/CloudService.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/Department.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/Dictionary.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/Environment.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/Favorite.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/GlobalManConfig.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/Icon.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/Label.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/LogArchiveRecord.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/LoginRecord.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/ManagerRole.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/Message.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/NameRule.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/Permission.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/Plugin.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/PortalElementConfig.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/PortalElementPool.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/PortalPanel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/Project.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/ResourceQuota.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/Role.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/RolePermission.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/SystemConfig.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/SystemNotice.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/Tenant.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/TenantAccount.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/TenantPool.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/UpgradeHistory.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/UpgradeTask.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/User.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/UserGroup.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/UserGroupRelation.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/UserProject.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/entity/UserRole.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/enums/QuotaTargetCatalog.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/ActionModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/AdmissionModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/ApiAccreditModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/ApiInfo.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/BatchActionModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/BusinessModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/CloudServiceBean.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/ConfigModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/DepartmentModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/DictionaryBean.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/ImpExpBusinessExcelModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/ImpExpProjectExcelModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/ImportTenantTemplate.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/ImportUserTemplate.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/LicenseMask.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/LineChartResult.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/LoginModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/MenuBean.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/MetaBean.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/NotifyMessage.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/PasswordModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/PermissionBean.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/PermissionIcon.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/PermissionModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/PermissionParentsBean.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/PermissionPlugins.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/PluginDescriptorModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/PluginInfoModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/PluginListModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/PoolGroup.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/PortalPanelBean.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/PriorityModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/ProjectModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/ProjectUserBean.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/RoleModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/ServiceBean.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/ServiceMenuBean.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/TenantGrantMessage.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/TenantModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/UserBean.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/UserGroupBean.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/log/LogModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/single/RoleRequestModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/single/RoleResponseModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/single/UserRequestModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/single/UserResponseModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/single/VerifyTokenRequestModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/model/single/VerifyTokenResponseModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/monitor/ComponentModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/monitor/Constant.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/monitor/LabelParam.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/monitor/Operator.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/monitor/PluginsModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/monitor/PrometheusResult.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/monitor/ServicesModel.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/monitor/SystemBean.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/monitor/ZooKeeper.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/AccountSecurityRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/AdmissionRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/ApiPermissionRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/ApiTokenRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/BusinessRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/CloudServiceBeanRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/DepartmentRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/DictionaryRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/EnvironmentRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/FavoriteRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/GlobalManConfigRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/IconRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/LabelRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/LogArchiveRecordRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/LogRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/LoginRecordRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/ManagerRoleRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/MessageRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/NameRuleRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/PermissionRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/PluginRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/PoolGroupRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/PortalElementConfigRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/PortalElementPoolRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/PortalPanelRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/ProjectRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/RolePermissionRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/RoleRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/SystemConfigRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/SystemNoticeRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/TenantPoolRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/TenantRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/UpgradeHistoryRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/UpgradeTaskRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/UserGroupRelationRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/UserGroupRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/UserProjectRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/UserRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/repository/UserRoleRepository.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/utils/AuthParentsComparator.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/utils/DBKeywordUtil.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/utils/FavoriteComparator.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/utils/MenuComparator.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/utils/PermissionComparator.java
create mode 100644 bocloud.sms.storage/src/main/java/com/bocloud/sms/utils/PermitComparator.java
create mode 100644 pom.xml
diff --git a/bocloud.sms.booter/pom.xml b/bocloud.sms.booter/pom.xml
new file mode 100644
index 0000000..ca19a22
--- /dev/null
+++ b/bocloud.sms.booter/pom.xml
@@ -0,0 +1,228 @@
+
+
+
+ bocloud.sms
+ com.bocloud
+ 6.5.0-LTS-SZ
+
+ 4.0.0
+ bocloud.sms.booter
+ ${bocloud.booter.version}
+
+
+ jakarta.platform
+ jakarta.jakartaee-api
+ 10.0.0
+ provided
+
+
+ jakarta.servlet
+ jakarta.servlet-api
+ provided
+
+
+ org.slf4j
+ slf4j-api
+ 2.0.7
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.hibernate.validator
+ hibernate-validator
+
+
+ commons-logging
+ commons-logging
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+
+
+ com.bocloud
+ bocloud.sms.service
+
+
+ commons-logging
+ commons-logging
+
+
+
+
+ com.bocloud
+ bocloud.boot.common
+
+
+ commons-logging
+ commons-logging
+
+
+ org.slf4j
+ slf4j-api
+
+
+
+
+ com.bocloud
+ bocloud.cmp.core
+ ${bocloud.core.version}
+
+
+ com.freedom
+ megatron.microservice
+
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
+
+ org.springframework
+ spring-websocket
+
+
+ org.springframework
+ spring-messaging
+
+
+ jakarta.websocket
+ jakarta.websocket-api
+ 2.1.1
+
+
+ org.apache.logging.log4j
+ log4j-core
+ 2.23.1
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.11.0
+
+ true
+ 21
+ 21
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 3.3.0
+
+
+
+ com.bocloud.sms.booter.Application
+ true
+ false
+ libs/
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+ 3.6.1
+
+
+
+ copy-dependencies
+
+
+ jar
+ jar
+ runtime
+ ${project.build.directory}/libs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ bocloud.booter.tomcat
+
+ 6.5.0-LTS-SZ
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.hibernate.validator
+ hibernate-validator
+
+
+
+
+
+
+ bocloud.booter.tongweb
+
+ 6.5.0-LTS-SZ-TONGWEB
+
+
+
+ com.tongweb
+ tongweb-embed
+ 7.0.E.2
+
+
+ com.tongweb.springboot
+ tongweb-spring-boot-starter
+ 2.x.0.RELEASE
+
+
+ com.tongweb.springboot
+ tongweb-spring-boot-websocket
+ 2.x.0.RELEASE
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-tomcat
+
+
+ org.hibernate.validator
+ hibernate-validator
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/Application.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/Application.java
new file mode 100644
index 0000000..0646dda
--- /dev/null
+++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/Application.java
@@ -0,0 +1,20 @@
+package com.bocloud.sms.booter;
+
+import org.springframework.amqp.rabbit.annotation.EnableRabbit;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+/**
+ * @author dmw
+ */
+@EnableRabbit
+@EnableScheduling
+@SpringBootApplication
+@ComponentScan(value = {"com.bocloud", "com.megatron"})
+public class Application {
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+}
diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/AccountCache.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/AccountCache.java
new file mode 100644
index 0000000..08b0a9a
--- /dev/null
+++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/AccountCache.java
@@ -0,0 +1,222 @@
+package com.bocloud.sms.booter.config;
+
+import java.util.List;
+
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Component;
+
+import com.bocloud.sms.entity.ApiToken;
+import com.bocloud.sms.entity.Role;
+import com.bocloud.sms.entity.Tenant;
+import com.bocloud.sms.entity.User;
+import com.bocloud.sms.entity.UserGroup;
+import com.bocloud.sms.repository.ApiTokenRepository;
+import com.bocloud.sms.repository.RoleRepository;
+import com.bocloud.sms.repository.TenantRepository;
+import com.bocloud.sms.repository.UserGroupRepository;
+import com.bocloud.sms.repository.UserRepository;
+import com.megatron.common.model.RequestContext;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * @author tyl
+ * @since 2020/3/25 周三 14:06
+ */
+@Component
+@Slf4j
+public class AccountCache implements InitializingBean {
+
+ private final StringRedisTemplate redisTemplate;
+ private final TenantRepository tenantRepository;
+ private final UserRepository userRepository;
+ private final RoleRepository roleRepository;
+ private final UserGroupRepository userGroupRepository;
+ private final ApiTokenRepository apiTokenRepository;
+ private final ThreadPoolTaskExecutor taskExecutor;
+
+ public AccountCache(StringRedisTemplate redisTemplate, TenantRepository tenantRepository,
+ UserRepository userRepository, RoleRepository roleRepository, UserGroupRepository userGroupRepository,
+ ApiTokenRepository apiTokenRepository, ThreadPoolTaskExecutor taskExecutor) {
+ this.redisTemplate = redisTemplate;
+ this.tenantRepository = tenantRepository;
+ this.userRepository = userRepository;
+ this.roleRepository = roleRepository;
+ this.userGroupRepository = userGroupRepository;
+ this.apiTokenRepository = apiTokenRepository;
+ this.taskExecutor = taskExecutor;
+ }
+
+ public void putAccountCache(RequestContext.Catalog catalog, Long id, String account) {
+ String key = catalog.name() + "_" + id;
+ this.redisTemplate.opsForValue().set(key, account);
+ }
+
+ public void putNameCache(RequestContext.Catalog catalog, Long id, String name) {
+ String key = catalog.name() + "_Name_" + id;
+ this.redisTemplate.opsForValue().set(key, name);
+ }
+
+ public void putRoleCache(Long id, String name) {
+ this.redisTemplate.opsForValue().set("Role_Name_" + id, name);
+ }
+
+ public void putUserGroupCache(Long id, String name) {
+ this.redisTemplate.opsForValue().set("Group_Name_" + id, name);
+ }
+
+ public void putApiTokenCache(String token, String apis) {
+ this.redisTemplate.opsForValue().set("Api_Token_" + token, apis);
+ }
+
+ /**
+ * 获取缓存中用户账号
+ *
+ * @param id
+ * 用户id
+ * @return
+ */
+ public String getUserAccount(Long id) {
+ return redisTemplate.opsForValue().get(RequestContext.Catalog.User.name() + "_" + id);
+ }
+
+ /**
+ * 获取缓存中用户名称
+ *
+ * @param id
+ * 用户id
+ * @return
+ */
+ public String getUserName(Long id) {
+ return redisTemplate.opsForValue().get(RequestContext.Catalog.User.name() + "_Name_" + id);
+ }
+
+ /**
+ * 获取缓存中租户账号
+ *
+ * @param id
+ * 租户id
+ * @return
+ */
+ public String getTenantAccount(Long id) {
+ return redisTemplate.opsForValue().get(RequestContext.Catalog.Tenant.name() + "_" + id);
+ }
+
+ /**
+ * 获取缓存中租户名称
+ *
+ * @param id
+ * 租户id
+ * @return
+ */
+ public String getTenantName(Long id) {
+ return redisTemplate.opsForValue().get(RequestContext.Catalog.Tenant.name() + "_Name_" + id);
+ }
+
+ /**
+ * 获取缓存中角色名称
+ *
+ * @param id
+ * 租户id
+ * @return
+ */
+ public String getRoleName(Long id) {
+ return redisTemplate.opsForValue().get("Role_Name_" + id);
+ }
+
+ /**
+ * 获取缓存中用户组名称
+ *
+ * @param id
+ * 租户id
+ * @return
+ */
+ public String getUserGroupName(Long id) {
+ return redisTemplate.opsForValue().get("Group_Name_" + id);
+ }
+
+ public String getApiToken(String api) {
+ return redisTemplate.opsForValue().get("Api_Token_" + api);
+ }
+
+ @Override
+ public void afterPropertiesSet() {
+ taskExecutor.execute(this::addTenantCache);
+ taskExecutor.execute(this::addUserCache);
+ taskExecutor.execute(this::addRoleCache);
+ taskExecutor.execute(this::addUserGroupCache);
+ taskExecutor.execute(this::addApiTokenCache);
+ }
+
+ public void addTenantCache() {
+ try {
+ List tenants = tenantRepository.listAll();
+ // 缓存租户账号和租户名
+ for (Tenant tenant : tenants) {
+ if (!tenant.getDeleted()) {
+ putAccountCache(RequestContext.Catalog.Tenant, tenant.getId(), tenant.getAccount());
+ }
+ putNameCache(RequestContext.Catalog.Tenant, tenant.getId(), tenant.getName());
+ }
+ } catch (Exception e) {
+ log.error("put tenant cache error,", e);
+ }
+ }
+
+ public void addUserCache() {
+ try {
+ List users = userRepository.listAll();
+ // 缓存用户账号和用户名
+ for (User user : users) {
+ if (!user.getDeleted()) {
+ putAccountCache(RequestContext.Catalog.User, user.getId(), user.getAccount());
+ }
+ putNameCache(RequestContext.Catalog.User, user.getId(), user.getName());
+ }
+ } catch (Exception e) {
+ log.error("put user cache error,", e);
+ }
+ }
+
+ public void addRoleCache() {
+ try {
+ List roles = roleRepository.list();
+ // 缓存角色名
+ for (Role role : roles) {
+ putRoleCache(role.getId(), role.getName());
+ }
+ } catch (Exception e) {
+ log.error("put role cache error,", e);
+ }
+ }
+
+ public void addUserGroupCache() {
+ try {
+ List groups = userGroupRepository.list();
+ // 缓存角色名
+ for (UserGroup group : groups) {
+ putUserGroupCache(group.getId(), group.getName());
+ }
+ } catch (Exception e) {
+ log.error("put user group cache error,", e);
+ }
+ }
+
+ public void addApiTokenCache() {
+ try {
+ List tokens = apiTokenRepository.listAll();
+ // 缓存角色名
+ for (ApiToken token : tokens) {
+ if (!token.getEnabled()) {
+ continue;
+ }
+ putApiTokenCache(token.getToken(), token.getApis());
+ }
+ } catch (Exception e) {
+ log.error("put api token cache error,", e);
+ }
+ }
+
+}
diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/DictCache.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/DictCache.java
new file mode 100644
index 0000000..8d3c7e6
--- /dev/null
+++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/DictCache.java
@@ -0,0 +1,63 @@
+package com.bocloud.sms.booter.config;
+
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Component;
+
+import com.alibaba.fastjson.JSONObject;
+import com.bocloud.sms.entity.Dictionary;
+import com.bocloud.sms.interfaces.DictService;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * @author tyl
+ * @since 2020/3/25 周三 14:06
+ */
+@Component
+@Slf4j
+public class DictCache implements InitializingBean {
+
+ private final StringRedisTemplate redisTemplate;
+ private final DictService dictService;
+ private final ThreadPoolTaskExecutor taskExecutor;
+
+ public DictCache(StringRedisTemplate redisTemplate, DictService dictService, ThreadPoolTaskExecutor taskExecutor) {
+ this.redisTemplate = redisTemplate;
+ this.dictService = dictService;
+ this.taskExecutor = taskExecutor;
+ }
+
+ public void putCache(String code, String value) {
+ String key = Dictionary.class.getSimpleName() + "_" + code;
+ this.redisTemplate.opsForValue().set(key, value);
+ }
+
+ @Override
+ public void afterPropertiesSet() {
+ taskExecutor.execute(this::addOsNamesCache);
+ taskExecutor.execute(this::addDataCenterCache);
+ }
+
+ public void addOsNamesCache() {
+ try {
+ List list = dictService.getAllOsName();
+ putCache("OS_CATEGORY_TASK", JSONObject.toJSONString(list));
+ } catch (Exception e) {
+ log.error("put os name cache error,", e);
+ }
+ }
+
+ public void addDataCenterCache() {
+ try {
+ Map map = dictService.getAllDataCenter();
+ putCache("DATA_CENTER", JSONObject.toJSONString(map));
+ } catch (Exception e) {
+ log.error("put data center cache error,", e);
+ }
+ }
+}
diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/RabbitMQConfiguration.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/RabbitMQConfiguration.java
new file mode 100644
index 0000000..f1bc059
--- /dev/null
+++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/RabbitMQConfiguration.java
@@ -0,0 +1,155 @@
+package com.bocloud.sms.booter.config;
+
+import com.bocloud.cmp.boot.model.BoCloudExchange;
+import com.bocloud.cmp.core.encrypt.AbstractEncryptHandler;
+import com.bocloud.sms.booter.listener.BocloudMessageListener;
+import com.megatron.common.utils.IDFactory;
+import com.megatron.common.utils.MapTools;
+import com.megatron.framework.core.CurrentService;
+import org.springframework.amqp.core.*;
+import org.springframework.amqp.rabbit.connection.ConnectionFactory;
+import org.springframework.amqp.rabbit.core.RabbitAdmin;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
+import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
+import org.springframework.amqp.support.converter.MessageConverter;
+import org.springframework.beans.factory.config.ConfigurableBeanFactory;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Scope;
+
+import java.util.Map;
+
+/**
+ * rabbitmq配置类
+ *
+ * @author wangyu
+ * @version 1.0
+ * @since 2018年3月30日
+ */
+@Configuration
+public class RabbitMQConfiguration {
+
+ private final ConnectionFactory connectionFactory;
+ private final Map arguments = MapTools.simpleMap("x-ha-policy", "all");
+
+ public RabbitMQConfiguration(ConnectionFactory connectionFactory) {
+ this.connectionFactory = connectionFactory;
+ }
+
+ /**
+ * 声明主题交换机
+ *
+ * @return 交换机
+ */
+ @Bean
+ public TopicExchange topicExchange() {
+ return new TopicExchange(BoCloudExchange.Default.TOPIC.getExchange(), true, true);
+ }
+
+ /**
+ * 声明默认交换机
+ *
+ * @return 交换机
+ */
+ @Bean
+ public DirectExchange defaultExchange() {
+ return new DirectExchange(BoCloudExchange.Default.DIRECT.getExchange(), true, true);
+ }
+
+ @Bean
+ public Binding bindingMessageQueue(CurrentService service) {
+ return BindingBuilder.bind(declareMessageQueue(service)).to(topicExchange()).with("bocloud.message.queue.#");
+ }
+
+ @Bean
+ public MessageConverter messageConverter() {
+ return new Jackson2JsonMessageConverter();
+ }
+
+ @Bean
+ public Queue declareMessageQueue(CurrentService service) {
+ return new Queue("bocloud.message.queue.sms." + service.getToken(), true, false, true, arguments);
+ }
+
+ /**
+ * 声明审计日志队列
+ *
+ * @return 队列
+ */
+ @Bean
+ public Queue declareLogQueue() {
+ return new Queue("bocloud.log.queue", true, false, false, arguments);
+ }
+
+ /**
+ * 声明通知消息队列
+ *
+ * @return 队列
+ */
+ @Bean
+ public Queue declareNoticeQueue() {
+ return new Queue("event.notice.queue", true, false, false, arguments);
+ }
+
+ @Bean
+ public Binding bindingNoticeQueue() {
+ return BindingBuilder.bind(declareNoticeQueue()).to(defaultExchange()).withQueueName();
+ }
+
+ @Bean
+ public Binding bindingLogQueue() {
+ return BindingBuilder.bind(declareLogQueue()).to(defaultExchange()).withQueueName();
+ }
+
+ @Bean
+ @ConditionalOnBean(AbstractEncryptHandler.class)
+ public Queue declareLicenseInstallQueue() {
+ return new Queue("license.install.queue." + IDFactory.instance().uuid(), true, false, true, arguments);
+ }
+
+ @Bean
+ @ConditionalOnBean(AbstractEncryptHandler.class)
+ public Binding bindLicenseInstallQueue() {
+ return BindingBuilder.bind(declareLicenseInstallQueue()).to(defaultExchange()).with("license.install.queue");
+ }
+
+ @Bean
+ @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+ public RabbitTemplate amqpTemplate() {
+ RabbitTemplate amqpTemplate = new RabbitTemplate(connectionFactory);
+ amqpTemplate.setMessageConverter(messageConverter());
+ return amqpTemplate;
+ }
+
+ @Bean
+ public RabbitAdmin rabbitAdmin() {
+ return new RabbitAdmin(amqpTemplate());
+ }
+
+ @Bean
+ public SimpleMessageListenerContainer autoMessageListener(CurrentService service, BocloudMessageListener bocloudMessageListener) {
+ SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
+ container.setQueues(declareMessageQueue(service));
+ // 设置确认模式自动确认
+ container.setAcknowledgeMode(AcknowledgeMode.AUTO);
+ container.setMessageListener(bocloudMessageListener);
+ container.setAmqpAdmin(rabbitAdmin());
+ container.setAutoStartup(true);
+ return container;
+ }
+
+ @Bean
+ @ConditionalOnBean(AbstractEncryptHandler.class)
+ public SimpleMessageListenerContainer licenseInstallListener(AbstractEncryptHandler encryptHandler) {
+ SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
+ // 设置确认模式自动确认
+ container.setQueues(declareLicenseInstallQueue());
+ container.setAcknowledgeMode(AcknowledgeMode.AUTO);
+ container.setMessageListener(encryptHandler);
+ container.setAmqpAdmin(rabbitAdmin());
+ container.setAutoStartup(true);
+ return container;
+ }
+}
diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/SwaggerConfiguration.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/SwaggerConfiguration.java
new file mode 100644
index 0000000..b9b8420
--- /dev/null
+++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/SwaggerConfiguration.java
@@ -0,0 +1,45 @@
+package com.bocloud.sms.booter.config;
+
+import cn.hutool.core.util.RandomUtil;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.info.Info;
+import io.swagger.v3.oas.models.info.License;
+import org.springdoc.core.customizers.GlobalOpenApiCustomizer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author dmw
+ */
+@Configuration
+public class SwaggerConfiguration {
+ @Bean
+ public GlobalOpenApiCustomizer orderGlobalOpenApiCustomizer() {
+ return openApi -> {
+ if (openApi.getTags() != null) {
+ openApi.getTags().forEach(tag -> {
+ Map map = new HashMap<>();
+ map.put("x-order", RandomUtil.randomInt(0, 100));
+ tag.setExtensions(map);
+ });
+ }
+ if (openApi.getPaths() != null) {
+ openApi.addExtension("x-production", "BeyondCMP");
+ openApi.getPaths().addExtension("x-sign", RandomUtil.randomInt(1, 100));
+ }
+ };
+ }
+
+ @Bean
+ public OpenAPI customOpenAPI() {
+ return new OpenAPI()
+ .info(new Info().title("系统管理服务API接口文档")
+ .version("6.5.0-LTS")
+ .description("系统管理服务API接口文档")
+ .termsOfService("https://www.bocloud.com")
+ .license(new License().name("Apache 2.0").url("https://www.bocloud.com")));
+ }
+}
diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/WebInterceptorConfiguration.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/WebInterceptorConfiguration.java
new file mode 100644
index 0000000..1c5d035
--- /dev/null
+++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/WebInterceptorConfiguration.java
@@ -0,0 +1,108 @@
+package com.bocloud.sms.booter.config;
+
+import com.bocloud.cmp.boot.config.PagerArgumentResolver;
+import com.bocloud.cmp.boot.interceptor.AccessInterceptor;
+import com.bocloud.cmp.boot.interceptor.LogInterceptor;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.MapperFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.megatron.framework.core.InterceptorBridge;
+import com.megatron.framework.core.config.InterceptorConfiguration;
+import com.megatron.framework.core.domain.InterceptorEntity;
+import lombok.extern.slf4j.Slf4j;
+import org.reflections.Reflections;
+import org.reflections.scanners.Scanner;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.http.converter.ByteArrayHttpMessageConverter;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+import org.springframework.stereotype.Component;
+import org.springframework.web.method.support.HandlerMethodArgumentResolver;
+
+import java.nio.charset.Charset;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 拦截器配置类
+ *
+ * @author wangyu
+ * @version 1.0
+ * @since 2018年3月30日
+ */
+@Slf4j
+@Component
+public class WebInterceptorConfiguration implements InterceptorConfiguration {
+
+ private static final String[] ACCESS_EXCLUDES = new String[]{"/*/*.css",
+ "/*/*.js", "/*/*.png", "/*/*.jpg", "/*/*.jpeg", "/*.html", "/*/*.html", "/swagger-resources/**",
+ "/favicon.ico", "/webjars/**", "/v2/**", "/swagger-ui.html/**", "/v1/log/**", "/v1/logo", "/v1/configs", "/v1/*/login",
+ "/v1/logview", "/v1/logzip", "/status/**", "/v1/tokens", "/v1/config/captcha/install", "/v1/status/sid",
+ "/v1/config/license/install", "/v1/config/status/", "/v1/status/sids", "/status", "/status/db",
+ "/error", "/v1/*/info", "/v1/*/status", "/v1/config/**", "/v1/status/**", "/v1/config/license",
+ "/v3/api-docs/**", "/v1/autologin", "/v1/single/login"};
+ private static final String[] LOG_EXCLUDES = new String[]{"/*/*.css",
+ "/*/*.js", "/*/*.png", "/*/*.jpg", "/*/*.jpeg", "/*.html", "/*/*.html", "/swagger-resources/**", "/favicon.ico",
+ "/webjars/**", "/v2/**", "/swagger-ui.html/**", "/error", "/v3/api-docs/**"};
+ private static final String[] INCLUDES = new String[]{"/**"};
+ private final LogInterceptor logInterceptor;
+ private final AccessInterceptor accessInterceptor;
+
+ @Autowired
+ public WebInterceptorConfiguration(AccessInterceptor accessInterceptor, LogInterceptor logInterceptor) {
+ this.logInterceptor = logInterceptor;
+ this.accessInterceptor = accessInterceptor;
+ }
+
+ @Override
+ public InterceptorBridge buildBridge() {
+ log.info("start to build interceptor bridge ...");
+ InterceptorEntity accessEntity = InterceptorEntity.builder().interceptor(accessInterceptor).includes(INCLUDES).excludes(ACCESS_EXCLUDES).order(0).build();
+ InterceptorEntity auditLogEntity = InterceptorEntity.builder().interceptor(logInterceptor).includes(INCLUDES).excludes(LOG_EXCLUDES).order(1).build();
+
+ List interceptors = new ArrayList<>();
+ interceptors.add(accessEntity);
+ interceptors.add(auditLogEntity);
+
+ List resolvers = new ArrayList<>();
+ resolvers.add(new PagerArgumentResolver());
+
+ List> converters = new ArrayList<>();
+ converters.add(this.byteConverter());
+ converters.add(this.jsonConverter());
+
+ InterceptorBridge bridge = new InterceptorBridge();
+ bridge.setInterceptors(interceptors);
+ bridge.setResolvers(resolvers);
+ bridge.setMessageConverters(converters);
+
+ log.info("build interceptor bridge success!!!");
+ return bridge;
+ }
+
+ private HttpMessageConverter> byteConverter() {
+ return new ByteArrayHttpMessageConverter();
+ }
+
+ private HttpMessageConverter> jsonConverter() {
+ ObjectMapper objectMapper = new ObjectMapper();
+ objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS, true);
+ objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ Reflections reflections = new Reflections("com", new Scanner[0]);
+ Set> classSet = reflections.getTypesAnnotatedWith(JsonTypeName.class);
+ objectMapper.registerSubtypes(classSet);
+ objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
+
+ MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
+ jackson2HttpMessageConverter.setDefaultCharset(Charset.defaultCharset());
+ jackson2HttpMessageConverter.setObjectMapper(objectMapper);
+ jackson2HttpMessageConverter.setPrettyPrint(true);
+ jackson2HttpMessageConverter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));
+ return jackson2HttpMessageConverter;
+ }
+}
diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/WebSocketConfiguration.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/WebSocketConfiguration.java
new file mode 100644
index 0000000..d13073e
--- /dev/null
+++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/WebSocketConfiguration.java
@@ -0,0 +1,71 @@
+package com.bocloud.sms.booter.config;
+
+import com.bocloud.sms.booter.websocket.logview.LogViewHandler;
+import com.bocloud.sms.booter.websocket.message.MessageHandler;
+import com.bocloud.sms.booter.websocket.message.MessageInterceptor;
+import com.bocloud.sms.booter.websocket.upload.UploadServiceHandler;
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.config.annotation.EnableWebSocket;
+import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
+import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+import org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean;
+import org.springframework.web.socket.server.support.DefaultHandshakeHandler;
+
+/**
+ * 拦截器配置类
+ *
+ * @author tyl
+ * @version 1.0
+ * @since 2021年3月25日
+ */
+@Configuration
+@EnableWebSocket
+@RequiredArgsConstructor
+public class WebSocketConfiguration implements WebSocketConfigurer {
+
+ private final MessageInterceptor messageInterceptor;
+ private final MessageHandler messageHandler;
+ private final LogViewHandler logViewHandler;
+ private final UploadServiceHandler uploadServiceHandler;
+
+ @Bean
+ public ServerEndpointExporter serverEndpointExporter() {
+ return new ServerEndpointExporter();
+ }
+
+ @Bean
+ public DefaultHandshakeHandler handshakeHandler() {
+ return new DefaultHandshakeHandler();
+ }
+
+ @Bean
+ public ServletServerContainerFactoryBean createWebSocketContainer() {
+ ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();
+ container.setMaxTextMessageBufferSize(10240);
+ container.setMaxBinaryMessageBufferSize(5 * 1024 * 1024);
+ return container;
+ }
+
+ @Override
+ public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
+ // 注册普通消息服务
+ registry.addHandler(messageHandler, "/messageService").addInterceptors(messageInterceptor)
+ .setHandshakeHandler(handshakeHandler()).setAllowedOrigins("*");
+ registry.addHandler(messageHandler, "/sockjs/messageService").addInterceptors(messageInterceptor)
+ .setHandshakeHandler(handshakeHandler()).setAllowedOrigins("*").withSockJS();
+ // 注册日志查看消息服务
+ registry.addHandler(logViewHandler, "/logViewService").addInterceptors(messageInterceptor)
+ .setHandshakeHandler(handshakeHandler()).setAllowedOrigins("*");
+ registry.addHandler(logViewHandler, "/sockjs/logViewService").addInterceptors(messageInterceptor)
+ .setHandshakeHandler(handshakeHandler()).setAllowedOrigins("*").withSockJS();
+ // 普通文件上传消息服务
+ registry.addHandler(this.uploadServiceHandler, "/uploadService").addInterceptors(messageInterceptor)
+ .setHandshakeHandler(handshakeHandler()).setAllowedOrigins("*");
+ registry.addHandler(this.uploadServiceHandler, "/sockjs/uploadService")
+ .addInterceptors(this.messageInterceptor).setHandshakeHandler(handshakeHandler()).setAllowedOrigins("*")
+ .withSockJS();
+ }
+}
diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/WhiteApiCache.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/WhiteApiCache.java
new file mode 100644
index 0000000..7c55615
--- /dev/null
+++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/config/WhiteApiCache.java
@@ -0,0 +1,39 @@
+package com.bocloud.sms.booter.config;
+
+import com.alibaba.fastjson.JSONObject;
+import com.google.common.collect.Lists;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * api权限白名单设置
+ *
+ * @author tyl
+ * @since 2021/3/9 18:10
+ */
+@Component
+public class WhiteApiCache implements InitializingBean {
+ private final StringRedisTemplate redisTemplate;
+ private final ThreadPoolTaskExecutor taskExecutor;
+
+ public WhiteApiCache(StringRedisTemplate redisTemplate, ThreadPoolTaskExecutor taskExecutor) {
+ this.redisTemplate = redisTemplate;
+ this.taskExecutor = taskExecutor;
+ }
+
+
+ @Override
+ public void afterPropertiesSet() {
+ taskExecutor.execute(() -> {
+ //设置白名单
+ List whiteList = Lists.newArrayList("^GET:/v1/users/permissions$",
+ "^GET:/v1/login/detail$", "^GET:/v1/messages$", "^GET:/v1/token$",
+ "^POST:/v1/users/logout$", "^POST:/v1/tenants/logout$", "^GET:/v1/config/license$", "^GET:/v1/roles/ids$");
+ redisTemplate.opsForValue().set("permission_white", JSONObject.toJSONString(whiteList));
+ });
+ }
+}
diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/AdmissionController.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/AdmissionController.java
new file mode 100644
index 0000000..2239f2d
--- /dev/null
+++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/AdmissionController.java
@@ -0,0 +1,107 @@
+package com.bocloud.sms.booter.controller;
+
+import com.bocloud.sms.entity.Admission;
+import com.bocloud.sms.interfaces.AdmissionService;
+import com.bocloud.sms.model.AdmissionModel;
+import com.bocloud.sms.service.utils.AdmissionUtil;
+import com.megatron.common.model.*;
+import com.megatron.common.utils.Common;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.util.Assert;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * ip访问限制控制器
+ *
+ * @author wangyu
+ * @version 4.2.1-SNAPSHOT
+ * @since 2019/11/12
+ */
+@RestController
+@RequestMapping("/v1/admissions")
+@Tag(name = "IP限制管理")
+public class AdmissionController {
+
+ private final AdmissionService admissionService;
+ private final AdmissionUtil admissionUtil;
+
+ public AdmissionController(AdmissionService admissionService, AdmissionUtil admissionUtil) {
+ this.admissionService = admissionService;
+ this.admissionUtil = admissionUtil;
+ }
+
+ /**
+ * 获取IP访问限制列表
+ *
+ * @param pager 分页参数
+ * @return 分页数据
+ */
+ @Operation(summary = "查询IP访问限制列表")
+ @GetMapping
+ public GeneralResult> list(Pager pager) {
+ return admissionService.list(pager);
+ }
+
+ /**
+ * 添加IP访问限制
+ *
+ * @param admissionModel ip和类型
+ * @return 是否添加成功
+ */
+ @Operation(summary = "创建IP访问限制")
+ @PostMapping
+ public Result create(@RequestBody AdmissionModel admissionModel,
+ @Value(Common.REQ_CONTEXT) RequestContext requestContext) {
+ Assert.notNull(admissionModel, "请求参数不能为空");
+ Result result = admissionService.create(admissionModel, requestContext);
+ if (result.isSuccess()) {
+ admissionUtil.refresh();
+ }
+ return result;
+ }
+
+ /**
+ * 删除IP访问限制
+ *
+ * @param id 被删除的id
+ * @return 是否删除成功
+ */
+ @Operation(summary = "删除IP访问限制")
+ @DeleteMapping("/{id}")
+ public Result remove(@PathVariable(value = Common.ID) Long id) {
+ Result result = admissionService.remove(id);
+ if (result.isSuccess()) {
+ admissionUtil.refresh();
+ }
+ return result;
+ }
+
+ /**
+ * 查看IP访问限制详情
+ *
+ * @param id 被查看的数据id
+ * @return id访问限制
+ */
+ @Operation(summary = "查看IP访问限制")
+ @GetMapping("/{id}")
+ public GeneralResult detail(@PathVariable(value = Common.ID) Long id) {
+ return admissionService.detail(id);
+ }
+
+ /**
+ * 批量删除IP访问限制
+ *
+ * @param ids 被删除的id列表
+ * @return 删除结果
+ */
+ @Operation(summary = "批量删除IP访问限制")
+ @DeleteMapping
+ public Result batchRemove(@RequestBody List ids) {
+ return admissionService.batchRemove(ids);
+ }
+
+}
diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/ApiTokenController.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/ApiTokenController.java
new file mode 100644
index 0000000..49c8ebe
--- /dev/null
+++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/ApiTokenController.java
@@ -0,0 +1,85 @@
+package com.bocloud.sms.booter.controller;
+
+import com.bocloud.sms.entity.ApiToken;
+import com.bocloud.sms.interfaces.ApiTokenService;
+import com.megatron.common.model.GeneralResult;
+import com.megatron.common.model.GridBean;
+import com.megatron.common.model.Pager;
+import com.megatron.common.model.RequestContext;
+import com.megatron.common.utils.Common;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * api token访问限制控制器
+ */
+@RestController
+@RequestMapping("/v1/api/tokens")
+@Tag(name = "API Token管理")
+public class ApiTokenController {
+
+ @Autowired
+ private ApiTokenService apiTokenService;
+
+ @GetMapping("/check/{token}")
+ @Operation(summary = "查看API Token")
+ public GeneralResult detail(@PathVariable(value = Common.TOKEN) String token) {
+ return apiTokenService.get(token);
+ }
+
+ /**
+ * 创建Token
+ *
+ * @param token
+ * @param context
+ * @return
+ */
+ @PostMapping
+ @Operation(summary = "创建 ApiToken")
+ public GeneralResult create(@RequestBody ApiToken token, @Value(Common.REQ_CONTEXT) RequestContext context) {
+ return apiTokenService.create(token, context);
+ }
+
+ /**
+ * 查询Api token列表
+ *
+ * @param pager
+ * @param context
+ * @return
+ */
+ @GetMapping
+ @Operation(summary = "查看API Token列表")
+ public GeneralResult> list(Pager pager, @Value(Common.REQ_CONTEXT) RequestContext context) {
+ return apiTokenService.list(pager, context);
+ }
+
+ /**
+ * 修改Api token
+ *
+ * @param token
+ * @param context
+ * @return
+ */
+ @PutMapping
+ @Operation(summary = "修改API Token")
+ public GeneralResult modify(@RequestBody ApiToken token, @Value(Common.REQ_CONTEXT) RequestContext context) {
+ return apiTokenService.modify(token, context);
+ }
+
+ /**
+ * 移除Api Token
+ *
+ * @param id
+ * @param context
+ * @return
+ */
+ @DeleteMapping("/{id}")
+ @Operation(summary = "移除Api Token")
+ public GeneralResult remove(@PathVariable(value = Common.ID) Long id, @Value(Common.REQ_CONTEXT) RequestContext context) {
+ return apiTokenService.remove(id, context);
+ }
+
+}
diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/AutoLoginController.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/AutoLoginController.java
new file mode 100644
index 0000000..d100f38
--- /dev/null
+++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/AutoLoginController.java
@@ -0,0 +1,29 @@
+package com.bocloud.sms.booter.controller;
+
+import com.bocloud.sms.interfaces.AutoLoginService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.servlet.view.RedirectView;
+
+@RestController
+@RequestMapping("/v1/autologin")
+@Tag(name = "自动登录")
+public class AutoLoginController {
+
+ @Autowired
+ private AutoLoginService autoLoginService;
+
+ @GetMapping()
+ @Operation(summary = "查看API Token")
+ public RedirectView autoLogin(
+ @RequestHeader(value = "x-forwarded-host", required = false) String host,
+ HttpServletRequest request) {
+ return autoLoginService.autoLogin(host, request);
+ }
+}
diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/BusinessController.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/BusinessController.java
new file mode 100644
index 0000000..a90d42b
--- /dev/null
+++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/BusinessController.java
@@ -0,0 +1,221 @@
+package com.bocloud.sms.booter.controller;
+
+import com.bocloud.sms.entity.Business;
+import com.bocloud.sms.entity.Project;
+import com.bocloud.sms.interfaces.BusinessService;
+import com.bocloud.sms.model.BusinessModel;
+import com.megatron.common.model.*;
+import com.megatron.common.utils.Common;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+
+/**
+ * @author tyl
+ * @time 2020/6/3 周三 15:29
+ */
+@RestController
+@RequestMapping("/v1/bizs")
+@Tag(name = "业务管理")
+@Slf4j
+public class BusinessController {
+
+ private final BusinessService businessService;
+
+ public BusinessController(BusinessService businessService) {
+ this.businessService = businessService;
+ }
+
+ /**
+ * 查看业务列表
+ *
+ * @param pager 分页参数
+ * @return 分页查询数据
+ */
+ @Operation(summary = "查看业务列表")
+ @GetMapping
+ public GeneralResult> list(Pager pager,
+ @Value(Common.REQ_CONTEXT) RequestContext requestContext) {
+ return businessService.list(pager, requestContext);
+ }
+
+ /**
+ * 添加业务
+ *
+ * @param businessModel 要添加的业务
+ * @param requestContext 请求上下文
+ * @return 是否添加成功
+ */
+ @Operation(summary = "添加业务")
+ @PostMapping
+ public Result create(@RequestBody BusinessModel businessModel,
+ @Value(Common.REQ_CONTEXT) RequestContext requestContext) {
+ return businessService.create(businessModel, requestContext);
+ }
+
+ /**
+ * 修改业务
+ *
+ * @param id 被修改的业务id
+ * @param businessModel 修改的数据
+ * @param requestContext 请求上下文
+ * @return 修改结果
+ */
+ @Operation(summary = "修改业务")
+ @PutMapping("/{id}")
+ public Result modify(@PathVariable(value = Common.ID) Long id,
+ @RequestBody BusinessModel businessModel, @Value(Common.REQ_CONTEXT) RequestContext requestContext) {
+ return businessService.modify(id, businessModel, requestContext);
+ }
+
+ /**
+ * 删除业务
+ *
+ * @param id 被删除的业务id
+ * @param requestContext 请求上下文
+ * @return 删除结果
+ */
+ @Operation(summary = "删除业务")
+ @DeleteMapping("/{id}")
+ public Result remove(@PathVariable(value = Common.ID) Long id,
+ @Value(Common.REQ_CONTEXT) RequestContext requestContext) {
+ return businessService.remove(id, requestContext);
+ }
+
+ /**
+ * 批量删除业务
+ *
+ * @param ids 被删除的业务id列表
+ * @param requestContext 请求上下文
+ * @return 删除结果
+ */
+ @Operation(summary = "批量删除业务")
+ @DeleteMapping
+ public Result batchRemove(@RequestBody List ids,
+ @Value(Common.REQ_CONTEXT) RequestContext requestContext) {
+ return businessService.batchRemove(ids, requestContext);
+ }
+
+ /**
+ * 查看业务明细
+ *
+ * @param id 被查看的业务id
+ * @return 业务实体类
+ */
+ @Operation(summary = "查看业务明细")
+ @GetMapping("/{id}")
+ public GeneralResult detail(@PathVariable(value = Common.ID) Long id) {
+ return businessService.detail(id);
+ }
+
+ /**
+ * 查看业务下项目
+ *
+ * @param id 业务id
+ * @return 项目列表
+ */
+ @Operation(summary = "查看业务下项目")
+ @GetMapping("/{id}/projects")
+ public GeneralResult> projects(
+ @PathVariable(value = Common.ID) Long id) {
+ return businessService.listBusinessProject(id);
+ }
+
+ /**
+ * 配置业务项目
+ *
+ * @param id 业务id
+ * @param projectIds 项目id列表
+ * @return 配置结果
+ */
+ @Operation(summary = "配置业务项目")
+ @PatchMapping("/{id}")
+ public Result businessAction(@PathVariable(value = Common.ID) Long id,
+ @RequestBody List projectIds) {
+ return businessService.businessAction(id, projectIds);
+ }
+
+ /**
+ * 导出业务列表
+ *
+ * @param pager 分页参数
+ * @param requestContext 上下文
+ */
+ @Deprecated
+ @Operation(summary = "导出项目列表")
+ @RequestMapping(value = "/export", method = {RequestMethod.GET})
+ public void export(Pager pager,
+ @Value(Common.REQ_CONTEXT) RequestContext requestContext, HttpServletRequest request,
+ HttpServletResponse response) {
+ List paramList = pager.getParams();
+ try {
+ XSSFWorkbook workbook = businessService.export(paramList, requestContext);
+ // 下载表格到浏览器
+ response.setCharacterEncoding("utf-8");
+ response.setContentType("application/octet-stream");
+ String fileName = "业务统计数据" + System.currentTimeMillis() + ".xlsx";
+ final String userAgent = request.getHeader("user-agent").toLowerCase();
+ if (userAgent.contains("trident") || userAgent.contains("edge")) {
+ fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8);
+ } else {
+ fileName = new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
+ }
+ response.setHeader("Content-Disposition", "attachment;fileName=" + fileName);
+ OutputStream os = response.getOutputStream();
+ workbook.write(os);
+ os.flush();
+ os.close();
+ } catch (Exception e) {
+ log.error("export project error,", e);
+ }
+ }
+
+ /**
+ * 下载业务列表模板
+ *
+ * @param response 浏览器响应
+ */
+ @Operation(summary = "下载业务列表模板")
+ @RequestMapping(value = "/import/template", method = {RequestMethod.GET})
+ public void importTemp(HttpServletResponse response) {
+ businessService.importTemp(response);
+ }
+
+ /**
+ * 导入业务列表
+ *
+ * @param requestContext 请求上下文
+ * @param request 请求参数
+ * @return 导入结果
+ */
+ @Operation(summary = "导入业务列表")
+ @PostMapping(value = "/import")
+ public Result importData(@Value(Common.REQ_CONTEXT) RequestContext requestContext, HttpServletRequest request) {
+ MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+ List fileList = multipartRequest.getFiles("file");
+ if (fileList.isEmpty()) {
+ return new Result(false, "文件错误");
+ }
+ MultipartFile multipartFile = fileList.get(0);
+ String originalFilename = multipartFile.getOriginalFilename();
+ // 判断文件名
+ if (originalFilename == null || !(originalFilename.endsWith(".xls") || originalFilename.endsWith(".xlsx"))) {
+ return new Result(false, "文件错误");
+ }
+ return businessService.importData(multipartFile, requestContext);
+ }
+
+}
+
diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/ConfigController.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/ConfigController.java
new file mode 100644
index 0000000..c52e65f
--- /dev/null
+++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/ConfigController.java
@@ -0,0 +1,167 @@
+package com.bocloud.sms.booter.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.bocloud.cmp.boot.model.BoCloudExchange;
+import com.bocloud.sms.model.LicenseMask;
+import com.megatron.common.http.HttpClient;
+import com.megatron.common.model.GeneralResult;
+import com.megatron.common.model.License;
+import com.megatron.common.model.Result;
+import com.megatron.common.utils.Common;
+import com.megatron.framework.core.CurrentService;
+import com.megatron.framework.license.LicenseDaemon;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.core.AmqpTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+
+/**
+ * 服务节点信息
+ *
+ * @author weiwei
+ */
+@Slf4j
+@RestController
+@RequestMapping("/v1")
+@Tag(name = "服务节点信息管理")
+public class ConfigController {
+
+ private static final String LICENSE_SUCCESS = "证书激活成功";
+ private static final String LICENSE_FAILED = "证书激活失败";
+ private final LicenseDaemon licenseDaemon;
+ @Value("${service.host:127.0.0.1}")
+ private String host;
+ @Value("${server.port:18088}")
+ private String port;
+ @Autowired
+ private AmqpTemplate amqpTemplate;
+
+ public ConfigController(CurrentService currentService) {
+ this.licenseDaemon = LicenseDaemon.instance(currentService);
+ }
+
+
+ /**
+ * 查询云管license信息
+ *
+ * @return license信息
+ */
+ @Operation(summary = "查询云管license信息")
+ @GetMapping("/config/license")
+ public GeneralResult license() {
+ License license = licenseDaemon.content();
+ return new GeneralResult<>(true, license, "查询成功");
+ }
+
+ /**
+ * 系统状态信息
+ *
+ * @param value 系统url
+ * @return 系统状态信息
+ */
+ @Operation(summary = "系统状态信息")
+ @GetMapping("/config/status")
+ public GeneralResult status(@RequestParam(value = Common.VALUE) String value) {
+ HttpClient client = new HttpClient();
+ String message = client.get(value).getMessage();
+ return JSONObject.parseObject(message, GeneralResult.class);
+ }
+
+ /**
+ * 安装证书
+ *
+ * @param file 证书文件
+ * @return 安装结果
+ */
+ @Operation(summary = "安装证书")
+ @PostMapping("/config/license/install")
+ public Result licenseInstall(@RequestParam("file") MultipartFile file) {
+ if (file.isEmpty()) {
+ return new Result(false, "证书为空!");
+ }
+ Result result;
+ try {
+ result = licenseDaemon.verify(file.getBytes());
+ if (result.isFailed()) {
+ log.error("证书校验失败");
+ return new Result(false, LICENSE_FAILED);
+ }
+ result = licenseDaemon.install(file.getBytes());
+ if (result.isSuccess()) {
+ return new Result(true, LICENSE_SUCCESS);
+ }
+ return new Result(false, LICENSE_FAILED);
+ } catch (IOException e) {
+ log.error("证书激活异常:", e);
+ return new Result(false, LICENSE_FAILED);
+ }
+ }
+
+ /**
+ * 安装license验证码
+ *
+ * @param licenseMask license验证码
+ * @return 安装结果
+ */
+ @Operation(summary = "安装license验证码")
+ @PostMapping("/config/captcha/install")
+ public Result captchaInstall(@RequestBody LicenseMask licenseMask) {
+ try {
+ GeneralResult GeneralResult = licenseDaemon.decode(licenseMask.getLicenseMask());
+ if (GeneralResult.isFailed()) {
+ log.error("证书激活码格式有误,激活失败!");
+ return new Result(false, LICENSE_FAILED);
+ }
+ Result result = licenseDaemon.verify(GeneralResult.getData());
+ if (result.isFailed()) {
+ log.error("证书格式不正确!");
+ return new Result(false, LICENSE_FAILED);
+ }
+ result = licenseDaemon.install(GeneralResult.getData());
+ if (result.isFailed()) {
+ log.error("证书安装失败");
+ return new Result(false, LICENSE_FAILED);
+ }
+ amqpTemplate.convertAndSend(BoCloudExchange.Default.DIRECT.getExchange(),
+ "license.install.queue", LICENSE_SUCCESS);
+ return new Result(true, LICENSE_SUCCESS);
+ } catch (Exception e) {
+ log.error("证书激活异常!", e);
+ return new Result(false, LICENSE_FAILED);
+ }
+ }
+
+ /**
+ * 系统sid信息
+ *
+ * @return sid信息
+ */
+ @Operation(summary = "系统状态信息")
+ @GetMapping("/status/sid")
+ public GeneralResult getSid() {
+ HttpClient client = new HttpClient();
+ String url = "http://" + host + ":" + port + "/status/sid";
+ String message = client.get(url).getMessage();
+ return JSONObject.parseObject(message, GeneralResult.class);
+ }
+
+ /**
+ * 系统sid信息
+ *
+ * @return sid信息列表
+ */
+ @Operation(summary = "系统状态信息")
+ @GetMapping("/status/sids")
+ public GeneralResult getSids() {
+ HttpClient client = new HttpClient();
+ String url = "http://" + host + ":" + port + "/status/sids";
+ String message = client.get(url).getMessage();
+ return JSONObject.parseObject(message, GeneralResult.class);
+ }
+}
diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/DepartmentController.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/DepartmentController.java
new file mode 100644
index 0000000..353d23d
--- /dev/null
+++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/DepartmentController.java
@@ -0,0 +1,117 @@
+package com.bocloud.sms.booter.controller;
+
+import com.bocloud.sms.entity.Department;
+import com.bocloud.sms.entity.User;
+import com.bocloud.sms.interfaces.DepartmentService;
+import com.bocloud.sms.model.DepartmentModel;
+import com.megatron.common.model.GeneralResult;
+import com.megatron.common.model.RequestContext;
+import com.megatron.common.model.Result;
+import com.megatron.common.utils.Common;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 组织管理控制器
+ *
+ * @author tyl
+ * @since 2021/03/25
+ */
+@RestController
+@RequestMapping("/v1/departments")
+@Tag(name = "组织管理")
+public class DepartmentController {
+
+ private final DepartmentService departmentService;
+
+ public DepartmentController(DepartmentService departmentService) {
+ this.departmentService = departmentService;
+ }
+
+ /**
+ * 查询组织机构
+ *
+ * @param parentId 父组织id
+ * @param requestContext 上下文
+ * @return 组织机构列表
+ */
+ @GetMapping
+ @Operation(summary = "组织机构列表显示")
+ public GeneralResult> list(@RequestParam(value = Common.PARENTID) Long parentId, @Value(Common.REQ_CONTEXT) RequestContext requestContext) {
+ return departmentService.list(parentId, requestContext);
+ }
+
+ /**
+ * 查询组织机构下的管理员
+ *
+ * @param id 组织id
+ * @param requestContext 上下文
+ * @return 管理员信息
+ */
+ @GetMapping("/{id}/managers")
+ @Operation(summary = "查询组织机构下的管理员")
+ public GeneralResult> listDeptManager(@PathVariable(value = Common.ID) Long id, RequestContext requestContext) {
+ return departmentService.listDeptManager(id, requestContext);
+ }
+
+ /**
+ * 创建组织机构
+ *
+ * @param department 组织
+ * @param requestContext 上下文
+ * @return 创建结果
+ */
+ @Operation(summary = "创建组织机构")
+ @PostMapping
+ public Result create(@RequestBody DepartmentModel department,
+ @Value(Common.REQ_CONTEXT) RequestContext requestContext) {
+ return departmentService.create(department, requestContext);
+ }
+
+ /**
+ * 修改组织机构
+ *
+ * @param id 组织id
+ * @param department 组织
+ * @param requestContext 上下文
+ * @return 修改结果
+ */
+ @Operation(summary = "修改组织机构")
+ @PutMapping("/{id}")
+ public Result modify(@PathVariable(value = Common.ID) Long id,
+ @RequestBody DepartmentModel department,
+ @Value(Common.REQ_CONTEXT) RequestContext requestContext) {
+ return departmentService.modify(id, department, requestContext);
+ }
+
+ /**
+ * 删除组织机构
+ *
+ * @param id 组织id
+ * @param requestContext 上下文
+ * @return 删除结果
+ */
+ @Operation(summary = "删除组织机构")
+ @DeleteMapping("/{id}")
+ public Result remove(@PathVariable(value = Common.ID) Long id,
+ @Value(Common.REQ_CONTEXT) RequestContext requestContext) {
+ return departmentService.remove(id, requestContext);
+ }
+
+ /**
+ * 查询组织机构详情
+ *
+ * @param id 组织id
+ * @return 组织
+ */
+ @Operation(summary = "组织机构详情")
+ @GetMapping("/{id}")
+ public GeneralResult detail(@PathVariable(value = Common.ID) Long id) {
+ return departmentService.detail(id);
+ }
+
+}
diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/DictController.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/DictController.java
new file mode 100644
index 0000000..0a57cdf
--- /dev/null
+++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/DictController.java
@@ -0,0 +1,106 @@
+package com.bocloud.sms.booter.controller;
+
+import com.bocloud.sms.entity.Dictionary;
+import com.bocloud.sms.interfaces.DictService;
+import com.bocloud.sms.model.DictionaryBean;
+import com.megatron.common.model.GeneralResult;
+import com.megatron.common.model.Result;
+import com.megatron.common.utils.Common;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 字典信息控制器
+ *
+ * @author dmw
+ */
+@RestController
+@RequestMapping("/v1/dictionaries")
+@Tag(name = "字典信息管理")
+public class DictController {
+ private final DictService dictService;
+
+ public DictController(DictService dictService) {
+ this.dictService = dictService;
+ }
+
+ @Operation(summary = "查询字典树列表")
+ @GetMapping
+ public GeneralResult> list(@RequestParam(value = "pid", required = false) Long pid) {
+ return dictService.list(pid);
+ }
+
+ @Operation(summary = "根据id查询字典")
+ @GetMapping("/{id}")
+ public GeneralResult detail(@PathVariable(value = "id") Long id) {
+ return dictService.detail(id);
+ }
+
+ /**
+ * 根据字典值获取子节点列表
+ *
+ * @param value 字典值
+ * @return 子节点列表
+ */
+ @Operation(summary = "查询系统字典子信息")
+ @GetMapping("/children")
+ public GeneralResult> children(@RequestParam(value = Common.VALUE, required = false) String value,
+ @RequestParam(value = "pid", required = false) Long pid) {
+ return dictService.listChild(value, pid);
+ }
+
+ /**
+ * 查询字典树
+ *
+ * @param value 字典值
+ * @return 字典树
+ */
+ @Operation(summary = "查询字典树")
+ @GetMapping("/children/tree")
+ public GeneralResult> childTree(@RequestParam(value = Common.VALUE, required = false) String value) {
+ return dictService.childTree(value);
+ }
+
+ /**
+ * 创建
+ *
+ * @param dictionary 字典数据
+ * @return 创建结果
+ */
+ @Operation(summary = "新增字典")
+ @PostMapping
+ public GeneralResult create(@RequestBody Dictionary dictionary) {
+ return dictService.create(dictionary);
+ }
+
+ /**
+ * 删除字典
+ *
+ * @param id 字典id
+ * @return 删除结果
+ */
+ @Operation(summary = "删除字典")
+ @DeleteMapping("/{id}")
+ public Result remove(@PathVariable(value = Common.ID) Long id) {
+ return dictService.remove(id);
+ }
+
+ /**
+ * 修改字典
+ *
+ * @param id 字典id
+ * @param bean 字典
+ * @return 修改结果
+ */
+ @Operation(summary = "修改字典")
+ @PutMapping("/{id}")
+ public GeneralResult modify(@PathVariable(value = Common.ID) Long id,
+ @RequestBody DictionaryBean bean) {
+ bean.setId(id);
+ return dictService.modify(bean);
+ }
+
+}
diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/DispatchController.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/DispatchController.java
new file mode 100644
index 0000000..9fbbb91
--- /dev/null
+++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/DispatchController.java
@@ -0,0 +1,96 @@
+package com.bocloud.sms.booter.controller;
+
+import com.auth0.jwt.interfaces.Claim;
+import com.bocloud.sms.entity.SystemConfig;
+import com.bocloud.sms.repository.SystemConfigRepository;
+import com.megatron.common.utils.Common;
+import com.megatron.common.utils.Tokens;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpSession;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import java.util.Objects;
+import java.util.Optional;
+
+/**
+ * @author tyl
+ * {@code @time} 2020/4/24 周五 20:02
+ */
+@Slf4j
+@Controller
+@RequestMapping
+@Tag(name = "跳转控制")
+public class DispatchController {
+
+ private final SystemConfigRepository configRepository;
+ private final StringRedisTemplate redisTemplate;
+
+
+ public DispatchController(SystemConfigRepository systemConfigService, StringRedisTemplate redisTemplate) {
+ this.configRepository = systemConfigService;
+ this.redisTemplate = redisTemplate;
+ }
+
+ /**
+ * 单点登录跳转接口
+ *
+ * @param request 浏览器请求
+ * @param response 浏览器响应
+ * @throws Exception 出现的异常
+ */
+
+ @RequestMapping("/v1/redirect")
+ @Operation(summary = "单点登录跳转")
+ public void redirect(HttpServletRequest request, HttpServletResponse response) throws Exception {
+ //获取登录地址
+ String target = request.getParameter("target");
+ String redirectParameter = request.getParameter("redirect");
+ SystemConfig config;
+ if (target == null || "Manager".equals(target)) {
+ config = configRepository.queryByCode("ManagerAddress");
+ } else {
+ config = configRepository.queryByCode("TenantAddress");
+ }
+ String loginAddress = config.getValue();
+ log.info("#######debuge########the request url is {}", request.getRequestURL() + "?" + request.getQueryString());
+ log.info("#######debuge########the redirect url is {}", redirectParameter);
+ String redirect = Optional.ofNullable(redirectParameter).orElse(loginAddress + "/#/");
+ String token = request.getParameter("token");
+ log.info("#######debuge########the redirect token is {}", token);
+ Claim claim = Tokens.parse(token);
+ if (!Objects.isNull(claim)) {
+ String catalog = claim.asMap().get("catalog").toString();
+ long uuid = Long.parseLong(claim.asMap().get(Common.UUID).toString());
+ String tokenKey = Common.TOKEN + "_" + catalog + "_" + uuid;
+ boolean checkResult = check(token, tokenKey);
+ if (checkResult) {
+ HttpSession session = request.getSession();
+ session.setAttribute("redirect", redirect);
+ session.setAttribute(Common.TOKEN, token);
+ response.sendRedirect(loginAddress + "/#/sso");
+ } else {
+ String replace = redirect.replace("#", "%23");
+ response.sendRedirect(loginAddress + "/#/login?redirect=" + replace);
+ }
+ } else {
+ String replace = redirect.replace("#", "%23");
+ response.sendRedirect(loginAddress + "/#/login?redirect=" + replace);
+ }
+ }
+
+ private boolean check(String token, String tokenKey) {
+ String newTokenCache = (String) this.redisTemplate.opsForHash().get(tokenKey + "_n", Common.TOKEN);
+ String oldTokenCache = this.redisTemplate.opsForValue().get(tokenKey + "_o");
+ if (token.equals(newTokenCache)) {
+ return true;
+ } else {
+ return token.equals(oldTokenCache);
+ }
+ }
+}
diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/EnvironmentController.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/EnvironmentController.java
new file mode 100644
index 0000000..fac6d92
--- /dev/null
+++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/EnvironmentController.java
@@ -0,0 +1,99 @@
+package com.bocloud.sms.booter.controller;
+
+import com.bocloud.sms.entity.Environment;
+import com.bocloud.sms.interfaces.EnvironmentService;
+import com.megatron.common.model.GeneralResult;
+import com.megatron.common.model.GridBean;
+import com.megatron.common.model.Pager;
+import com.megatron.common.model.RequestContext;
+import com.megatron.common.utils.Common;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 环境实体类Controller
+ *
+ * @author wangshuai
+ * @version 4.1.0-SNAPSHOT
+ * @since 2018/12/24
+ */
+@RestController
+@RequestMapping("/v1/environments")
+@Tag(name = "所属环境")
+public class EnvironmentController {
+ private final EnvironmentService environmentService;
+
+ public EnvironmentController(EnvironmentService environmentService) {
+ this.environmentService = environmentService;
+ }
+
+ /**
+ * 查看环境列表
+ *
+ * @param pager 分页参数
+ * @return 环境列表
+ */
+ @Operation(summary = "获取所属环境列表")
+ @GetMapping
+ public GeneralResult> list(Pager pager, @Value(Common.REQ_CONTEXT) RequestContext context) {
+ return environmentService.list(pager, context);
+ }
+
+ /**
+ * 添加环境
+ *
+ * @param environment 环境
+ * @param context 上下文
+ * @return 添加结果
+ */
+ @Operation(summary = "添加所属环境")
+ @PostMapping
+ public GeneralResult create(@RequestBody Environment environment,
+ @Value(Common.REQ_CONTEXT) RequestContext context) {
+ return environmentService.create(environment, context);
+ }
+
+ /**
+ * 修改环境
+ *
+ * @param id 环境id
+ * @param environment 环境
+ * @param context 上下文
+ * @return 修改结果
+ */
+ @Operation(summary = "修改所属环境")
+ @PutMapping("/{id}")
+ public GeneralResult modify(@PathVariable(value = Common.ID) Long id, @RequestBody Environment environment,
+ @Value(Common.REQ_CONTEXT) RequestContext context) {
+ environment.setId(id);
+ return environmentService.modify(environment, context);
+ }
+
+ /**
+ * 删除环境
+ *
+ * @param id 环境id
+ * @param context 上下文
+ * @return 删除结果
+ */
+ @Operation(summary = "删除所属环境")
+ @DeleteMapping("/{id}")
+ public GeneralResult remove(@PathVariable(value = Common.ID) Long id,
+ @Value(Common.REQ_CONTEXT) RequestContext context) {
+ return environmentService.remove(id, context);
+ }
+
+ /**
+ * 查看环境明细
+ *
+ * @param id 环境id
+ * @return 环境
+ */
+ @Operation(summary = "查看所属环境详情")
+ @GetMapping("/{id}")
+ public GeneralResult detail(@PathVariable(value = Common.ID) Long id) {
+ return environmentService.detail(id);
+ }
+}
diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/GlobalManConfigController.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/GlobalManConfigController.java
new file mode 100644
index 0000000..d214a76
--- /dev/null
+++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/GlobalManConfigController.java
@@ -0,0 +1,66 @@
+package com.bocloud.sms.booter.controller;
+
+import com.bocloud.sms.entity.GlobalManConfig;
+import com.bocloud.sms.interfaces.GlobalManConfigService;
+import com.megatron.common.model.*;
+import com.megatron.common.utils.Common;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author wpj
+ * @since 2022/9/8
+ */
+@RestController
+@RequestMapping("/v1/global/config")
+@Slf4j
+@Tag(name = "全局运维配置")
+public class GlobalManConfigController {
+
+ private final GlobalManConfigService globalManConfigService;
+
+ public GlobalManConfigController(GlobalManConfigService globalManConfigService) {
+ this.globalManConfigService = globalManConfigService;
+ }
+
+
+ @Operation(summary = "查询周期时间列表")
+ @GetMapping
+ public GeneralResult> list(Pager pager, @Value(Common.REQ_CONTEXT) RequestContext context) {
+ return globalManConfigService.list(pager, context);
+ }
+
+
+ @Operation(summary = "创建禁止周期时间")
+ @PostMapping
+ public Result create(@RequestBody GlobalManConfig globalManConfig,
+ @Value(Common.REQ_CONTEXT) RequestContext requestContext) {
+ return globalManConfigService.create(globalManConfig, requestContext);
+ }
+
+ @Operation(summary = "修改禁止周期时间")
+ @PutMapping("/{id}")
+ public Result modify(@RequestBody GlobalManConfig globalManConfig,
+ @Value(Common.REQ_CONTEXT) RequestContext requestContext) {
+ return globalManConfigService.modify(globalManConfig, requestContext);
+ }
+
+
+ @Operation(summary = "删除禁止周期时间")
+ @DeleteMapping("/{id}")
+ public Result remove(@PathVariable(value = Common.ID) Long id,
+ @Value(Common.REQ_CONTEXT) RequestContext requestContext) {
+ return globalManConfigService.remove(id, requestContext);
+ }
+
+
+ @Operation(summary = "查询当前全局配置是否被禁止")
+ @GetMapping("/isAllow")
+ public Result isAllow(@Value(Common.REQ_CONTEXT) RequestContext requestContext) {
+ return globalManConfigService.allow(requestContext);
+ }
+
+}
diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/IconController.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/IconController.java
new file mode 100644
index 0000000..c01952e
--- /dev/null
+++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/IconController.java
@@ -0,0 +1,66 @@
+package com.bocloud.sms.booter.controller;
+
+import com.bocloud.sms.entity.Icon;
+import com.bocloud.sms.interfaces.IconService;
+import com.megatron.common.model.GeneralResult;
+import com.megatron.common.model.GridBean;
+import com.megatron.common.model.Pager;
+import com.megatron.common.model.RequestContext;
+import com.megatron.common.utils.Common;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 图标controller层
+ *
+ * @author 胡立伟
+ * @Version 1.0
+ * @since 2020年4月7日
+ */
+@RestController
+@RequestMapping("/v1/icon")
+@Tag(name = "图标管理")
+public class IconController {
+ @Autowired
+ private IconService iconService;
+
+ /**
+ * 图标列表查询
+ *
+ * @return 图标列表
+ */
+ @GetMapping
+ @Operation(summary = "图标列表查询")
+ public GeneralResult> list(Pager pager, @Value(Common.REQ_CONTEXT) RequestContext context) {
+ return iconService.list(pager, context);
+ }
+
+ /**
+ * 上传图标
+ *
+ * @param files 图标文件
+ * @param context 上下文
+ * @return 上传结果
+ */
+ @PostMapping()
+ @Operation(summary = "上传图标")
+ public GeneralResult upload(MultipartFile[] files, String category, @Value(Common.REQ_CONTEXT) RequestContext context) {
+ return iconService.create(files, category, context);
+ }
+
+ /**
+ * 删除图标
+ *
+ * @param id 图标id
+ * @return 删除结果
+ */
+ @DeleteMapping(value = "/{id}")
+ @Operation(summary = "删除图标")
+ public GeneralResult remove(@PathVariable(value = Common.ID) Long id) {
+ return iconService.remove(id);
+ }
+}
diff --git a/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/LabelController.java b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/LabelController.java
new file mode 100644
index 0000000..ae3e1e9
--- /dev/null
+++ b/bocloud.sms.booter/src/main/java/com/bocloud/sms/booter/controller/LabelController.java
@@ -0,0 +1,88 @@
+package com.bocloud.sms.booter.controller;
+
+import com.bocloud.sms.entity.Label;
+import com.bocloud.sms.interfaces.LabelService;
+import com.megatron.common.model.*;
+import com.megatron.common.utils.Common;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author zhangdi
+ * @since 2018/7/2
+ */
+@RestController
+@RequestMapping("/v1/tags")
+@Tag(name = "标签管理")
+public class LabelController {
+
+ private final LabelService labelService;
+
+ public LabelController(LabelService labelService) {
+ this.labelService = labelService;
+ }
+
+ /**
+ * 获取标签列表
+ *
+ * @param pager 分页参数
+ * @return 标签列表
+ */
+ @Operation(summary = "获取命名规则列表")
+ @GetMapping
+ public GeneralResult> list(Pager pager, @Value(Common.REQ_CONTEXT) RequestContext context) {
+ return labelService.list(pager, context);
+ }
+
+ /**
+ * 添加标签
+ *
+ * @param label 标签
+ * @return 添加结果
+ */
+ @Operation(summary = "添加标签")
+ @PostMapping
+ public GeneralResult