├── .editorconfig ├── .gitignore ├── LICENSE ├── README.md ├── albedo-common ├── albedo-common-core │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ ├── albedo │ │ │ │ └── java │ │ │ │ │ └── common │ │ │ │ │ └── core │ │ │ │ │ ├── annotation │ │ │ │ │ ├── AnonymousAccess.java │ │ │ │ │ ├── BaseInit.java │ │ │ │ │ ├── BeanField.java │ │ │ │ │ ├── DictType.java │ │ │ │ │ ├── ExcelField.java │ │ │ │ │ ├── ExcelFields.java │ │ │ │ │ ├── Limit.java │ │ │ │ │ └── Query.java │ │ │ │ │ ├── aspect │ │ │ │ │ ├── LimitAspect.java │ │ │ │ │ └── LimitType.java │ │ │ │ │ ├── cache │ │ │ │ │ └── model │ │ │ │ │ │ ├── CacheHashKey.java │ │ │ │ │ │ ├── CacheKey.java │ │ │ │ │ │ └── CacheKeyBuilder.java │ │ │ │ │ ├── config │ │ │ │ │ ├── ApplicationConfig.java │ │ │ │ │ ├── ApplicationProperties.java │ │ │ │ │ ├── AsyncConfiguration.java │ │ │ │ │ ├── FilterIgnoreProperties.java │ │ │ │ │ ├── JacksonBaseConfiguration.java │ │ │ │ │ ├── RestTemplateConfiguration.java │ │ │ │ │ └── async │ │ │ │ │ │ └── ExceptionHandlingAsyncTaskExecutor.java │ │ │ │ │ ├── constant │ │ │ │ │ ├── CacheKeyBuilderConstants.java │ │ │ │ │ ├── CacheNameConstants.java │ │ │ │ │ ├── CommonConstants.java │ │ │ │ │ ├── DictNameConstants.java │ │ │ │ │ ├── ParameterKey.java │ │ │ │ │ ├── ScheduleConstants.java │ │ │ │ │ ├── SecurityConstants.java │ │ │ │ │ └── enums │ │ │ │ │ │ └── LoginTypeEnum.java │ │ │ │ │ ├── context │ │ │ │ │ ├── ContextConstants.java │ │ │ │ │ ├── ContextUtil.java │ │ │ │ │ └── ThreadLocalParam.java │ │ │ │ │ ├── converter │ │ │ │ │ ├── BaseDateConverter.java │ │ │ │ │ └── EnumSerializer.java │ │ │ │ │ ├── domain │ │ │ │ │ ├── BaseDataDo.java │ │ │ │ │ ├── BaseDo.java │ │ │ │ │ ├── GeneralDo.java │ │ │ │ │ ├── IdDo.java │ │ │ │ │ ├── TreeDo.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── AppendixDto.java │ │ │ │ │ │ ├── AppendixVo.java │ │ │ │ │ │ ├── ComboData.java │ │ │ │ │ │ ├── DataDto.java │ │ │ │ │ │ ├── DataVo.java │ │ │ │ │ │ ├── DictQuery.java │ │ │ │ │ │ ├── DictQuerySearch.java │ │ │ │ │ │ ├── DictResult.java │ │ │ │ │ │ ├── DictTreeResult.java │ │ │ │ │ │ ├── EchoVo.java │ │ │ │ │ │ ├── GeneralDto.java │ │ │ │ │ │ ├── Order.java │ │ │ │ │ │ ├── PageModel.java │ │ │ │ │ │ ├── ScheduleVo.java │ │ │ │ │ │ ├── SelectVo.java │ │ │ │ │ │ ├── TreeDto.java │ │ │ │ │ │ ├── TreeNode.java │ │ │ │ │ │ └── TreeVo.java │ │ │ │ │ ├── enumeration │ │ │ │ │ ├── BaseEnum.java │ │ │ │ │ └── FileType.java │ │ │ │ │ ├── exception │ │ │ │ │ ├── AccessDeniedException.java │ │ │ │ │ ├── ArgumentException.java │ │ │ │ │ ├── BadRequestException.java │ │ │ │ │ ├── BaseCheckedException.java │ │ │ │ │ ├── BaseException.java │ │ │ │ │ ├── BaseUncheckedException.java │ │ │ │ │ ├── BizException.java │ │ │ │ │ ├── CheckedException.java │ │ │ │ │ ├── CommonException.java │ │ │ │ │ ├── EntityExistException.java │ │ │ │ │ ├── EntityNotFoundException.java │ │ │ │ │ ├── FeignBizException.java │ │ │ │ │ ├── ForbiddenException.java │ │ │ │ │ ├── RuntimeMsgException.java │ │ │ │ │ ├── TaskException.java │ │ │ │ │ ├── UnauthorizedException.java │ │ │ │ │ ├── ValidateCodeException.java │ │ │ │ │ ├── code │ │ │ │ │ │ ├── BaseExceptionCode.java │ │ │ │ │ │ └── ResponseCode.java │ │ │ │ │ └── handler │ │ │ │ │ │ └── GlobalExceptionHandler.java │ │ │ │ │ ├── jackson │ │ │ │ │ ├── CustomModule.java │ │ │ │ │ ├── JacksonUtil.java │ │ │ │ │ └── databind │ │ │ │ │ │ ├── LocalDateTimeDeserializer.java │ │ │ │ │ │ └── LocalDateTimeSerializer.java │ │ │ │ │ ├── lock │ │ │ │ │ └── DistributedLock.java │ │ │ │ │ ├── resource │ │ │ │ │ └── GeneralResource.java │ │ │ │ │ └── util │ │ │ │ │ ├── ArgumentAssert.java │ │ │ │ │ ├── BeanUtil.java │ │ │ │ │ ├── BeanValidators.java │ │ │ │ │ ├── ClassUtil.java │ │ │ │ │ ├── CollUtil.java │ │ │ │ │ ├── DateUtil.java │ │ │ │ │ ├── DefaultProfileUtil.java │ │ │ │ │ ├── EncryptUtil.java │ │ │ │ │ ├── FileUploadUtil.java │ │ │ │ │ ├── FileUtil.java │ │ │ │ │ ├── FreeMarkers.java │ │ │ │ │ ├── IntHashMap.java │ │ │ │ │ ├── JaxbMapper.java │ │ │ │ │ ├── MapHelper.java │ │ │ │ │ ├── Md5Util.java │ │ │ │ │ ├── MimeTypeUtil.java │ │ │ │ │ ├── ObjectUtil.java │ │ │ │ │ ├── RequestHolder.java │ │ │ │ │ ├── ResponseEntityBuilder.java │ │ │ │ │ ├── Result.java │ │ │ │ │ ├── SecuritySqlUtil.java │ │ │ │ │ ├── SpringContextHolder.java │ │ │ │ │ ├── StrPool.java │ │ │ │ │ ├── StringUtil.java │ │ │ │ │ ├── WebUtil.java │ │ │ │ │ └── tree │ │ │ │ │ ├── TreeNodeAware.java │ │ │ │ │ └── TreeUtil.java │ │ │ │ └── fasterxml │ │ │ │ └── jackson │ │ │ │ └── databind │ │ │ │ └── deser │ │ │ │ └── std │ │ │ │ └── EnumDeserializer.java │ │ └── resources │ │ │ ├── META-INF │ │ │ └── spring.factories │ │ │ └── logback-spring.xml │ │ └── test │ │ ├── java │ │ └── com │ │ │ └── albedo │ │ │ └── java │ │ │ └── Base64Test.java │ │ └── resources │ │ └── application.yml ├── albedo-common-log │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── albedo │ │ │ └── java │ │ │ └── common │ │ │ └── log │ │ │ ├── annotation │ │ │ └── LogOperate.java │ │ │ ├── aspect │ │ │ ├── RequestLogAspect.java │ │ │ └── SysLogAspect.java │ │ │ ├── config │ │ │ └── LogAutoConfiguration.java │ │ │ ├── enums │ │ │ ├── BusinessStatus.java │ │ │ ├── BusinessType.java │ │ │ ├── LogType.java │ │ │ └── OperatorType.java │ │ │ ├── event │ │ │ ├── ParameterUpdateEvent.java │ │ │ ├── ParameterUpdateListener.java │ │ │ ├── SysLogLoginEvent.java │ │ │ ├── SysLogLoginListener.java │ │ │ ├── SysLogOperateEvent.java │ │ │ ├── SysLogOperateListener.java │ │ │ └── model │ │ │ │ └── ParameterUpdate.java │ │ │ ├── init │ │ │ └── ApplicationLoggerInitializer.java │ │ │ └── util │ │ │ └── SysLogUtils.java │ │ └── resources │ │ └── META-INF │ │ └── spring.factories ├── albedo-common-module │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── albedo │ │ │ └── java │ │ │ └── common │ │ │ ├── config │ │ │ ├── CustomFieldModule.java │ │ │ ├── ExtraFieldSerializer.java │ │ │ ├── GlobalMvcConfigurer.java │ │ │ ├── JacksonMapperConfiguration.java │ │ │ └── datasource │ │ │ │ ├── AuthorityDatabaseAutoConfiguration.java │ │ │ │ └── AuthorityMybatisAutoConfiguration.java │ │ │ ├── runner │ │ │ └── ContextInitRunner.java │ │ │ ├── util │ │ │ ├── ExcelUtil.java │ │ │ └── RedisUtil.java │ │ │ └── web │ │ │ ├── filter │ │ │ ├── CachingHttpHeadersFilter.java │ │ │ └── ThreadLocalContextFilter.java │ │ │ └── resource │ │ │ └── BaseResource.java │ │ └── resources │ │ └── META-INF │ │ └── spring.factories ├── albedo-common-security │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── albedo │ │ │ └── java │ │ │ └── common │ │ │ └── security │ │ │ ├── component │ │ │ ├── Http401UnauthorizedEntryPoint.java │ │ │ ├── PermissionService.java │ │ │ ├── PersistentTokenCache.java │ │ │ ├── PersistentTokenRememberMeService.java │ │ │ ├── SpringSecurityAuditorAware.java │ │ │ └── session │ │ │ │ ├── CustomSessionInformation.java │ │ │ │ └── RedisSessionRegistry.java │ │ │ ├── config │ │ │ ├── SecurityAutoConfiguration.java │ │ │ └── SecurityJwtConfiguration.java │ │ │ ├── enums │ │ │ └── RequestMethodEnum.java │ │ │ ├── event │ │ │ ├── SysUserOnlineEvent.java │ │ │ ├── SysUserOnlineListener.java │ │ │ └── SysUserOnlineRefreshLastRequestEvent.java │ │ │ ├── filter │ │ │ ├── BodyFilter.java │ │ │ ├── PasswordDecoderFilter.java │ │ │ ├── ValidateCodeFilter.java │ │ │ └── warpper │ │ │ │ ├── BodyRequestWrapper.java │ │ │ │ └── ParameterRequestWrapper.java │ │ │ ├── handler │ │ │ ├── AjaxAuthenticationFailureHandler.java │ │ │ ├── AjaxAuthenticationSuccessHandler.java │ │ │ └── AjaxLogoutSuccessHandler.java │ │ │ ├── jwt │ │ │ ├── JwtConfigurer.java │ │ │ ├── JwtFilter.java │ │ │ └── TokenProvider.java │ │ │ ├── service │ │ │ ├── CustomSimpleGrantedAuthority.java │ │ │ ├── UserDetail.java │ │ │ └── UserDetailsServiceImpl.java │ │ │ └── util │ │ │ ├── AuthUtil.java │ │ │ ├── LoginUtil.java │ │ │ ├── RandomUtil.java │ │ │ └── SecurityUtil.java │ │ └── resources │ │ ├── META-INF │ │ └── spring.factories │ │ └── org │ │ └── springframework │ │ └── security │ │ └── messages_zh_CN.properties └── pom.xml ├── albedo-dependencies └── pom.xml ├── albedo-modules ├── albedo-appendix │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── albedo │ │ └── java │ │ └── modules │ │ └── file │ │ ├── domain │ │ ├── Appendix.java │ │ └── dto │ │ │ └── AppendixQueryCriteria.java │ │ ├── repository │ │ └── AppendixRepository.java │ │ └── service │ │ ├── AppendixService.java │ │ └── impl │ │ └── AppendixServiceImpl.java ├── albedo-file │ ├── albedo-file-biz │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── albedo │ │ │ └── java │ │ │ └── modules │ │ │ └── file │ │ │ ├── properties │ │ │ └── FileServerProperties.java │ │ │ ├── repository │ │ │ └── FileRepository.java │ │ │ ├── service │ │ │ ├── FileService.java │ │ │ └── impl │ │ │ │ └── FileServiceImpl.java │ │ │ ├── storage │ │ │ └── FileAutoConfigure.java │ │ │ ├── strategy │ │ │ ├── FileChunkStrategy.java │ │ │ ├── FileContext.java │ │ │ ├── FileLock.java │ │ │ ├── FileStrategy.java │ │ │ └── impl │ │ │ │ ├── AbstractFileChunkStrategy.java │ │ │ │ ├── AbstractFileStrategy.java │ │ │ │ ├── ali │ │ │ │ ├── AliFileChunkStrategyImpl.java │ │ │ │ └── AliFileStrategyImpl.java │ │ │ │ ├── fastdfs │ │ │ │ ├── FastDfsFileChunkStrategyImpl.java │ │ │ │ └── FastDfsFileStrategyImpl.java │ │ │ │ ├── huawei │ │ │ │ └── HuaweiFileStrategyImpl.java │ │ │ │ ├── local │ │ │ │ ├── LocalFileChunkStrategyImpl.java │ │ │ │ └── LocalFileStrategyImpl.java │ │ │ │ ├── minio │ │ │ │ ├── MinIoFileChunkStrategyImpl.java │ │ │ │ └── MinIoFileStrategyImpl.java │ │ │ │ └── qiniu │ │ │ │ └── QiNiuFileStrategyImpl.java │ │ │ └── web │ │ │ └── FileResource.java │ ├── albedo-file-domain │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── albedo │ │ │ └── java │ │ │ └── modules │ │ │ └── file │ │ │ ├── domain │ │ │ ├── FileDeleteBo.java │ │ │ ├── FileDo.java │ │ │ ├── FileGetUrlBo.java │ │ │ ├── dto │ │ │ │ ├── FileChunkCheckDto.java │ │ │ │ ├── FileChunksMergeDto.java │ │ │ │ ├── FileQueryCriteria.java │ │ │ │ └── FileUploadDto.java │ │ │ ├── enums │ │ │ │ └── FileStorageType.java │ │ │ └── vo │ │ │ │ ├── param │ │ │ │ ├── FileParamVo.java │ │ │ │ └── FileUploadVo.java │ │ │ │ └── result │ │ │ │ └── FileResultVo.java │ │ │ └── utils │ │ │ ├── FileTypeUtil.java │ │ │ └── ZipUtils.java │ └── pom.xml ├── albedo-gen │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── albedo │ │ │ └── java │ │ │ └── modules │ │ │ └── gen │ │ │ ├── cache │ │ │ ├── DatasourceConfCacheKeyBuilder.java │ │ │ ├── SchemeCacheKeyBuilder.java │ │ │ ├── TableCacheKeyBuilder.java │ │ │ └── TableColumnCacheKeyBuilder.java │ │ │ ├── domain │ │ │ ├── DatasourceConfDo.java │ │ │ ├── SchemeDo.java │ │ │ ├── TableColumnDo.java │ │ │ ├── TableDo.java │ │ │ ├── TableFkDo.java │ │ │ ├── TemplateDo.java │ │ │ ├── dto │ │ │ │ ├── DatasourceConfDto.java │ │ │ │ ├── DatasourceConfQueryDto.java │ │ │ │ ├── GenCodeDto.java │ │ │ │ ├── SchemeDto.java │ │ │ │ ├── SchemeGenDto.java │ │ │ │ ├── SchemeQueryDto.java │ │ │ │ ├── TableColumnDto.java │ │ │ │ ├── TableDto.java │ │ │ │ ├── TableFromDto.java │ │ │ │ └── TableQueryDto.java │ │ │ ├── vo │ │ │ │ ├── SchemeFormDataVo.java │ │ │ │ ├── SchemeVo.java │ │ │ │ ├── TableFormDataVo.java │ │ │ │ ├── TableFormVo.java │ │ │ │ ├── TableQuery.java │ │ │ │ └── TemplateVo.java │ │ │ └── xml │ │ │ │ ├── DictTemp.java │ │ │ │ ├── GenCategory.java │ │ │ │ └── GenConfig.java │ │ │ ├── repository │ │ │ ├── DatasourceConfRepository.java │ │ │ ├── SchemeRepository.java │ │ │ ├── TableColumnRepository.java │ │ │ ├── TableRepository.java │ │ │ └── TemplateRepository.java │ │ │ ├── service │ │ │ ├── DatasourceConfService.java │ │ │ ├── SchemeService.java │ │ │ ├── TableColumnService.java │ │ │ ├── TableService.java │ │ │ ├── TemplateService.java │ │ │ └── impl │ │ │ │ ├── DatasourceConfServiceImpl.java │ │ │ │ ├── SchemeServiceImpl.java │ │ │ │ ├── TableColumnServiceImpl.java │ │ │ │ ├── TableServiceImpl.java │ │ │ │ └── TemplateServiceImpl.java │ │ │ ├── util │ │ │ ├── GenTableColumnVoUtil.java │ │ │ └── GenUtil.java │ │ │ └── web │ │ │ ├── DatasourceConfResource.java │ │ │ ├── SchemeResource.java │ │ │ └── TableResource.java │ │ └── resources │ │ └── mapper │ │ └── gen │ │ ├── SchemeMapper.xml │ │ ├── TableColumnMapper.xml │ │ └── TableMapper.xml ├── albedo-monitor │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── albedo │ │ └── java │ │ └── modules │ │ └── monitor │ │ ├── domain │ │ ├── RedisInfo.java │ │ └── ReportSearchType.java │ │ ├── service │ │ ├── MonitorService.java │ │ ├── RedisService.java │ │ └── impl │ │ │ ├── MonitorServiceImpl.java │ │ │ └── RedisServiceImpl.java │ │ └── web │ │ └── ActuatorResource.java ├── albedo-quartz │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── albedo │ │ │ └── java │ │ │ └── modules │ │ │ └── quartz │ │ │ ├── domain │ │ │ ├── JobDo.java │ │ │ ├── JobLogDo.java │ │ │ ├── dto │ │ │ │ ├── JobDto.java │ │ │ │ ├── JobLogQueryDto.java │ │ │ │ └── JobQueryDto.java │ │ │ ├── enums │ │ │ │ ├── JobConcurrent.java │ │ │ │ ├── JobLogStatus.java │ │ │ │ ├── JobMisfirePolicy.java │ │ │ │ └── JobStatus.java │ │ │ └── vo │ │ │ │ └── JobLogExcelVo.java │ │ │ ├── repository │ │ │ ├── JobLogRepository.java │ │ │ └── JobRepository.java │ │ │ ├── service │ │ │ ├── JobLogService.java │ │ │ ├── JobService.java │ │ │ └── impl │ │ │ │ ├── JobLogServiceImpl.java │ │ │ │ └── JobServiceImpl.java │ │ │ ├── task │ │ │ └── SimpleTask.java │ │ │ ├── util │ │ │ ├── AbstractQuartzJob.java │ │ │ ├── CronUtils.java │ │ │ ├── JobInvokeUtil.java │ │ │ ├── QuartzDisallowConcurrentExecution.java │ │ │ ├── QuartzJobExecution.java │ │ │ └── ScheduleUtils.java │ │ │ └── web │ │ │ ├── JobLogResource.java │ │ │ └── JobResource.java │ │ └── resources │ │ └── mapper │ │ └── sys │ │ └── JobLogMapper.xml ├── albedo-sys │ ├── Dockerfile │ ├── albedo-sys-api │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── albedo │ │ │ └── java │ │ │ └── modules │ │ │ ├── sys │ │ │ ├── feign │ │ │ │ ├── RemoteDeptService.java │ │ │ │ ├── RemoteDictService.java │ │ │ │ ├── RemoteLogLoginService.java │ │ │ │ ├── RemoteLogOperateService.java │ │ │ │ ├── RemoteMenuService.java │ │ │ │ ├── RemotePersistentTokenService.java │ │ │ │ ├── RemoteRoleService.java │ │ │ │ ├── RemoteUserOnlineService.java │ │ │ │ └── RemoteUserService.java │ │ │ └── util │ │ │ │ └── DictUtil.java │ │ │ └── tool │ │ │ └── feign │ │ │ └── RemoteEmailService.java │ ├── albedo-sys-biz │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ ├── java │ │ │ └── com │ │ │ │ └── albedo │ │ │ │ └── java │ │ │ │ └── modules │ │ │ │ ├── sys │ │ │ │ ├── component │ │ │ │ │ └── InitCacheDataComponent.java │ │ │ │ ├── repository │ │ │ │ │ ├── ApplicationRepository.java │ │ │ │ │ ├── DeptRelationRepository.java │ │ │ │ │ ├── DeptRepository.java │ │ │ │ │ ├── DictRepository.java │ │ │ │ │ ├── LogLoginRepository.java │ │ │ │ │ ├── LogOperateRepository.java │ │ │ │ │ ├── MenuRepository.java │ │ │ │ │ ├── ParameterRepository.java │ │ │ │ │ ├── PersistentTokenRepository.java │ │ │ │ │ ├── RoleDeptRepository.java │ │ │ │ │ ├── RoleMenuRepository.java │ │ │ │ │ ├── RoleRepository.java │ │ │ │ │ ├── UserOnlineRepository.java │ │ │ │ │ ├── UserRepository.java │ │ │ │ │ └── UserRoleRepository.java │ │ │ │ ├── service │ │ │ │ │ ├── ApplicationService.java │ │ │ │ │ ├── DeptRelationService.java │ │ │ │ │ ├── DeptService.java │ │ │ │ │ ├── DictService.java │ │ │ │ │ ├── LogLoginService.java │ │ │ │ │ ├── LogOperateService.java │ │ │ │ │ ├── MenuService.java │ │ │ │ │ ├── ParameterService.java │ │ │ │ │ ├── PersistentTokenService.java │ │ │ │ │ ├── RoleDeptService.java │ │ │ │ │ ├── RoleMenuService.java │ │ │ │ │ ├── RoleService.java │ │ │ │ │ ├── UserOnlineService.java │ │ │ │ │ ├── UserRoleService.java │ │ │ │ │ ├── UserService.java │ │ │ │ │ └── impl │ │ │ │ │ │ ├── ApplicationServiceImpl.java │ │ │ │ │ │ ├── DeptRelationServiceImpl.java │ │ │ │ │ │ ├── DeptServiceImpl.java │ │ │ │ │ │ ├── DictServiceImpl.java │ │ │ │ │ │ ├── LogLoginServiceImpl.java │ │ │ │ │ │ ├── LogOperateServiceImpl.java │ │ │ │ │ │ ├── MenuServiceImpl.java │ │ │ │ │ │ ├── ParameterServiceImpl.java │ │ │ │ │ │ ├── PersistentTokenServiceImpl.java │ │ │ │ │ │ ├── RoleDeptServiceImpl.java │ │ │ │ │ │ ├── RoleMenuServiceImpl.java │ │ │ │ │ │ ├── RoleServiceImpl.java │ │ │ │ │ │ ├── UserOnlineServiceImpl.java │ │ │ │ │ │ ├── UserRoleServiceImpl.java │ │ │ │ │ │ └── UserServiceImpl.java │ │ │ │ └── util │ │ │ │ │ └── SysCacheUtil.java │ │ │ │ └── tool │ │ │ │ ├── repository │ │ │ │ ├── AliPayConfigRepository.java │ │ │ │ └── EmailConfigRepository.java │ │ │ │ ├── service │ │ │ │ ├── AliPayService.java │ │ │ │ ├── EmailService.java │ │ │ │ └── impl │ │ │ │ │ ├── AliPayServiceImpl.java │ │ │ │ │ └── EmailServiceImpl.java │ │ │ │ └── util │ │ │ │ ├── AliPayStatusEnum.java │ │ │ │ └── AliPayUtils.java │ │ │ └── resources │ │ │ └── mapper │ │ │ └── sys │ │ │ ├── DeptMapper.xml │ │ │ ├── DeptRelationMapper.xml │ │ │ ├── DictMapper.xml │ │ │ ├── LogLoginMapper.xml │ │ │ ├── LogOperateMapper.xml │ │ │ ├── MenuMapper.xml │ │ │ ├── RoleMapper.xml │ │ │ ├── UserMapper.xml │ │ │ └── UserRoleMapper.xml │ ├── albedo-sys-domain │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── albedo │ │ │ └── java │ │ │ └── modules │ │ │ ├── sys │ │ │ ├── cache │ │ │ │ ├── ApplicationCacheKeyBuilder.java │ │ │ │ ├── ApplicationClientCacheKeyBuilder.java │ │ │ │ ├── DeptCacheKeyBuilder.java │ │ │ │ ├── DictCacheKeyBuilder.java │ │ │ │ ├── LogLoginBrowserCacheKeyBuilder.java │ │ │ │ ├── LogLoginSystemCacheKeyBuilder.java │ │ │ │ ├── LogLoginTenDayCacheKeyBuilder.java │ │ │ │ ├── MenuCacheKeyBuilder.java │ │ │ │ ├── ParameterKeyCacheKeyBuilder.java │ │ │ │ ├── RoleCacheKeyBuilder.java │ │ │ │ ├── TodayLoginIvCacheKeyBuilder.java │ │ │ │ ├── TodayLoginPvCacheKeyBuilder.java │ │ │ │ ├── TodayPvCacheKeyBuilder.java │ │ │ │ ├── TokenUserIdCacheKeyBuilder.java │ │ │ │ ├── TotalLoginIvCacheKeyBuilder.java │ │ │ │ ├── TotalLoginPvCacheKeyBuilder.java │ │ │ │ ├── TotalPvCacheKeyBuilder.java │ │ │ │ └── UserCacheKeyBuilder.java │ │ │ └── domain │ │ │ │ ├── ApplicationDo.java │ │ │ │ ├── DeptDo.java │ │ │ │ ├── DeptRelationDo.java │ │ │ │ ├── DictDo.java │ │ │ │ ├── LogLoginDo.java │ │ │ │ ├── LogOperateDo.java │ │ │ │ ├── MenuDo.java │ │ │ │ ├── ParameterDo.java │ │ │ │ ├── PersistentTokenDo.java │ │ │ │ ├── RoleDeptDo.java │ │ │ │ ├── RoleDo.java │ │ │ │ ├── RoleMenuDo.java │ │ │ │ ├── UserDo.java │ │ │ │ ├── UserOnlineDo.java │ │ │ │ ├── UserRoleDo.java │ │ │ │ ├── dto │ │ │ │ ├── ApplicationDto.java │ │ │ │ ├── DeptDto.java │ │ │ │ ├── DeptQueryDto.java │ │ │ │ ├── DictDto.java │ │ │ │ ├── DictQueryDto.java │ │ │ │ ├── GenSchemeDto.java │ │ │ │ ├── LogLoginDto.java │ │ │ │ ├── LogLoginQueryDto.java │ │ │ │ ├── LogOperateQueryDto.java │ │ │ │ ├── MenuDto.java │ │ │ │ ├── MenuQueryDto.java │ │ │ │ ├── MenuSortDto.java │ │ │ │ ├── MenuSortItemDto.java │ │ │ │ ├── ParameterDto.java │ │ │ │ ├── PersistentTokenQueryDto.java │ │ │ │ ├── RoleDto.java │ │ │ │ ├── RoleMenuDto.java │ │ │ │ ├── RoleQueryDto.java │ │ │ │ ├── UserDto.java │ │ │ │ ├── UserEmailDto.java │ │ │ │ ├── UserInfoDto.java │ │ │ │ ├── UserOnlineQueryDto.java │ │ │ │ └── UserQueryDto.java │ │ │ │ ├── enums │ │ │ │ ├── ApplicationAppTypeEnum.java │ │ │ │ ├── AuthorizeType.java │ │ │ │ ├── DataScopeType.java │ │ │ │ ├── OnlineStatus.java │ │ │ │ ├── Sex.java │ │ │ │ └── UserTypeEnum.java │ │ │ │ └── vo │ │ │ │ ├── DeptVo.java │ │ │ │ ├── DictVo.java │ │ │ │ ├── ImageCode.java │ │ │ │ ├── LogVo.java │ │ │ │ ├── LoggerVo.java │ │ │ │ ├── MenuMetaVo.java │ │ │ │ ├── MenuTree.java │ │ │ │ ├── MenuVo.java │ │ │ │ ├── RoleComboVo.java │ │ │ │ ├── UserExcelVo.java │ │ │ │ ├── UserInfo.java │ │ │ │ ├── UserPageVo.java │ │ │ │ ├── UserSearchVo.java │ │ │ │ ├── UserVo.java │ │ │ │ └── account │ │ │ │ ├── AvatarInfo.java │ │ │ │ ├── LoginVo.java │ │ │ │ ├── PasswordChangeVo.java │ │ │ │ └── PasswordRestVo.java │ │ │ └── tool │ │ │ └── domain │ │ │ ├── AlipayConfigDo.java │ │ │ ├── EmailConfigDo.java │ │ │ └── vo │ │ │ ├── EmailVo.java │ │ │ └── TradeVo.java │ ├── albedo-sys-web │ │ ├── pom.xml │ │ └── src │ │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── albedo │ │ │ └── java │ │ │ └── modules │ │ │ ├── sys │ │ │ └── web │ │ │ │ ├── AccoutResource.java │ │ │ │ ├── AppendixResource.java │ │ │ │ ├── DashboardResource.java │ │ │ │ ├── DeptResource.java │ │ │ │ ├── DictResource.java │ │ │ │ ├── LogLoginResource.java │ │ │ │ ├── LogOperateResource.java │ │ │ │ ├── LogsResource.java │ │ │ │ ├── MenuResource.java │ │ │ │ ├── PersistentTokenResource.java │ │ │ │ ├── RoleResource.java │ │ │ │ ├── UserOnlineResource.java │ │ │ │ └── UserResource.java │ │ │ └── tool │ │ │ └── web │ │ │ ├── AliPayResource.java │ │ │ └── EmailResource.java │ └── pom.xml ├── albedo-tenant │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── albedo │ │ │ └── java │ │ │ └── modules │ │ │ └── tenant │ │ │ ├── cache │ │ │ ├── TenantCacheKeyBuilder.java │ │ │ └── TenantCodeCacheKeyBuilder.java │ │ │ ├── domain │ │ │ ├── Tenant.java │ │ │ ├── TenantDatasourceConfig.java │ │ │ └── dto │ │ │ │ ├── TenantConnectDto.java │ │ │ │ └── TenantDto.java │ │ │ ├── enumeration │ │ │ ├── TenantConnectTypeEnum.java │ │ │ ├── TenantStatusEnum.java │ │ │ └── TenantTypeEnum.java │ │ │ ├── repository │ │ │ ├── InitDbRepository.java │ │ │ └── TenantRepository.java │ │ │ ├── service │ │ │ ├── TenantService.java │ │ │ └── impl │ │ │ │ └── TenantServiceImpl.java │ │ │ ├── strategy │ │ │ ├── InitSystemContext.java │ │ │ ├── InitSystemStrategy.java │ │ │ └── impl │ │ │ │ ├── ColumnInitSystemStrategy.java │ │ │ │ └── SchemaInitSystemStrategy.java │ │ │ └── utils │ │ │ └── DriverEnum.java │ │ └── resources │ │ └── mapper │ │ └── tenant │ │ ├── InitDbMapper.xml │ │ └── TenantMapper.xml └── pom.xml ├── albedo-plugin ├── albedo-plugin-biz-ip │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── albedo │ │ │ │ └── java │ │ │ │ └── plugins │ │ │ │ └── ip │ │ │ │ ├── Area.java │ │ │ │ ├── enums │ │ │ │ └── AreaTypeEnum.java │ │ │ │ └── util │ │ │ │ ├── AreaUtil.java │ │ │ │ └── IpUtil.java │ │ └── resources │ │ │ ├── area.csv │ │ │ └── ip2region.xdb │ │ └── test │ │ └── java │ │ ├── AreaUtilTest.java │ │ └── IpUtilTest.java ├── albedo-plugin-cache-starter │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── albedo │ │ │ └── java │ │ │ └── plugins │ │ │ └── cache │ │ │ ├── CacheAutoConfigure.java │ │ │ ├── CaffeineAutoConfigure.java │ │ │ ├── RedisAutoConfigure.java │ │ │ ├── lock │ │ │ ├── CaffeineDistributedLock.java │ │ │ └── RedisDistributedLock.java │ │ │ ├── properties │ │ │ ├── CacheType.java │ │ │ ├── CustomCacheProperties.java │ │ │ └── SerializerType.java │ │ │ ├── redis │ │ │ ├── NullVal.java │ │ │ └── RedisOps.java │ │ │ ├── repository │ │ │ ├── CacheOps.java │ │ │ ├── CachePlusOps.java │ │ │ └── impl │ │ │ │ ├── CaffeineOpsImpl.java │ │ │ │ └── RedisOpsImpl.java │ │ │ └── utils │ │ │ ├── RedisJacksonSerializer.java │ │ │ └── RedisProtostuffSerializer.java │ │ └── resources │ │ ├── META-INF │ │ └── spring.factories │ │ └── limit.lua ├── albedo-plugin-database │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── albedo │ │ │ └── java │ │ │ └── plugins │ │ │ └── database │ │ │ ├── config │ │ │ ├── BaseDatabaseConfiguration.java │ │ │ ├── BaseMybatisConfiguration.java │ │ │ ├── EntityMetaObjectHandler.java │ │ │ └── defaults │ │ │ │ └── BaseMasterDatabaseConfiguration.java │ │ │ ├── handler │ │ │ ├── AlbedoTenantLineHandler.java │ │ │ └── MultiTenantLineHandler.java │ │ │ ├── injector │ │ │ ├── LampSqlInjector.java │ │ │ └── method │ │ │ │ └── UpdateAllById.java │ │ │ ├── interceptor │ │ │ ├── AlbedoTenantLineInnerInterceptor.java │ │ │ ├── MultiTenantLineInnerInterceptor.java │ │ │ └── SchemaInterceptor.java │ │ │ ├── mybatis │ │ │ ├── WriteInterceptor.java │ │ │ ├── conditions │ │ │ │ └── Wraps.java │ │ │ ├── datascope │ │ │ │ ├── DataScope.java │ │ │ │ └── DataScopeInterceptor.java │ │ │ ├── enums │ │ │ │ └── SqlConstants.java │ │ │ ├── query │ │ │ │ ├── LambdaQueryWrapperX.java │ │ │ │ └── QueryWrapperX.java │ │ │ ├── repository │ │ │ │ ├── BaseRepository.java │ │ │ │ └── TreeRepository.java │ │ │ ├── service │ │ │ │ ├── BaseService.java │ │ │ │ ├── CacheService.java │ │ │ │ ├── DataCacheService.java │ │ │ │ ├── DataService.java │ │ │ │ ├── TreeService.java │ │ │ │ └── impl │ │ │ │ │ ├── AbstractCacheServiceImpl.java │ │ │ │ │ ├── AbstractDataCacheServiceImpl.java │ │ │ │ │ ├── AbstractTreeCacheServiceImpl.java │ │ │ │ │ ├── AbstractTreeServiceImpl.java │ │ │ │ │ ├── BaseServiceImpl.java │ │ │ │ │ └── DataServiceImpl.java │ │ │ ├── typehandler │ │ │ │ ├── BaseLikeTypeHandler.java │ │ │ │ ├── CustomEnumTypeHandler.java │ │ │ │ ├── FullLikeTypeHandler.java │ │ │ │ ├── LeftLikeTypeHandler.java │ │ │ │ └── RightLikeTypeHandler.java │ │ │ └── util │ │ │ │ └── QueryWrapperUtil.java │ │ │ ├── p6spy │ │ │ └── TenantP6SpyLogger.java │ │ │ ├── parsers │ │ │ └── ReplaceSql.java │ │ │ └── properties │ │ │ ├── DatabaseProperties.java │ │ │ ├── IdType.java │ │ │ └── MultiTenantType.java │ │ └── resources │ │ └── templates │ │ └── codet │ │ ├── config-back.xml │ │ ├── curd │ │ ├── resource.xml │ │ └── resourceIntTest.xml │ │ ├── entity │ │ ├── dto │ │ │ ├── entityDto.xml │ │ │ └── entityQueryCriteria.xml │ │ ├── entityDo.xml │ │ └── entityId.xml │ │ ├── service │ │ ├── repository.xml │ │ ├── service.xml │ │ └── serviceImpl.xml │ │ └── treetable │ │ ├── dto │ │ ├── entityDto.xml │ │ └── entityQueryCriteria.xml │ │ ├── entityDo.xml │ │ ├── repository.xml │ │ ├── resource.xml │ │ ├── resourceIntTest.xml │ │ ├── service.xml │ │ ├── serviceImpl.xml │ │ └── vo │ │ └── entityVo.xml ├── albedo-plugin-dynamic-datasource │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── albedo │ │ └── java │ │ └── plugins │ │ └── dynamic │ │ └── datasource │ │ ├── DynamicDataSourceAutoConfiguration.java │ │ ├── annotation │ │ └── EnableDynamicDataSource.java │ │ ├── config │ │ ├── DataSourceProperties.java │ │ ├── JdbcDynamicDataSourceProvider.java │ │ └── LastParamDsProcessor.java │ │ └── support │ │ └── DataSourceConstants.java ├── albedo-plugin-swagger │ ├── .gitignore │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── albedo │ │ │ └── java │ │ │ └── plugins │ │ │ └── swagger │ │ │ ├── annotation │ │ │ └── EnableSwaggerDoc.java │ │ │ └── config │ │ │ ├── ApplicationSwaggerProperties.java │ │ │ ├── SwaggerAutoConfiguration.java │ │ │ └── apidoc │ │ │ ├── PageableParameterBuilderPlugin.java │ │ │ ├── SwaggerAutoConfiguration.java │ │ │ ├── SwaggerPluginsAutoConfiguration.java │ │ │ └── customizer │ │ │ ├── AlbedoSwaggerCustomizer.java │ │ │ ├── SwaggerCustomizer.java │ │ │ └── SwaggerLoginApi.java │ │ └── resources │ │ └── META-INF │ │ └── spring.factories ├── albedo-plugin-uid │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ ├── albedo │ │ └── java │ │ │ └── plugins │ │ │ └── uid │ │ │ └── WorkerNodeDao.java │ │ └── baidu │ │ └── fsg │ │ └── uid │ │ ├── BitsAllocator.java │ │ ├── UidGenerator.java │ │ ├── buffer │ │ ├── BufferPaddingExecutor.java │ │ ├── BufferedUidProvider.java │ │ ├── RejectedPutBufferHandler.java │ │ ├── RejectedTakeBufferHandler.java │ │ └── RingBuffer.java │ │ ├── exception │ │ └── UidGenerateException.java │ │ ├── impl │ │ ├── CachedUidGenerator.java │ │ ├── DefaultUidGenerator.java │ │ └── HuToolUidGenerator.java │ │ ├── utils │ │ ├── DockerUtils.java │ │ ├── NamingThreadFactory.java │ │ ├── NetUtils.java │ │ ├── PaddedAtomicLong.java │ │ └── ValuedEnum.java │ │ └── worker │ │ ├── DisposableWorkerIdAssigner.java │ │ ├── WorkerIdAssigner.java │ │ ├── WorkerNodeType.java │ │ └── entity │ │ └── WorkerNodeEntity.java └── pom.xml ├── albedo-servers ├── albedo-admin-server │ ├── Dockerfile │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── albedo │ │ │ │ └── java │ │ │ │ └── modules │ │ │ │ ├── AlbedoAdminApplication.java │ │ │ │ └── ApplicationWebXml.java │ │ └── resources │ │ │ ├── config │ │ │ ├── application-dev.yml │ │ │ ├── application-prod.yml │ │ │ └── application.yml │ │ │ ├── logback-spring.xml │ │ │ ├── spy.properties │ │ │ └── templates │ │ │ ├── codet │ │ │ ├── config.xml │ │ │ ├── curd │ │ │ │ ├── viewIndex.xml │ │ │ │ └── viewService.xml │ │ │ └── treetable │ │ │ │ ├── viewIndex.xml │ │ │ │ └── viewService.xml │ │ │ └── email │ │ │ ├── email.ftl │ │ │ └── taskAlarm.ftl │ │ └── test │ │ ├── java │ │ └── com │ │ │ └── albedo │ │ │ └── java │ │ │ ├── common │ │ │ ├── JacksonTest.java │ │ │ └── QuickSortArray.java │ │ │ └── modules │ │ │ ├── TestUtil.java │ │ │ ├── base │ │ │ ├── BaseDbAndRedisIntegrationTest.java │ │ │ ├── BaseRedisIntegrationTest.java │ │ │ └── SimulationRuntimeIntegrationTest.java │ │ │ ├── quartz │ │ │ └── web │ │ │ │ └── JobDoResourceIntTest.java │ │ │ └── sys │ │ │ └── web │ │ │ ├── DeptResourceIntTest.java │ │ │ ├── DictResourceIntTest.java │ │ │ ├── LogOperateResourceIntTest.java │ │ │ ├── MenuResourceIntTest.java │ │ │ ├── RoleResourceIntTest.java │ │ │ └── UserResourceIntTest.java │ │ └── resources │ │ ├── config │ │ ├── application-integration-test.yml │ │ └── application.yml │ │ └── logback-spring.xml ├── albedo-app-server │ ├── Dockerfile │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── albedo │ │ │ └── java │ │ │ └── modules │ │ │ ├── AlbedoApiApplication.java │ │ │ ├── ApplicationWebXml.java │ │ │ └── gen │ │ │ └── web │ │ │ ├── AccoutJwtResource.java │ │ │ └── HelloResource.java │ │ └── resources │ │ ├── config │ │ ├── application-dev.yml │ │ ├── application-prod.yml │ │ ├── application-swagger.yml │ │ └── application.yml │ │ └── logback-spring.xml ├── albedo-quartz-server │ ├── Dockerfile │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── albedo │ │ │ └── java │ │ │ └── modules │ │ │ ├── AlbedoQuartzApplication.java │ │ │ ├── ApplicationWebXml.java │ │ │ └── quartz │ │ │ └── config │ │ │ ├── ScheduleConfig.java │ │ │ └── ScheduleReceiver.java │ │ └── resources │ │ ├── config │ │ ├── application-dev.yml │ │ ├── application-prod.yml │ │ └── application.yml │ │ └── logback-spring.xml └── pom.xml ├── albedo-ui ├── .editorconfig ├── .env.development ├── .env.production ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .travis.yml ├── Dockerfile ├── LICENSE ├── babel.config.js ├── jest.config.js ├── nginx.conf ├── package.json ├── plopfile.js ├── postcss.config.js ├── public │ ├── favicon.ico │ └── index.html ├── src │ ├── App.vue │ ├── api │ │ ├── account.js │ │ ├── common.js │ │ ├── dashboard.js │ │ └── data.js │ ├── assets │ │ ├── 401_images │ │ │ └── 401.gif │ │ ├── 404_images │ │ │ ├── 404.png │ │ │ └── 404_cloud.png │ │ ├── avatar │ │ │ ├── 17e420c250804efe904a09a33796d5a10.jpg │ │ │ ├── 17e420c250804efe904a09a33796d5a16.jpg │ │ │ ├── 19034103295190235.jpg │ │ │ ├── 1d22f3e41d284f50b2c8fc32e0788698.jpeg │ │ │ ├── 20180414165754.jpg │ │ │ ├── 20180414165815.jpg │ │ │ ├── 20180414165821.jpg │ │ │ ├── 20180414165827.jpg │ │ │ ├── 20180414165834.jpg │ │ │ ├── 20180414165840.jpg │ │ │ ├── 20180414165846.jpg │ │ │ ├── 20180414165855.jpg │ │ │ ├── 20180414165909.jpg │ │ │ ├── 20180414165914.jpg │ │ │ ├── 20180414165920.jpg │ │ │ ├── 20180414165927.jpg │ │ │ ├── 20180414165936.jpg │ │ │ ├── 20180414165942.jpg │ │ │ ├── 20180414165947.jpg │ │ │ ├── 20180414165955.jpg │ │ │ ├── 20180414170003.jpg │ │ │ ├── 2dd7a2d09fa94bf8b5c52e5318868b4d9.jpg │ │ │ ├── 2dd7a2d09fa94bf8b5c52e5318868b4df.jpg │ │ │ ├── 496b3ace787342f7954b7045b8b06804.jpeg │ │ │ ├── 595ba7b05f2e485eb50565a50cb6cc3c.jpeg │ │ │ ├── 5997fedcc7bd4cffbd350b40d1b5b9824.jpg │ │ │ ├── 5997fedcc7bd4cffbd350b40d1b5b987.jpg │ │ │ ├── 87d8194bc9834e9f8f0228e9e530beb1.jpeg │ │ │ ├── 8f5b60ef00714a399ee544d331231820.jpeg │ │ │ ├── 964e40b005724165b8cf772355796c8c.jpeg │ │ │ ├── BiazfanxmamNRoxxVxka.png │ │ │ ├── WhxKECPNujWoWEFNdnJE.png │ │ │ ├── a3b10296862e40edb811418d64455d00.jpeg │ │ │ ├── a43456282d684e0b9319cf332f8ac468.jpeg │ │ │ ├── bba284ac05b041a8b8b0d1927868d5c9x.jpg │ │ │ ├── c7c4ee7be3eb4e73a19887dc713505145.jpg │ │ │ ├── cnrhVkzwxjPwAaCfPbdc.png │ │ │ ├── default.jpg │ │ │ ├── ff698bb2d25c4d218b3256b46c706ece.jpeg │ │ │ ├── gaOngJwsRYRaVAuXXcmB.png │ │ │ ├── jZUIxmJycoymBprLOUbT.png │ │ │ └── ubnKSIfAJTxIgXOKlciN.png │ │ ├── icons │ │ │ ├── index.js │ │ │ ├── svg │ │ │ │ ├── 404.svg │ │ │ │ ├── Steve-Jobs.svg │ │ │ │ ├── alipay.svg │ │ │ │ ├── anq.svg │ │ │ │ ├── app.svg │ │ │ │ ├── backup.svg │ │ │ │ ├── bug.svg │ │ │ │ ├── chain.svg │ │ │ │ ├── chart.svg │ │ │ │ ├── clipboard.svg │ │ │ │ ├── codeConsole.svg │ │ │ │ ├── component.svg │ │ │ │ ├── dashboard.svg │ │ │ │ ├── database.svg │ │ │ │ ├── date.svg │ │ │ │ ├── deploy.svg │ │ │ │ ├── dept.svg │ │ │ │ ├── dev.svg │ │ │ │ ├── develop.svg │ │ │ │ ├── dictionary.svg │ │ │ │ ├── doc.svg │ │ │ │ ├── documentation.svg │ │ │ │ ├── download.svg │ │ │ │ ├── drag.svg │ │ │ │ ├── edit.svg │ │ │ │ ├── education.svg │ │ │ │ ├── email.svg │ │ │ │ ├── error.svg │ │ │ │ ├── example.svg │ │ │ │ ├── excel.svg │ │ │ │ ├── exit-fullscreen.svg │ │ │ │ ├── eye-open.svg │ │ │ │ ├── eye.svg │ │ │ │ ├── form.svg │ │ │ │ ├── fullscreen.svg │ │ │ │ ├── fwb.svg │ │ │ │ ├── github.svg │ │ │ │ ├── global-s.svg │ │ │ │ ├── global.svg │ │ │ │ ├── gonggao.svg │ │ │ │ ├── guide.svg │ │ │ │ ├── icon.svg │ │ │ │ ├── image.svg │ │ │ │ ├── index.svg │ │ │ │ ├── international.svg │ │ │ │ ├── ipvisits.svg │ │ │ │ ├── java.svg │ │ │ │ ├── language.svg │ │ │ │ ├── link.svg │ │ │ │ ├── list.svg │ │ │ │ ├── lock.svg │ │ │ │ ├── log.svg │ │ │ │ ├── login.svg │ │ │ │ ├── magnifying-glass.svg │ │ │ │ ├── markdown.svg │ │ │ │ ├── menu.svg │ │ │ │ ├── message.svg │ │ │ │ ├── mnt.svg │ │ │ │ ├── money.svg │ │ │ │ ├── monitor.svg │ │ │ │ ├── nested.svg │ │ │ │ ├── password.svg │ │ │ │ ├── pdf.svg │ │ │ │ ├── people.svg │ │ │ │ ├── peoples.svg │ │ │ │ ├── permission.svg │ │ │ │ ├── phone.svg │ │ │ │ ├── qiniu.svg │ │ │ │ ├── qq.svg │ │ │ │ ├── redis.svg │ │ │ │ ├── role.svg │ │ │ │ ├── search.svg │ │ │ │ ├── server.svg │ │ │ │ ├── shopping.svg │ │ │ │ ├── size.svg │ │ │ │ ├── skill.svg │ │ │ │ ├── source.svg │ │ │ │ ├── sqlMonitor.svg │ │ │ │ ├── star.svg │ │ │ │ ├── swagger.svg │ │ │ │ ├── sys-tools.svg │ │ │ │ ├── system.svg │ │ │ │ ├── system1.svg │ │ │ │ ├── tab.svg │ │ │ │ ├── table.svg │ │ │ │ ├── theme.svg │ │ │ │ ├── timing.svg │ │ │ │ ├── tools.svg │ │ │ │ ├── tree-table.svg │ │ │ │ ├── tree.svg │ │ │ │ ├── unlock.svg │ │ │ │ ├── user.svg │ │ │ │ ├── user1.svg │ │ │ │ ├── validCode.svg │ │ │ │ ├── visits.svg │ │ │ │ ├── web.svg │ │ │ │ ├── wechat.svg │ │ │ │ ├── weixin.svg │ │ │ │ ├── zip.svg │ │ │ │ └── zujian.svg │ │ │ └── svgo.yml │ │ ├── images │ │ │ ├── avatar.png │ │ │ └── logo.png │ │ ├── logo │ │ │ ├── dingtalk.png │ │ │ ├── gitee.png │ │ │ ├── github.png │ │ │ ├── microsoft.png │ │ │ ├── qq.png │ │ │ └── tencent_cloud.png │ │ ├── styles │ │ │ ├── albedo.scss │ │ │ ├── btn.scss │ │ │ ├── element-ui.scss │ │ │ ├── element-variables.scss │ │ │ ├── index.scss │ │ │ ├── mixin.scss │ │ │ ├── sidebar.scss │ │ │ ├── transition.scss │ │ │ └── variables.scss │ │ ├── 捐赠1.jpg │ │ └── 捐赠2.jpg │ ├── const │ │ └── common.js │ ├── directive │ │ ├── clipboard │ │ │ ├── clipboard.js │ │ │ └── index.js │ │ ├── el-drag-dialog │ │ │ ├── drag.js │ │ │ └── index.js │ │ ├── el-table │ │ │ ├── adaptive.js │ │ │ └── index.js │ │ ├── sticky.js │ │ └── waves │ │ │ ├── index.js │ │ │ ├── waves.css │ │ │ └── waves.js │ ├── lang │ │ ├── en.js │ │ ├── index.js │ │ └── zh.js │ ├── layout │ │ ├── components │ │ │ ├── AppMain.vue │ │ │ ├── Navbar.vue │ │ │ ├── Settings │ │ │ │ └── index.vue │ │ │ ├── Sidebar │ │ │ │ ├── FixiOSBug.js │ │ │ │ ├── Item.vue │ │ │ │ ├── Link.vue │ │ │ │ ├── Logo.vue │ │ │ │ ├── SidebarItem.vue │ │ │ │ └── index.vue │ │ │ ├── TagsView │ │ │ │ ├── ScrollPane.vue │ │ │ │ └── index.vue │ │ │ └── index.js │ │ ├── index.vue │ │ └── mixin │ │ │ └── ResizeHandler.js │ ├── main.js │ ├── mixins │ │ └── crud.js │ ├── router │ │ ├── index.js │ │ └── routers.js │ ├── settings.js │ ├── store │ │ ├── getters.js │ │ ├── index.js │ │ └── modules │ │ │ ├── api.js │ │ │ ├── app.js │ │ │ ├── dict.js │ │ │ ├── permission.js │ │ │ ├── settings.js │ │ │ ├── tagsView.js │ │ │ └── user.js │ ├── utils │ │ ├── auth.js │ │ ├── charts-option.js │ │ ├── clipboard.js │ │ ├── common.js │ │ ├── get-page-title.js │ │ ├── open-window.js │ │ ├── permission.js │ │ ├── request.js │ │ ├── rsa-encrypt.js │ │ ├── scroll-to.js │ │ ├── store.js │ │ ├── upload.js │ │ └── validate.js │ └── views │ │ ├── components │ │ ├── Ace │ │ │ └── index.vue │ │ ├── Breadcrumb │ │ │ └── index.vue │ │ ├── Crud │ │ │ ├── CRUD.operation.vue │ │ │ ├── Pagination.vue │ │ │ ├── RR.operation.vue │ │ │ ├── UD.operation.vue │ │ │ └── crud.js │ │ ├── Doc │ │ │ └── index.vue │ │ ├── Echarts.vue │ │ ├── Echarts │ │ │ ├── BarChart.vue │ │ │ ├── Category.vue │ │ │ ├── Funnel.vue │ │ │ ├── Gauge.vue │ │ │ ├── Graph.vue │ │ │ ├── HeatMap.vue │ │ │ ├── Keyboard.vue │ │ │ ├── Line3D.vue │ │ │ ├── LineMarker.vue │ │ │ ├── MixChart.vue │ │ │ ├── PieChart.vue │ │ │ ├── Point.vue │ │ │ ├── RadarChart.vue │ │ │ ├── Rich.vue │ │ │ ├── Sankey.vue │ │ │ ├── Scatter.vue │ │ │ ├── Sunburst.vue │ │ │ ├── ThemeRiver.vue │ │ │ ├── WordCloud.vue │ │ │ └── mixins │ │ │ │ └── resize.js │ │ ├── Editor.vue │ │ ├── GithubCorner │ │ │ └── index.vue │ │ ├── Hamburger │ │ │ └── index.vue │ │ ├── HeaderSearch │ │ │ └── index.vue │ │ ├── IconSelect │ │ │ ├── index.vue │ │ │ └── requireIcons.js │ │ ├── Icons │ │ │ ├── element-icons.js │ │ │ ├── index.vue │ │ │ └── svg-icons.js │ │ ├── Iframe │ │ │ └── index.vue │ │ ├── JavaEdit │ │ │ └── index.vue │ │ ├── LangSelect │ │ │ └── index.vue │ │ ├── MarkDown.vue │ │ ├── Pagination │ │ │ └── index.vue │ │ ├── PanThumb │ │ │ └── index.vue │ │ ├── Permission │ │ │ ├── index.js │ │ │ └── permission.js │ │ ├── RightPanel │ │ │ └── index.vue │ │ ├── Screenfull │ │ │ └── index.vue │ │ ├── SizeSelect │ │ │ └── index.vue │ │ ├── SvgIcon │ │ │ └── index.vue │ │ ├── ThemePicker │ │ │ └── index.vue │ │ ├── Upload │ │ │ ├── CommonTree.vue │ │ │ ├── Import.vue │ │ │ ├── fileUpload.vue │ │ │ ├── globalUploader.vue │ │ │ ├── images │ │ │ │ ├── image-icon.png │ │ │ │ ├── text-icon.png │ │ │ │ └── video-icon.png │ │ │ ├── imgUpload.vue │ │ │ └── js │ │ │ │ ├── bus.js │ │ │ │ └── config.js │ │ ├── YamlEdit.vue │ │ └── YamlEdit │ │ │ └── index.vue │ │ ├── dashboard │ │ ├── LineChart.vue │ │ ├── PanelGroup.vue │ │ └── mixins │ │ │ └── resize.js │ │ ├── features │ │ ├── 401.vue │ │ ├── 404.vue │ │ └── redirect.vue │ │ ├── gen │ │ ├── datasource-conf │ │ │ ├── datasource-conf-service.js │ │ │ └── index.vue │ │ ├── index.vue │ │ ├── scheme │ │ │ ├── index.vue │ │ │ └── scheme-service.js │ │ └── table │ │ │ ├── edit.vue │ │ │ ├── index.vue │ │ │ └── table-service.js │ │ ├── home.vue │ │ ├── login.vue │ │ ├── monitor │ │ ├── log-login │ │ │ ├── index.vue │ │ │ └── log-login-service.js │ │ ├── log-operate │ │ │ ├── index.vue │ │ │ └── log-operate-service.js │ │ ├── persistent-token │ │ │ ├── index.vue │ │ │ └── persistent-token-service.js │ │ ├── server │ │ │ ├── index.vue │ │ │ └── redis-detail.vue │ │ ├── sql │ │ │ └── index.vue │ │ └── user-online │ │ │ ├── index.vue │ │ │ └── user-online-service.js │ │ ├── nested │ │ ├── menu1 │ │ │ ├── index.vue │ │ │ ├── menu1-1 │ │ │ │ └── index.vue │ │ │ └── menu1-2 │ │ │ │ └── index.vue │ │ └── menu2 │ │ │ └── index.vue │ │ ├── profile │ │ ├── components │ │ │ ├── Account.vue │ │ │ ├── Avatar.vue │ │ │ ├── Password.vue │ │ │ ├── Timeline.vue │ │ │ └── UserCard.vue │ │ └── index.vue │ │ ├── quartz │ │ └── job │ │ │ ├── index.vue │ │ │ ├── job-service.js │ │ │ └── log.vue │ │ ├── sys │ │ ├── dept │ │ │ ├── dept-service.js │ │ │ └── index.vue │ │ ├── dict │ │ │ ├── dict-service.js │ │ │ └── index.vue │ │ ├── file │ │ │ ├── edit.vue │ │ │ ├── file-service.js │ │ │ └── index.vue │ │ ├── menu │ │ │ ├── index.vue │ │ │ └── menu-service.js │ │ ├── role │ │ │ ├── index.vue │ │ │ └── role-service.js │ │ └── user │ │ │ ├── index.vue │ │ │ └── user-service.js │ │ └── tool │ │ ├── alipay │ │ ├── alipay-service.js │ │ ├── config.vue │ │ ├── index.vue │ │ └── toPay.vue │ │ ├── email │ │ ├── config.vue │ │ ├── email-service.js │ │ ├── index.vue │ │ └── send.vue │ │ └── swagger │ │ └── index.vue └── vue.config.js ├── db ├── Dockerfile └── albedo.sql ├── docker-compose.yml └── pom.xml /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | # 对所有文件生效 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | end_of_line = lf 9 | insert_final_newline = true 10 | trim_trailing_whitespace = true 11 | 12 | [*.{java, xml}] 13 | indent_style = tab 14 | indent_size = 4 15 | 16 | [*.{yml, json}] 17 | indent_style = space 18 | indent_size = 2 19 | 20 | # 对后缀名为 md 的文件生效 21 | [*.md] 22 | trim_trailing_whitespace = false 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ### gradle ### 2 | .gradle 3 | /build/ 4 | !gradle/wrapper/gradle-wrapper.jar 5 | 6 | ### STS ### 7 | .settings/ 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | bin/’‘‘ 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | rebel.xml 22 | 23 | ### NetBeans ### 24 | nbproject/private/ 25 | build/ 26 | nbbuild/ 27 | dist/ 28 | nbdist/ 29 | .nb-gradle/ 30 | 31 | ### maven ### 32 | target/ 33 | *.war 34 | *.ear 35 | *.zip 36 | *.tar 37 | *.tar.gz 38 | 39 | ### logs #### 40 | /logs/ 41 | *.log 42 | 43 | ### temp ignore ### 44 | *.cache 45 | *.diff 46 | *.patch 47 | *.tmp 48 | *.java~ 49 | *.properties~ 50 | *.xml~ 51 | 52 | ### system ignore ### 53 | .DS_Store 54 | Thumbs.db 55 | Servers 56 | .metadata 57 | gen_code 58 | 59 | 60 | /node_modules/* 61 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-core/src/main/java/com/albedo/java/common/core/aspect/LimitType.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019-2023 Albedo, somewhere (somewhere0813@gmail.com). 3 | *

4 | * you may not use this file except in compliance with the License. 5 | * You may obtain a copy of the License at 6 | *

7 | * https://www.gnu.org/licenses/lgpl.html 8 | *

9 | * Unless required by applicable law or agreed to in writing, software 10 | * distributed under the License is distributed on an "AS IS" BASIS, 11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | * See the License for the specific language governing permissions and 13 | * limitations under the License. 14 | */ 15 | 16 | package com.albedo.java.common.core.aspect; 17 | 18 | /** 19 | * 限流枚举 20 | * 21 | * @author / 22 | */ 23 | public enum LimitType { 24 | 25 | // 默认 26 | CUSTOMER, 27 | // by ip addr 28 | IP 29 | 30 | } 31 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-core/src/main/java/com/albedo/java/common/core/cache/model/CacheKey.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.core.cache.model; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | import org.springframework.lang.NonNull; 7 | 8 | import java.time.Duration; 9 | 10 | /** 11 | * 缓存 key 封装 12 | * 13 | * @author somewhere 14 | */ 15 | @Data 16 | @AllArgsConstructor 17 | @NoArgsConstructor 18 | public class CacheKey { 19 | /** 20 | * redis key 21 | */ 22 | @NonNull 23 | private String key; 24 | /** 25 | * 超时时间 秒 26 | */ 27 | private Duration expire; 28 | 29 | public CacheKey(final @NonNull String key) { 30 | this.key = key; 31 | } 32 | 33 | 34 | } 35 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-core/src/main/java/com/albedo/java/common/core/constant/ParameterKey.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.core.constant; 2 | 3 | /** 4 | * 全局参数表(c_parameter)的key 5 | * 6 | * @author somewhere 7 | * @date 2020年04月02日22:37:05 8 | */ 9 | public interface ParameterKey { 10 | 11 | String LOGIN_POLICY = LoginPolicy.class.getSimpleName(); 12 | 13 | enum LoginPolicy { 14 | /** 15 | * 一个用户在一个应用只能登录一次(如一个用户只能在一个APP上登录,也只能在一个PC端登录,但能同时登录PC和APP) 16 | * 后面的用户T掉前面的用户 17 | */ 18 | ONLY_ONE_CLIENT, 19 | 20 | /** 21 | * 用户可以任意登录: token -> userid 22 | *

23 | * 不用T人,所有人登录都行 24 | */ 25 | MANY, 26 | /** 27 | * 一个用户只能登录一次, 后面的用户T掉前面的用户LOGIN_POLICY 28 | */ 29 | ONLY_ONE, 30 | ; 31 | 32 | public boolean eq(String val) { 33 | return this.name().equalsIgnoreCase(val); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-core/src/main/java/com/albedo/java/common/core/context/ThreadLocalParam.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.core.context; 2 | 3 | import lombok.Builder; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * 线程变量封装的参数 10 | * 11 | * @author somewhere 12 | * @date 2020/11/1 2:10 下午 13 | */ 14 | @Data 15 | @Builder 16 | public class ThreadLocalParam implements Serializable { 17 | private Boolean boot; 18 | private String tenant; 19 | private Long userId; 20 | private String username; 21 | } 22 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-core/src/main/java/com/albedo/java/common/core/converter/BaseDateConverter.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.core.converter; 2 | 3 | import java.util.Map; 4 | import java.util.Set; 5 | import java.util.function.Function; 6 | 7 | /** 8 | * 解决入参为 Date类型 9 | * 10 | * @author somewhere 11 | * @date 2019-04-30 12 | */ 13 | public abstract class BaseDateConverter { 14 | 15 | /** 16 | * 值转换 17 | * 18 | * @param source 源数据 19 | * @param function 回调 20 | * @return 转换后的数据 21 | */ 22 | public T convert(String source, Function function) { 23 | if (source == null || source.isEmpty()) { 24 | return null; 25 | } 26 | String sourceTrim = source.trim(); 27 | Set> entries = getFormat().entrySet(); 28 | for (Map.Entry entry : entries) { 29 | if (sourceTrim.matches(entry.getValue())) { 30 | return function.apply(entry.getKey()); 31 | } 32 | } 33 | throw new IllegalArgumentException("无效的日期参数格式:'" + sourceTrim + "'"); 34 | } 35 | 36 | /** 37 | * 获取子类 具体的格式化表达式 38 | * 39 | * @return 格式化 40 | */ 41 | protected abstract Map getFormat(); 42 | } 43 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-core/src/main/java/com/albedo/java/common/core/domain/vo/DictQuery.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019-2023 Albedo, somewhere (somewhere0813@gmail.com). 3 | *

4 | * you may not use this file except in compliance with the License. 5 | * You may obtain a copy of the License at 6 | *

7 | * https://www.gnu.org/licenses/lgpl.html 8 | *

9 | * Unless required by applicable law or agreed to in writing, software 10 | * distributed under the License is distributed on an "AS IS" BASIS, 11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | * See the License for the specific language governing permissions and 13 | * limitations under the License. 14 | */ 15 | 16 | package com.albedo.java.common.core.domain.vo; 17 | 18 | import io.swagger.v3.oas.annotations.media.Schema; 19 | import lombok.Data; 20 | import lombok.ToString; 21 | 22 | /** 23 | * Created by somewhere on 2017/3/2. 24 | * 25 | * @author somewhere 26 | */ 27 | @Data 28 | @Schema 29 | @ToString 30 | public class DictQuery { 31 | 32 | private String code; 33 | 34 | private String filter; 35 | 36 | } 37 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-core/src/main/java/com/albedo/java/common/core/domain/vo/EchoVo.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.core.domain.vo; 2 | 3 | import java.util.Map; 4 | 5 | /** 6 | * 注入VO 父类 7 | * 8 | * @author somewhere 9 | * @date 2021/3/22 2:22 下午 10 | */ 11 | public interface EchoVo { 12 | 13 | /** 14 | * 回显值 集合 15 | * 16 | * @return 回显值 集合 17 | */ 18 | Map getEchoMap(); 19 | } 20 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-core/src/main/java/com/albedo/java/common/core/enumeration/BaseEnum.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.core.enumeration; 2 | 3 | import com.baomidou.mybatisplus.annotation.IEnum; 4 | 5 | /** 6 | * 枚举类型基类 7 | * 8 | * @author somewhere 9 | * @date 2019/07/26 10 | */ 11 | public interface BaseEnum extends IEnum { 12 | 13 | /** 14 | * 编码 15 | * 16 | * @return 编码 17 | */ 18 | default String getCode() { 19 | return toString(); 20 | } 21 | 22 | /** 23 | * 描述 24 | * 25 | * @return 描述 26 | */ 27 | String getText(); 28 | 29 | /** 30 | * 扩展参数 31 | * 32 | * @return 扩展参数 33 | */ 34 | default String getExtra() { 35 | return ""; 36 | } 37 | 38 | /** 39 | * 判断val是否跟当前枚举相等 40 | * 41 | * @param val 值 42 | * @return 是否等于 43 | */ 44 | default boolean eq(String val) { 45 | return this.getCode().equalsIgnoreCase(val); 46 | } 47 | 48 | /** 49 | * 枚举值 50 | * 51 | * @return 数据库中的值 52 | */ 53 | @Override 54 | default String getValue() { 55 | return getCode(); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-core/src/main/java/com/albedo/java/common/core/exception/ArgumentException.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.core.exception; 2 | 3 | 4 | import com.albedo.java.common.core.exception.code.ResponseCode; 5 | 6 | /** 7 | * 业务参数异常 8 | * 用于在业务中,检测到非法参数时,进行抛出的异常。 9 | * 10 | * @author somewhere 11 | * @version 3.5.0 12 | */ 13 | public class ArgumentException extends BaseUncheckedException { 14 | 15 | private static final long serialVersionUID = -3843907364558373817L; 16 | 17 | public ArgumentException(Throwable cause) { 18 | super(cause); 19 | } 20 | 21 | public ArgumentException(String message) { 22 | super(ResponseCode.BASE_VALID_PARAM.getCode(), message); 23 | } 24 | 25 | public ArgumentException(String message, Throwable cause) { 26 | super(ResponseCode.BASE_VALID_PARAM.getCode(), message, cause); 27 | } 28 | 29 | public ArgumentException(final String format, Object... args) { 30 | super(ResponseCode.BASE_VALID_PARAM.getCode(), format, args); 31 | } 32 | 33 | @Override 34 | public String toString() { 35 | return "ArgumentException [message=" + getMessage() + ", errorCode=" + getErrorCode() + "]"; 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-core/src/main/java/com/albedo/java/common/core/exception/BaseException.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.core.exception; 2 | 3 | /** 4 | * 异常接口类 5 | * 6 | * @author somewhere 7 | * @version 1.0 8 | */ 9 | public interface BaseException { 10 | 11 | /** 12 | * 统一参数验证异常码 13 | */ 14 | int BASE_VALID_PARAM = -9; 15 | 16 | /** 17 | * 返回异常信息 18 | * 19 | * @return 异常信息 20 | */ 21 | String getMessage(); 22 | 23 | /** 24 | * 返回异常编码 25 | * 26 | * @return 异常编码 27 | */ 28 | int getErrorCode(); 29 | 30 | } 31 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-core/src/main/java/com/albedo/java/common/core/exception/CommonException.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.core.exception; 2 | 3 | /** 4 | * 非业务异常 5 | * 用于在处理非业务逻辑时,进行抛出的异常。 6 | * 7 | * @author somewhere 8 | * @version 1.0 9 | * @see Exception 10 | */ 11 | public class CommonException extends BaseCheckedException { 12 | 13 | 14 | public CommonException(int code, String message) { 15 | super(code, message); 16 | } 17 | 18 | public CommonException(int code, String format, Object... args) { 19 | super(code, format, args); 20 | } 21 | 22 | public CommonException wrap(int code, String format, Object... args) { 23 | return new CommonException(code, format, args); 24 | } 25 | 26 | @Override 27 | public String toString() { 28 | return "CommonException [message=" + getMessage() + ", errorCode=" + getErrorCode() + "]"; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-core/src/main/java/com/albedo/java/common/core/exception/FeignBizException.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.core.exception; 2 | 3 | /** 4 | * @author somewhere 5 | * @date 2018-11-23 6 | */ 7 | public class FeignBizException extends RuntimeException { 8 | private static final long serialVersionUID = 1L; 9 | 10 | public FeignBizException(String message) { 11 | super(message); 12 | } 13 | 14 | public FeignBizException(Throwable cause) { 15 | super(cause); 16 | } 17 | 18 | public FeignBizException(String message, Throwable cause) { 19 | super(message, cause); 20 | } 21 | 22 | public FeignBizException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { 23 | super(message, cause, enableSuppression, writableStackTrace); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-core/src/main/java/com/albedo/java/common/core/exception/ForbiddenException.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.core.exception; 2 | 3 | import com.albedo.java.common.core.exception.code.BaseExceptionCode; 4 | import com.albedo.java.common.core.exception.code.ResponseCode; 5 | 6 | /** 7 | * 403 禁止访问 8 | * 9 | * @author somewhere 10 | * @version 1.0 11 | */ 12 | public class ForbiddenException extends BaseUncheckedException { 13 | 14 | private static final long serialVersionUID = 1L; 15 | 16 | public ForbiddenException(int code, String message) { 17 | super(code, message); 18 | } 19 | 20 | public static ForbiddenException wrap(BaseExceptionCode ex) { 21 | return new ForbiddenException(ex.getCode(), ex.getMessage()); 22 | } 23 | 24 | public static ForbiddenException wrap(String msg) { 25 | return new ForbiddenException(ResponseCode.FORBIDDEN.getCode(), msg); 26 | } 27 | 28 | @Override 29 | public String toString() { 30 | return "ForbiddenException [message=" + getMessage() + ", errorCode=" + getErrorCode() + "]"; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-core/src/main/java/com/albedo/java/common/core/exception/RuntimeMsgException.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.core.exception; 2 | 3 | import lombok.NoArgsConstructor; 4 | 5 | /** 6 | * @author somewhere 7 | * @date 😴2019年06月02日16:21:57 8 | */ 9 | @NoArgsConstructor 10 | public class RuntimeMsgException extends RuntimeException { 11 | private static final long serialVersionUID = 1L; 12 | 13 | public RuntimeMsgException(String message) { 14 | super(message); 15 | } 16 | 17 | public RuntimeMsgException(Throwable cause) { 18 | super(cause); 19 | } 20 | 21 | public RuntimeMsgException(String message, Throwable cause) { 22 | super(message, cause); 23 | } 24 | 25 | public RuntimeMsgException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { 26 | super(message, cause, enableSuppression, writableStackTrace); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-core/src/main/java/com/albedo/java/common/core/exception/UnauthorizedException.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.core.exception; 2 | 3 | 4 | import com.albedo.java.common.core.exception.code.ResponseCode; 5 | 6 | /** 7 | * 401 未认证 未登录 8 | * 9 | * @author somewhere 10 | * @version 1.0 11 | */ 12 | public class UnauthorizedException extends BaseUncheckedException { 13 | 14 | private static final long serialVersionUID = 1L; 15 | 16 | public UnauthorizedException(int code, String message) { 17 | super(code, message); 18 | } 19 | 20 | public UnauthorizedException(int code, String message, Throwable cause) { 21 | super(code, message, cause); 22 | } 23 | 24 | public static UnauthorizedException wrap(String msg) { 25 | return new UnauthorizedException(ResponseCode.UNAUTHORIZED.getCode(), msg); 26 | } 27 | 28 | @Override 29 | public String toString() { 30 | return "UnauthorizedException [message=" + getMessage() + ", errorCode=" + getErrorCode() + "]"; 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-core/src/main/java/com/albedo/java/common/core/exception/code/BaseExceptionCode.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.core.exception.code; 2 | 3 | /** 4 | * 异常编码 5 | * 6 | * @author somewhere 7 | * @date 2017-12-25 13:46 8 | */ 9 | public interface BaseExceptionCode { 10 | /** 11 | * 异常编码 12 | * 13 | * @return 异常编码 14 | */ 15 | int getCode(); 16 | 17 | /** 18 | * 异常消息 19 | * 20 | * @return 异常消息 21 | */ 22 | String getMessage(); 23 | } 24 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-core/src/main/java/com/albedo/java/common/core/jackson/databind/LocalDateTimeDeserializer.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.core.jackson.databind; 2 | 3 | import com.fasterxml.jackson.core.JsonParser; 4 | import com.fasterxml.jackson.core.JsonProcessingException; 5 | import com.fasterxml.jackson.databind.DeserializationContext; 6 | import com.fasterxml.jackson.databind.JsonDeserializer; 7 | 8 | import java.io.IOException; 9 | import java.time.Instant; 10 | import java.time.LocalDateTime; 11 | import java.time.ZoneId; 12 | 13 | /** 14 | * LocalDateTime反序列化规则 15 | *

16 | * 会将毫秒级时间戳反序列化为LocalDateTime 17 | */ 18 | public class LocalDateTimeDeserializer extends JsonDeserializer { 19 | 20 | public static final LocalDateTimeDeserializer INSTANCE = new LocalDateTimeDeserializer(); 21 | 22 | @Override 23 | public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { 24 | return LocalDateTime.ofInstant(Instant.ofEpochMilli(p.getValueAsLong()), ZoneId.systemDefault()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-core/src/main/java/com/albedo/java/common/core/jackson/databind/LocalDateTimeSerializer.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.core.jackson.databind; 2 | 3 | import com.fasterxml.jackson.core.JsonGenerator; 4 | import com.fasterxml.jackson.databind.JsonSerializer; 5 | import com.fasterxml.jackson.databind.SerializerProvider; 6 | 7 | import java.io.IOException; 8 | import java.time.LocalDateTime; 9 | import java.time.ZoneId; 10 | 11 | /** 12 | * LocalDateTime序列化规则 13 | *

14 | * 会将LocalDateTime序列化为毫秒级时间戳 15 | */ 16 | public class LocalDateTimeSerializer extends JsonSerializer { 17 | 18 | public static final LocalDateTimeSerializer INSTANCE = new LocalDateTimeSerializer(); 19 | 20 | @Override 21 | public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException { 22 | gen.writeNumber(value.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-core/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | com.albedo.java.common.core.config.RestTemplateConfiguration,\ 3 | com.albedo.java.common.core.config.JacksonBaseConfiguration,\ 4 | com.albedo.java.common.core.config.ApplicationProperties,\ 5 | com.albedo.java.common.core.exception.handler.GlobalExceptionHandler,\ 6 | com.albedo.java.common.core.util.SpringContextHolder 7 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-core/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | # 加解密根密码 2 | jasypt: 3 | encryptor: 4 | password: albedo #根密码 5 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-log/src/main/java/com/albedo/java/common/log/enums/BusinessStatus.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.log.enums; 2 | 3 | /** 4 | * 操作状态 5 | * 6 | * @author somewhere 7 | */ 8 | public enum BusinessStatus { 9 | /** 10 | * 成功 11 | */ 12 | SUCCESS, 13 | 14 | /** 15 | * 失败 16 | */ 17 | FAIL, 18 | } 19 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-log/src/main/java/com/albedo/java/common/log/enums/BusinessType.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.log.enums; 2 | 3 | /** 4 | * 业务操作类型 5 | * 6 | * @author somewhere 7 | */ 8 | public enum BusinessType { 9 | /** 10 | * 其它 11 | */ 12 | OTHER, 13 | 14 | /** 15 | * 编辑 16 | */ 17 | EDIT, 18 | /** 19 | * 锁定 20 | */ 21 | LOCK, 22 | 23 | /** 24 | * 删除 25 | */ 26 | DELETE, 27 | 28 | /** 29 | * 导出 30 | */ 31 | EXPORT, 32 | 33 | /** 34 | * 导入 35 | */ 36 | IMPORT, 37 | 38 | /** 39 | * 强退 40 | */ 41 | FORCE, 42 | 43 | /** 44 | * 生成代码 45 | */ 46 | GENCODE, 47 | /** 48 | * 清空 49 | */ 50 | CLEAN, 51 | 52 | 53 | } 54 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-log/src/main/java/com/albedo/java/common/log/enums/LogType.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.log.enums; 2 | 3 | /** 4 | * 日志类型 5 | * 6 | * @author somewhere 7 | */ 8 | public enum LogType { 9 | /** 10 | * INFO 11 | */ 12 | INFO, 13 | /** 14 | * WARN 15 | */ 16 | WARN, 17 | /** 18 | * ERROR 19 | */ 20 | ERROR 21 | } 22 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-log/src/main/java/com/albedo/java/common/log/enums/OperatorType.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.log.enums; 2 | 3 | /** 4 | * 操作人类别 5 | * 6 | * @author somewhere 7 | */ 8 | public enum OperatorType { 9 | /** 10 | * 其它 11 | */ 12 | OTHER, 13 | 14 | /** 15 | * 后台用户 16 | */ 17 | MANAGE, 18 | 19 | /** 20 | * 手机端用户 21 | */ 22 | MOBILE 23 | } 24 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-log/src/main/java/com/albedo/java/common/log/event/ParameterUpdateEvent.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.log.event; 2 | 3 | import com.albedo.java.common.log.event.model.ParameterUpdate; 4 | import org.springframework.context.ApplicationEvent; 5 | 6 | /** 7 | * 参数更新事件 8 | * 9 | * @author somewhere 10 | * @date 2020年03月18日17:22:55 11 | */ 12 | public class ParameterUpdateEvent extends ApplicationEvent { 13 | public ParameterUpdateEvent(ParameterUpdate source) { 14 | super(source); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-log/src/main/java/com/albedo/java/common/log/event/ParameterUpdateListener.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.log.event; 2 | 3 | import com.albedo.java.common.core.context.ContextUtil; 4 | import com.albedo.java.common.log.event.model.ParameterUpdate; 5 | import lombok.RequiredArgsConstructor; 6 | import lombok.extern.slf4j.Slf4j; 7 | import org.springframework.context.event.EventListener; 8 | import org.springframework.scheduling.annotation.Async; 9 | import org.springframework.stereotype.Component; 10 | 11 | /** 12 | * 参数修改事件监听,用于调整具体的业务 13 | * 14 | * @author somewhere 15 | * @date 2020年03月18日17:39:59 16 | */ 17 | @Component 18 | @Slf4j 19 | @RequiredArgsConstructor 20 | public class ParameterUpdateListener { 21 | 22 | @Async 23 | @EventListener({ParameterUpdateEvent.class}) 24 | public void saveSysLog(ParameterUpdateEvent event) { 25 | ParameterUpdate source = (ParameterUpdate) event.getSource(); 26 | 27 | ContextUtil.setTenant(source.getTenant()); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-log/src/main/java/com/albedo/java/common/log/event/model/ParameterUpdate.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.log.event.model; 2 | 3 | import lombok.*; 4 | import lombok.experimental.Accessors; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * 登录状态DTO 10 | * 11 | * @author somewhere 12 | * @date 2020年03月18日17:25:44 13 | */ 14 | @Data 15 | @NoArgsConstructor 16 | @AllArgsConstructor 17 | @Accessors(chain = true) 18 | @ToString(callSuper = true) 19 | @EqualsAndHashCode(callSuper = false) 20 | @Builder 21 | public class ParameterUpdate implements Serializable { 22 | private static final long serialVersionUID = -3124612657759050173L; 23 | 24 | private String key; 25 | private String value; 26 | private String oldValue; 27 | 28 | private String tenant; 29 | } 30 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-log/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | com.albedo.java.common.log.config.LogAutoConfiguration,\ 3 | com.albedo.java.common.log.init.ApplicationLoggerInitializer 4 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-module/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | albedo-common 7 | com.albedo.java 8 | 3.3.18-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | albedo-common-module 13 | 14 | 15 | 16 | 17 | com.albedo.java 18 | albedo-common-core 19 | 20 | 21 | 22 | com.albedo.java 23 | albedo-common-log 24 | 25 | 26 | 27 | com.baomidou 28 | mybatis-plus-boot-starter 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-module/src/main/java/com/albedo/java/common/web/resource/BaseResource.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.web.resource; 2 | 3 | import com.albedo.java.common.core.resource.GeneralResource; 4 | 5 | /** 6 | * 基础控制器支持类 copyright 2014 albedo all right reserved author MrLi created on 7 | * 2014年10月15日 下午4:04:00 8 | * 9 | * @author somewhere 10 | */ 11 | public class BaseResource extends GeneralResource { 12 | 13 | 14 | } 15 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-module/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | com.albedo.java.common.runner.ContextInitRunner,\ 3 | com.albedo.java.common.config.JacksonMapperConfiguration,\ 4 | com.albedo.java.common.config.datasource.AuthorityDatabaseAutoConfiguration,\ 5 | com.albedo.java.common.config.datasource.AuthorityMybatisAutoConfiguration,\ 6 | com.albedo.java.common.config.GlobalMvcConfigurer 7 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-security/src/main/java/com/albedo/java/common/security/component/session/CustomSessionInformation.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.common.security.component.session; 2 | 3 | import org.springframework.security.core.session.SessionInformation; 4 | 5 | import java.util.Date; 6 | 7 | /** 8 | * 自定义的目的主要是redis序列化时需要默认构造,SessionInformation没有默认构造 9 | * 10 | * @author somewhere 11 | */ 12 | public class CustomSessionInformation extends SessionInformation { 13 | private static final Object PRINCIPAL = new Object(); 14 | private static final Date LAST_REQUEST = new Date(); 15 | 16 | public CustomSessionInformation() { 17 | super(PRINCIPAL, "-1", LAST_REQUEST); 18 | } 19 | 20 | public CustomSessionInformation(Object principal, String sessionId, Date lastRequest) { 21 | super(principal, sessionId, lastRequest); 22 | } 23 | 24 | 25 | } 26 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-security/src/main/java/com/albedo/java/common/security/event/SysUserOnlineEvent.java: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | * Copyright (c) 2019-2023 Albedo, somewhere (somewhere0813@gmail.com). 4 | *

5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | *

8 | * https://www.gnu.org/licenses/lgpl.html 9 | *

10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.albedo.java.common.security.event; 18 | 19 | import com.albedo.java.modules.sys.domain.UserOnlineDo; 20 | import org.springframework.context.ApplicationEvent; 21 | 22 | /** 23 | * @author somewhere 用户登录事件 24 | */ 25 | public class SysUserOnlineEvent extends ApplicationEvent { 26 | 27 | public SysUserOnlineEvent(UserOnlineDo source) { 28 | super(source); 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /albedo-common/albedo-common-security/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | com.albedo.java.common.security.config.SecurityAutoConfiguration,\ 3 | com.albedo.java.common.security.config.SecurityJwtConfiguration 4 | -------------------------------------------------------------------------------- /albedo-common/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | com.albedo.java 8 | albedo 9 | 3.3.18-SNAPSHOT 10 | 11 | 12 | albedo-common 13 | pom 14 | 15 | albedo 公共聚合模块 16 | 17 | 18 | albedo-common-core 19 | albedo-common-module 20 | albedo-common-log 21 | albedo-common-security 22 | 23 | 24 | -------------------------------------------------------------------------------- /albedo-modules/albedo-appendix/src/main/java/com/albedo/java/modules/file/domain/dto/AppendixQueryCriteria.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.file.domain.dto; 2 | 3 | import com.albedo.java.common.core.annotation.Query; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * @author somewhere 10 | */ 11 | @Data 12 | public class AppendixQueryCriteria implements Serializable { 13 | 14 | private static final long serialVersionUID = 1L; 15 | 16 | /** 17 | * F_NAME name : 名称 18 | */ 19 | @Query(operator = Query.Operator.like, propName = "original_file_name") 20 | private String originalFileName; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /albedo-modules/albedo-appendix/src/main/java/com/albedo/java/modules/file/repository/AppendixRepository.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.file.repository; 2 | 3 | import com.albedo.java.modules.file.domain.Appendix; 4 | import com.albedo.java.plugins.database.mybatis.repository.BaseRepository; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * Mapper 接口 10 | * 业务附件 11 | *

12 | * 13 | * @author somewhere 14 | * @date 2021-06-30 15 | * @create [2021-06-30] [somewhere] [初始创建] 16 | */ 17 | @Mapper 18 | public interface AppendixRepository extends BaseRepository { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /albedo-modules/albedo-file/albedo-file-biz/src/main/java/com/albedo/java/modules/file/repository/FileRepository.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.file.repository; 2 | 3 | import com.albedo.java.modules.file.domain.FileDo; 4 | import com.albedo.java.plugins.database.mybatis.repository.BaseRepository; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | *

9 | * Mapper 接口 10 | * 增量文件上传日志 11 | *

12 | * 13 | * @author somewhere 14 | * @date 2021-06-30 15 | * @create [2021-06-30] [somewhere] [初始创建] 16 | */ 17 | @Mapper 18 | public interface FileRepository extends BaseRepository { 19 | 20 | } 21 | -------------------------------------------------------------------------------- /albedo-modules/albedo-file/albedo-file-biz/src/main/java/com/albedo/java/modules/file/strategy/FileChunkStrategy.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.file.strategy; 2 | 3 | 4 | import com.albedo.java.common.core.util.Result; 5 | import com.albedo.java.modules.file.domain.FileDo; 6 | import com.albedo.java.modules.file.domain.dto.FileChunksMergeDto; 7 | 8 | /** 9 | * 文件分片处理策略类 10 | * 11 | * @author somewhere 12 | * @date 2019/06/19 13 | */ 14 | public interface FileChunkStrategy { 15 | 16 | /** 17 | * 根据md5检测文件 18 | * 19 | * @param md5 md5 20 | * @param userId 用户id 21 | * @return 附件 22 | */ 23 | FileDo md5Check(String md5, Long userId); 24 | 25 | /** 26 | * 合并文件 27 | * 28 | * @param merge 合并参数 29 | * @return 附件 30 | */ 31 | Result chunksMerge(FileChunksMergeDto merge); 32 | } 33 | -------------------------------------------------------------------------------- /albedo-modules/albedo-file/albedo-file-domain/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | albedo-file 7 | com.albedo.java 8 | 3.3.18-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | albedo-file-domain 13 | 14 | 15 | 16 | com.albedo.java 17 | albedo-common-core 18 | 3.3.18-SNAPSHOT 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /albedo-modules/albedo-file/albedo-file-domain/src/main/java/com/albedo/java/modules/file/domain/FileDeleteBo.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.file.domain; 2 | 3 | import com.albedo.java.modules.file.domain.enums.FileStorageType; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | 7 | /** 8 | * 文件删除 9 | * 10 | * @author somewhere 11 | * @date 2019/05/07 12 | */ 13 | @Data 14 | @Builder 15 | public class FileDeleteBo { 16 | /** 17 | * 桶 18 | */ 19 | private String bucket; 20 | /** 21 | * 相对路径 22 | */ 23 | private String path; 24 | /** 25 | * 存储类型 26 | */ 27 | private FileStorageType storageType; 28 | } 29 | -------------------------------------------------------------------------------- /albedo-modules/albedo-file/albedo-file-domain/src/main/java/com/albedo/java/modules/file/domain/FileGetUrlBo.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.file.domain; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.*; 5 | import lombok.experimental.Accessors; 6 | 7 | import javax.validation.constraints.NotBlank; 8 | import java.io.Serializable; 9 | 10 | /** 11 | *

12 | * 实体类 13 | * 附件 14 | *

15 | * 16 | * @author somewhere 17 | * @since 2021-06-15 18 | */ 19 | @Data 20 | @NoArgsConstructor 21 | @AllArgsConstructor 22 | @Accessors(chain = true) 23 | @ToString(callSuper = true) 24 | @EqualsAndHashCode(callSuper = false) 25 | @Builder 26 | @Schema(name = "FileGetUrlVO", description = "附件查询") 27 | public class FileGetUrlBo implements Serializable { 28 | private static final long serialVersionUID = 1L; 29 | 30 | @NotBlank(message = "请传入文件路径") 31 | private String path; 32 | private String originalFileName; 33 | 34 | private String bucket; 35 | } 36 | -------------------------------------------------------------------------------- /albedo-modules/albedo-file/albedo-file-domain/src/main/java/com/albedo/java/modules/file/domain/dto/FileChunkCheckDto.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.file.domain.dto; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import lombok.ToString; 6 | 7 | /** 8 | * 分片检测参数 9 | * 10 | * @author somewhere 11 | * @date 2018/08/28 12 | */ 13 | @Data 14 | @ToString 15 | @Schema(name = "FileChunkCheck", description = "文件分片信息") 16 | public class FileChunkCheckDto { 17 | 18 | @Schema(name = "文件大小") 19 | private Long size; 20 | @Schema(name = "文件唯一名") 21 | private String name; 22 | @Schema(name = "分片索引") 23 | private Integer chunkIndex; 24 | } 25 | -------------------------------------------------------------------------------- /albedo-modules/albedo-file/albedo-file-domain/src/main/java/com/albedo/java/modules/file/domain/dto/FileChunksMergeDto.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.file.domain.dto; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import lombok.ToString; 6 | 7 | /** 8 | * 封建分片合并DTO 9 | * 10 | * @author somewhere 11 | * @date 2018/08/28 12 | */ 13 | @Data 14 | @ToString 15 | @Schema(name = "FileChunksMerge", description = "文件合并实体") 16 | public class FileChunksMergeDto { 17 | 18 | @Schema(name = "文件唯一名 md5.js 生成的, 与后端生成的一致") 19 | private String name; 20 | @Schema(name = "原始文件名") 21 | private String submittedFileName; 22 | 23 | @Schema(name = "md5", description = "webuploader 自带的md5算法值, 与后端生成的不一致") 24 | private String md5; 25 | 26 | @Schema(name = "分片总数") 27 | private Integer chunks; 28 | @Schema(name = "后缀") 29 | private String ext; 30 | @Schema(name = "文件夹id") 31 | private Long folderId; 32 | 33 | @Schema(name = "大小") 34 | private Long size; 35 | @Schema(name = "类型") 36 | private String contextType; 37 | } 38 | -------------------------------------------------------------------------------- /albedo-modules/albedo-file/albedo-file-domain/src/main/java/com/albedo/java/modules/file/domain/dto/FileQueryCriteria.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.file.domain.dto; 2 | 3 | import com.albedo.java.common.core.annotation.Query; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * @author somewhere 10 | */ 11 | @Data 12 | public class FileQueryCriteria implements Serializable { 13 | 14 | private static final long serialVersionUID = 1L; 15 | 16 | /** 17 | * 18 | */ 19 | @Query(operator = Query.Operator.like, propName = "biz_type") 20 | private String bizType; 21 | /** 22 | * 23 | */ 24 | @Query(operator = Query.Operator.like, propName = "original_file_name") 25 | private String originalFileName; 26 | /** 27 | * 28 | */ 29 | @Query(propName = "file_type") 30 | private String fileType; 31 | /** 32 | * 33 | */ 34 | @Query(propName = "storage_type") 35 | private String storageType; 36 | 37 | } 38 | -------------------------------------------------------------------------------- /albedo-modules/albedo-file/albedo-file-domain/src/main/java/com/albedo/java/modules/file/domain/dto/FileUploadDto.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.file.domain.dto; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import lombok.ToString; 6 | 7 | /** 8 | * 文件分片上传实体 9 | * 10 | * @author somewhere 11 | * @date 2018/08/29 12 | */ 13 | @Data 14 | @Schema(name = "FileUpload", description = "文件分片上传实体") 15 | @ToString 16 | public class FileUploadDto { 17 | @Schema(name = "md5", description = "webuploader 自带的md5算法值, 与后端生成的不一致") 18 | private String md5; 19 | @Schema(name = "大小") 20 | private Long size; 21 | @Schema(name = "文件唯一名 md5.js生成的, 与后端生成的一致") 22 | private String name; 23 | @Schema(name = "分片总数") 24 | private Integer chunks; 25 | @Schema(name = "当前分片") 26 | private Integer chunk; 27 | @Schema(name = "最后更新时间") 28 | private String lastModifiedDate; 29 | @Schema(name = "类型") 30 | private String type; 31 | @Schema(name = "后缀") 32 | private String ext; 33 | @Schema(name = "文件夹id") 34 | private Long folderId; 35 | } 36 | -------------------------------------------------------------------------------- /albedo-modules/albedo-file/albedo-file-domain/src/main/java/com/albedo/java/modules/file/domain/vo/param/FileUploadVo.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.file.domain.vo.param; 2 | 3 | 4 | import com.albedo.java.modules.file.domain.enums.FileStorageType; 5 | import io.swagger.v3.oas.annotations.media.Schema; 6 | import lombok.Data; 7 | 8 | import javax.validation.constraints.NotBlank; 9 | import java.io.Serializable; 10 | 11 | /** 12 | * 附件上传 13 | * 14 | * @author somewhere 15 | * @date 2019-05-12 18:49 16 | */ 17 | @Data 18 | @Schema(name = "FileUploadVO", description = "附件上传") 19 | public class FileUploadVo implements Serializable { 20 | 21 | @Schema(name = "业务类型") 22 | @NotBlank(message = "请填写业务类型") 23 | private String bizType; 24 | 25 | @Schema(name = "桶") 26 | private String bucket; 27 | 28 | @Schema(name = "存储类型") 29 | private FileStorageType storageType; 30 | } 31 | -------------------------------------------------------------------------------- /albedo-modules/albedo-file/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | com.albedo.java 7 | albedo-modules 8 | 3.3.18-SNAPSHOT 9 | 10 | 11 | 4.0.0 12 | 13 | albedo-file 14 | pom 15 | 16 | albedo-file-domain 17 | albedo-file-biz 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /albedo-modules/albedo-gen/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | albedo-modules 7 | com.albedo.java 8 | 3.3.18-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | albedo-gen 13 | 14 | 15 | 16 | 17 | com.albedo.java 18 | albedo-common-security 19 | 20 | 21 | com.albedo.java 22 | albedo-sys-api 23 | 24 | 25 | 26 | com.albedo.java 27 | albedo-plugin-dynamic-datasource 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /albedo-modules/albedo-gen/src/main/java/com/albedo/java/modules/gen/cache/DatasourceConfCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.gen.cache; 2 | 3 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 4 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 5 | 6 | import java.time.Duration; 7 | 8 | /** 9 | * @author somewhere 10 | * @date 2021/10/21 11:25 上午 11 | */ 12 | public class DatasourceConfCacheKeyBuilder implements CacheKeyBuilder { 13 | @Override 14 | public String getPrefix() { 15 | return CacheKeyBuilderConstants.GEN_DATASOURCE_CONF; 16 | } 17 | 18 | @Override 19 | public Duration getExpire() { 20 | return Duration.ofHours(12); 21 | } 22 | } 23 | 24 | -------------------------------------------------------------------------------- /albedo-modules/albedo-gen/src/main/java/com/albedo/java/modules/gen/cache/SchemeCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.gen.cache; 2 | 3 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 4 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 5 | 6 | import java.time.Duration; 7 | 8 | /** 9 | * @author somewhere 10 | * @date 2021/10/21 11:25 上午 11 | */ 12 | public class SchemeCacheKeyBuilder implements CacheKeyBuilder { 13 | @Override 14 | public String getPrefix() { 15 | return CacheKeyBuilderConstants.GEN_SCHEME; 16 | } 17 | 18 | @Override 19 | public Duration getExpire() { 20 | return Duration.ofHours(12); 21 | } 22 | } 23 | 24 | -------------------------------------------------------------------------------- /albedo-modules/albedo-gen/src/main/java/com/albedo/java/modules/gen/cache/TableCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.gen.cache; 2 | 3 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 4 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 5 | 6 | import java.time.Duration; 7 | 8 | /** 9 | * @author somewhere 10 | * @date 2021/10/21 11:25 上午 11 | */ 12 | public class TableCacheKeyBuilder implements CacheKeyBuilder { 13 | @Override 14 | public String getPrefix() { 15 | return CacheKeyBuilderConstants.GEN_TABLE; 16 | } 17 | 18 | @Override 19 | public Duration getExpire() { 20 | return Duration.ofHours(12); 21 | } 22 | } 23 | 24 | -------------------------------------------------------------------------------- /albedo-modules/albedo-gen/src/main/java/com/albedo/java/modules/gen/cache/TableColumnCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.gen.cache; 2 | 3 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 4 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 5 | 6 | import java.time.Duration; 7 | 8 | /** 9 | * @author somewhere 10 | * @date 2021/10/21 11:25 上午 11 | */ 12 | public class TableColumnCacheKeyBuilder implements CacheKeyBuilder { 13 | @Override 14 | public String getPrefix() { 15 | return CacheKeyBuilderConstants.GEN_TABLE_COLUMN; 16 | } 17 | 18 | @Override 19 | public Duration getExpire() { 20 | return Duration.ofHours(12); 21 | } 22 | } 23 | 24 | -------------------------------------------------------------------------------- /albedo-modules/albedo-gen/src/main/java/com/albedo/java/modules/gen/service/TemplateService.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019-2023 Albedo, somewhere (somewhere0813@gmail.com). 3 | *

4 | * you may not use this file except in compliance with the License. 5 | * You may obtain a copy of the License at 6 | *

7 | * https://www.gnu.org/licenses/lgpl.html 8 | *

9 | * Unless required by applicable law or agreed to in writing, software 10 | * distributed under the License is distributed on an "AS IS" BASIS, 11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | * See the License for the specific language governing permissions and 13 | * limitations under the License. 14 | */ 15 | 16 | package com.albedo.java.modules.gen.service; 17 | 18 | /** 19 | * @author somewhere 20 | * @description 21 | * @date 2020/5/30 11:26 下午 22 | */ 23 | public interface TemplateService { 24 | 25 | } 26 | -------------------------------------------------------------------------------- /albedo-modules/albedo-gen/src/main/resources/mapper/gen/TableColumnMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /albedo-modules/albedo-monitor/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | albedo-modules 7 | com.albedo.java 8 | 3.3.18-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | albedo-monitor 13 | 14 | 15 | 16 | 17 | com.albedo.java 18 | albedo-common-module 19 | 20 | 21 | 22 | com.github.oshi 23 | oshi-core 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /albedo-modules/albedo-monitor/src/main/java/com/albedo/java/modules/monitor/domain/ReportSearchType.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019-2023 Albedo, somewhere (somewhere0813@gmail.com). 3 | *

4 | * you may not use this file except in compliance with the License. 5 | * You may obtain a copy of the License at 6 | *

7 | * https://www.gnu.org/licenses/lgpl.html 8 | *

9 | * Unless required by applicable law or agreed to in writing, software 10 | * distributed under the License is distributed on an "AS IS" BASIS, 11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | * See the License for the specific language governing permissions and 13 | * limitations under the License. 14 | */ 15 | 16 | package com.albedo.java.modules.monitor.domain; 17 | 18 | /** 19 | * redis key数量 / 占用内存 /redis信息 20 | * 21 | * @author somewhere 22 | * @date 2021-03-08 23 | */ 24 | public enum ReportSearchType { 25 | 26 | /** 27 | * key数量 28 | */ 29 | KEY, 30 | /** 31 | * 占用内存 32 | */ 33 | RAM, 34 | /** 35 | * redis信息 36 | */ 37 | INFO 38 | 39 | } 40 | -------------------------------------------------------------------------------- /albedo-modules/albedo-monitor/src/main/java/com/albedo/java/modules/monitor/service/MonitorService.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019-2023 Albedo, somewhere (somewhere0813@gmail.com). 3 | *

4 | * you may not use this file except in compliance with the License. 5 | * You may obtain a copy of the License at 6 | *

7 | * https://www.gnu.org/licenses/lgpl.html 8 | *

9 | * Unless required by applicable law or agreed to in writing, software 10 | * distributed under the License is distributed on an "AS IS" BASIS, 11 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | * See the License for the specific language governing permissions and 13 | * limitations under the License. 14 | */ 15 | 16 | package com.albedo.java.modules.monitor.service; 17 | 18 | import java.util.Map; 19 | 20 | /** 21 | * @author somewhere 22 | * @date 2020-05-02 23 | */ 24 | public interface MonitorService { 25 | 26 | /** 27 | * 查询数据分页 28 | * 29 | * @return Map 30 | */ 31 | Map getServers(); 32 | 33 | } 34 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM anapsix/alpine-java:8_server-jre_unlimited as builder 2 | WORKDIR /build 3 | ARG JAR_FILE=target/albedo-sys-server.jar 4 | COPY ${JAR_FILE} app.jar 5 | RUN java -Djarmode=layertools -jar app.jar extract && rm app.jar 6 | 7 | FROM anapsix/alpine-java:8_server-jre_unlimited 8 | LABEL maintainer="somewhere0813@gmail.com" 9 | ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=fileDo:/dev/./urandom" 10 | WORKDIR albedo-sys-server 11 | 12 | COPY --from=builder /build/dependencies/ ./ 13 | COPY --from=builder /build/snapshot-dependencies/ ./ 14 | COPY --from=builder /build/spring-boot-loader/ ./ 15 | COPY --from=builder /build/application/ ./ 16 | 17 | EXPOSE 4000 18 | 19 | CMD sleep 5; java $JAVA_OPTS org.springframework.boot.loader.JarLauncher 20 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-api/src/main/java/com/albedo/java/modules/sys/feign/RemoteDeptService.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.feign; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author somewhere 7 | * @description 8 | * @date 2020/6/1 11:10 9 | */ 10 | public interface RemoteDeptService { 11 | /** 12 | * findDescendantIdList 13 | * 14 | * @param deptId 15 | * @return List 16 | * @author somewhere 17 | * @updateTime 2020/6/1 11:09 18 | */ 19 | List findDescendantIdList(Long deptId); 20 | } 21 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-api/src/main/java/com/albedo/java/modules/sys/feign/RemoteDictService.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.feign; 2 | 3 | import com.albedo.java.modules.sys.domain.DictDo; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * @author somewhere 9 | * @description 10 | * @date 2020/6/1 11:10 11 | */ 12 | public interface RemoteDictService { 13 | 14 | /** 15 | * findAllOrderBySort 16 | * 17 | * @return java.lang.String 18 | * @author somewhere 19 | * @updateTime 2020/6/1 11:09 20 | */ 21 | List findAllOrderBySort(); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-api/src/main/java/com/albedo/java/modules/sys/feign/RemoteLogLoginService.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2019-2020, somowhere (somewhere0813@gmail.com). 3 | *

4 | * Licensed under the GNU Lesser General Public License 3.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | *

8 | * https://www.gnu.org/licenses/lgpl.html 9 | *

10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.albedo.java.modules.sys.feign; 18 | 19 | import com.albedo.java.modules.sys.domain.LogLoginDo; 20 | 21 | /** 22 | * @author somowhere 23 | * @date 2019/2/1 24 | */ 25 | public interface RemoteLogLoginService { 26 | /** 27 | * 保存日志 28 | * 29 | * @param logLogin 日志实体 30 | * @return succes、false 31 | */ 32 | boolean save(LogLoginDo logLogin); 33 | } 34 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-api/src/main/java/com/albedo/java/modules/sys/feign/RemoteMenuService.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.feign; 2 | 3 | import com.albedo.java.modules.sys.domain.dto.GenSchemeDto; 4 | 5 | /** 6 | * @author somewhere 7 | * @description 8 | * @date 2020/6/1 11:10 9 | */ 10 | public interface RemoteMenuService { 11 | 12 | /** 13 | * saveByGenScheme 14 | * 15 | * @param schemeDto 16 | * @return boolean 17 | * @author somewhere 18 | * @updateTime 2020/6/1 11:10 19 | */ 20 | boolean saveByGenScheme(GenSchemeDto schemeDto); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-api/src/main/java/com/albedo/java/modules/sys/feign/RemoteRoleService.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.feign; 2 | 3 | import java.io.Serializable; 4 | import java.util.List; 5 | 6 | /** 7 | * @author somewhere 8 | * @description 9 | * @date 2020/6/1 11:18 10 | */ 11 | public interface RemoteRoleService { 12 | /** 13 | * findDescendantIdList 14 | * 15 | * @param roleId 16 | * @return List 17 | * @author somewhere 18 | * @updateTime 2020/6/1 11:09 19 | */ 20 | List findDeptIdsByRoleId(Serializable roleId); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-biz/src/main/java/com/albedo/java/modules/sys/service/LogOperateService.java: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | * Copyright (c) 2019-2023 Albedo, somewhere (somewhere0813@gmail.com). 4 | *

5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | *

8 | * https://www.gnu.org/licenses/lgpl.html 9 | *

10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.albedo.java.modules.sys.service; 18 | 19 | import com.albedo.java.modules.sys.domain.LogOperateDo; 20 | import com.albedo.java.plugins.database.mybatis.service.BaseService; 21 | 22 | /** 23 | *

24 | * 日志表 服务类 25 | *

26 | * 27 | * @author somewhere 28 | * @since 2019/2/1 29 | */ 30 | public interface LogOperateService extends BaseService { 31 | 32 | } 33 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-biz/src/main/java/com/albedo/java/modules/sys/service/RoleDeptService.java: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | * Copyright (c) 2019-2023 Albedo, somewhere (somewhere0813@gmail.com). 4 | *

5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | *

8 | * https://www.gnu.org/licenses/lgpl.html 9 | *

10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.albedo.java.modules.sys.service; 18 | 19 | import com.albedo.java.modules.sys.domain.RoleDeptDo; 20 | import com.albedo.java.plugins.database.mybatis.service.BaseService; 21 | 22 | /** 23 | *

24 | * 角色菜单表 服务类 25 | *

26 | * 27 | * @author somewhere 28 | * @since 2019/2/1 29 | */ 30 | public interface RoleDeptService extends BaseService { 31 | 32 | } 33 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-biz/src/main/resources/mapper/sys/LogOperateMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-domain/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | albedo-sys 7 | com.albedo.java 8 | 3.3.18-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | albedo-sys-domain 13 | 14 | 15 | 16 | 17 | com.albedo.java 18 | albedo-common-core 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-domain/src/main/java/com/albedo/java/modules/sys/cache/ApplicationCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.cache; 2 | 3 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 4 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 5 | 6 | import java.time.Duration; 7 | 8 | /** 9 | * 应用 KEY 10 | *

11 | * #c_auth_application 12 | * 13 | * @author somewhere 14 | * @date 2020/9/20 6:45 下午 15 | */ 16 | public class ApplicationCacheKeyBuilder implements CacheKeyBuilder { 17 | @Override 18 | public String getPrefix() { 19 | return CacheKeyBuilderConstants.APPLICATION; 20 | } 21 | 22 | @Override 23 | public Duration getExpire() { 24 | return Duration.ofHours(24); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-domain/src/main/java/com/albedo/java/modules/sys/cache/ApplicationClientCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.cache; 2 | 3 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 4 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 5 | 6 | import java.time.Duration; 7 | 8 | /** 9 | * 应用 KEY 10 | *

11 | * #c_auth_application 12 | * 13 | * @author somewhere 14 | * @date 2020/9/20 6:45 下午 15 | */ 16 | public class ApplicationClientCacheKeyBuilder implements CacheKeyBuilder { 17 | @Override 18 | public String getPrefix() { 19 | return CacheKeyBuilderConstants.APPLICATION_CLIENT; 20 | } 21 | 22 | @Override 23 | public Duration getExpire() { 24 | return Duration.ofHours(24); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-domain/src/main/java/com/albedo/java/modules/sys/cache/DeptCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.cache; 2 | 3 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 4 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 5 | 6 | import java.time.Duration; 7 | 8 | /** 9 | * @author somewhere 10 | * @date 2021/10/21 11:25 上午 11 | */ 12 | public class DeptCacheKeyBuilder implements CacheKeyBuilder { 13 | @Override 14 | public String getPrefix() { 15 | return CacheKeyBuilderConstants.DEPT; 16 | } 17 | 18 | @Override 19 | public Duration getExpire() { 20 | return Duration.ofHours(12); 21 | } 22 | } 23 | 24 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-domain/src/main/java/com/albedo/java/modules/sys/cache/DictCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.cache; 2 | 3 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 4 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 5 | 6 | import java.time.Duration; 7 | 8 | /** 9 | * @author somewhere 10 | * @date 2021/10/21 11:25 上午 11 | */ 12 | public class DictCacheKeyBuilder implements CacheKeyBuilder { 13 | @Override 14 | public String getPrefix() { 15 | return CacheKeyBuilderConstants.DICT; 16 | } 17 | 18 | @Override 19 | public Duration getExpire() { 20 | return Duration.ofHours(12); 21 | } 22 | } 23 | 24 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-domain/src/main/java/com/albedo/java/modules/sys/cache/LogLoginBrowserCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.cache; 2 | 3 | 4 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 5 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 6 | 7 | /** 8 | * 参数 KEY 9 | * {tenant}:LOGIN_LOG_BROWSER -> long 10 | *

11 | * #sys_log_login 12 | * 13 | * @author somewhere 14 | * @date 2020/9/20 6:45 下午 15 | */ 16 | public class LogLoginBrowserCacheKeyBuilder implements CacheKeyBuilder { 17 | @Override 18 | public String getPrefix() { 19 | return CacheKeyBuilderConstants.LOGIN_LOG_BROWSER; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-domain/src/main/java/com/albedo/java/modules/sys/cache/LogLoginSystemCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.cache; 2 | 3 | 4 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 5 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 6 | 7 | /** 8 | * 参数 KEY 9 | * {tenant}:LOGIN_LOG_SYSTEM -> long 10 | *

11 | * #sys_log_login 12 | * 13 | * @author somewhere 14 | * @date 2020/9/20 6:45 下午 15 | */ 16 | public class LogLoginSystemCacheKeyBuilder implements CacheKeyBuilder { 17 | @Override 18 | public String getPrefix() { 19 | return CacheKeyBuilderConstants.LOGIN_LOG_SYSTEM; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-domain/src/main/java/com/albedo/java/modules/sys/cache/LogLoginTenDayCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.cache; 2 | 3 | 4 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 5 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 6 | 7 | /** 8 | * 参数 KEY 9 | * {tenant}:LOGIN_LOG_TEN_DAY -> long 10 | *

11 | * #sys_log_login 12 | * 13 | * @author somewhere 14 | * @date 2020/9/20 6:45 下午 15 | */ 16 | public class LogLoginTenDayCacheKeyBuilder implements CacheKeyBuilder { 17 | @Override 18 | public String getPrefix() { 19 | return CacheKeyBuilderConstants.LOGIN_LOG_TEN_DAY; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-domain/src/main/java/com/albedo/java/modules/sys/cache/MenuCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.cache; 2 | 3 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 4 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 5 | 6 | import java.time.Duration; 7 | 8 | /** 9 | * @author somewhere 10 | * @date 2021/10/21 11:25 上午 11 | */ 12 | public class MenuCacheKeyBuilder implements CacheKeyBuilder { 13 | @Override 14 | public String getPrefix() { 15 | return CacheKeyBuilderConstants.MENU; 16 | } 17 | 18 | @Override 19 | public Duration getExpire() { 20 | return Duration.ofHours(12); 21 | } 22 | } 23 | 24 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-domain/src/main/java/com/albedo/java/modules/sys/cache/ParameterKeyCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.cache; 2 | 3 | 4 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 5 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 6 | 7 | /** 8 | * 参数 KEY 9 | * {tenant}:PARAMETER_KEY:{key} -> value 10 | *

11 | * #c_parameter 12 | * 13 | * @author somewhere 14 | * @date 2020/9/20 6:45 下午 15 | */ 16 | public class ParameterKeyCacheKeyBuilder implements CacheKeyBuilder { 17 | @Override 18 | public String getPrefix() { 19 | return CacheKeyBuilderConstants.PARAMETER_KEY; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-domain/src/main/java/com/albedo/java/modules/sys/cache/RoleCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.cache; 2 | 3 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 4 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 5 | 6 | import java.time.Duration; 7 | 8 | /** 9 | * @author somewhere 10 | * @date 2021/10/21 11:25 上午 11 | */ 12 | public class RoleCacheKeyBuilder implements CacheKeyBuilder { 13 | @Override 14 | public String getPrefix() { 15 | return CacheKeyBuilderConstants.ROLE; 16 | } 17 | 18 | @Override 19 | public Duration getExpire() { 20 | return Duration.ofHours(12); 21 | } 22 | } 23 | 24 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-domain/src/main/java/com/albedo/java/modules/sys/cache/TodayLoginIvCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.cache; 2 | 3 | 4 | import com.albedo.java.common.core.cache.model.CacheKey; 5 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 6 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 7 | 8 | import java.time.Duration; 9 | import java.time.LocalDate; 10 | 11 | /** 12 | * 参数 KEY 13 | * {tenant}:TODAY_LOGIN_IV:{now} -> long 14 | *

15 | * #sys_log_login 16 | * 17 | * @author somewhere 18 | * @date 2020/9/20 6:45 下午 19 | */ 20 | public class TodayLoginIvCacheKeyBuilder implements CacheKeyBuilder { 21 | public static CacheKey build(LocalDate now) { 22 | return new TodayLoginIvCacheKeyBuilder().key(now.toString()); 23 | } 24 | 25 | @Override 26 | public String getPrefix() { 27 | return CacheKeyBuilderConstants.TODAY_LOGIN_IV; 28 | } 29 | 30 | @Override 31 | public Duration getExpire() { 32 | return Duration.ofDays(2L); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-domain/src/main/java/com/albedo/java/modules/sys/cache/TodayLoginPvCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.cache; 2 | 3 | 4 | import com.albedo.java.common.core.cache.model.CacheKey; 5 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 6 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 7 | 8 | import java.time.Duration; 9 | import java.time.LocalDate; 10 | 11 | /** 12 | * 参数 KEY 13 | * {tenant}:TODAY_LOGIN_PV -> long 14 | *

15 | * #sys_log_login 16 | * 17 | * @author somewhere 18 | * @date 2020/9/20 6:45 下午 19 | */ 20 | public class TodayLoginPvCacheKeyBuilder implements CacheKeyBuilder { 21 | public static CacheKey build(LocalDate now) { 22 | return new TodayLoginPvCacheKeyBuilder().key(now.toString()); 23 | } 24 | 25 | @Override 26 | public String getPrefix() { 27 | return CacheKeyBuilderConstants.TODAY_LOGIN_PV; 28 | } 29 | 30 | @Override 31 | public Duration getExpire() { 32 | return Duration.ofDays(2L); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-domain/src/main/java/com/albedo/java/modules/sys/cache/TodayPvCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.cache; 2 | 3 | 4 | import com.albedo.java.common.core.cache.model.CacheKey; 5 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 6 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 7 | 8 | import java.time.Duration; 9 | import java.time.LocalDate; 10 | 11 | /** 12 | * 参数 KEY 13 | * {tenant}:TODAY_PV:{now} -> long 14 | *

15 | * 16 | * @author somewhere 17 | * @date 2020/9/20 6:45 下午 18 | */ 19 | public class TodayPvCacheKeyBuilder implements CacheKeyBuilder { 20 | public static CacheKey build(LocalDate now) { 21 | return new TodayPvCacheKeyBuilder().key(now.toString()); 22 | } 23 | 24 | @Override 25 | public String getPrefix() { 26 | return CacheKeyBuilderConstants.TODAY_PV; 27 | } 28 | 29 | @Override 30 | public Duration getExpire() { 31 | return Duration.ofDays(2L); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-domain/src/main/java/com/albedo/java/modules/sys/cache/TokenUserIdCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.cache; 2 | 3 | 4 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 5 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 6 | 7 | /** 8 | * 参数 KEY 9 | *

10 | * #c_application 11 | * 12 | * @author somewhere 13 | * @date 2020/9/20 6:45 下午 14 | */ 15 | public class TokenUserIdCacheKeyBuilder implements CacheKeyBuilder { 16 | @Override 17 | public String getPrefix() { 18 | return CacheKeyBuilderConstants.TOKEN_USER_ID; 19 | } 20 | 21 | // @Override 22 | // public Duration getExpire() { 23 | // return Duration.ofMinutes(15); 24 | // } 25 | } 26 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-domain/src/main/java/com/albedo/java/modules/sys/cache/TotalLoginIvCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.cache; 2 | 3 | 4 | import com.albedo.java.common.core.cache.model.CacheKey; 5 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 6 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 7 | 8 | /** 9 | * 参数 KEY 10 | * {tenant}:TOTAL_LOGIN_IV -> long 11 | *

12 | * #sys_log_login 13 | * 14 | * @author somewhere 15 | * @date 2020/9/20 6:45 下午 16 | */ 17 | public class TotalLoginIvCacheKeyBuilder implements CacheKeyBuilder { 18 | public static CacheKey build() { 19 | return new TodayLoginIvCacheKeyBuilder().key(); 20 | } 21 | 22 | @Override 23 | public String getPrefix() { 24 | return CacheKeyBuilderConstants.TOTAL_LOGIN_IV; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-domain/src/main/java/com/albedo/java/modules/sys/cache/TotalLoginPvCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.cache; 2 | 3 | 4 | import com.albedo.java.common.core.cache.model.CacheKey; 5 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 6 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 7 | 8 | /** 9 | * 参数 KEY 10 | * {tenant}:TOTAL_LOGIN_PV -> long 11 | *

12 | * #sys_log_login 13 | * 14 | * @author somewhere 15 | * @date 2020/9/20 6:45 下午 16 | */ 17 | public class TotalLoginPvCacheKeyBuilder implements CacheKeyBuilder { 18 | public static CacheKey build() { 19 | return new TotalLoginPvCacheKeyBuilder().key(); 20 | } 21 | 22 | @Override 23 | public String getPrefix() { 24 | return CacheKeyBuilderConstants.TOTAL_LOGIN_PV; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-domain/src/main/java/com/albedo/java/modules/sys/cache/TotalPvCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.cache; 2 | 3 | 4 | import com.albedo.java.common.core.cache.model.CacheKey; 5 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 6 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 7 | 8 | /** 9 | * 参数 KEY 10 | * {tenant}:TOTAL_PV -> long 11 | * 12 | * @author somewhere 13 | * @date 2020/9/20 6:45 下午 14 | */ 15 | public class TotalPvCacheKeyBuilder implements CacheKeyBuilder { 16 | public static CacheKey build() { 17 | return new TotalPvCacheKeyBuilder().key(); 18 | } 19 | 20 | @Override 21 | public String getPrefix() { 22 | return CacheKeyBuilderConstants.TOTAL_PV; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-domain/src/main/java/com/albedo/java/modules/sys/cache/UserCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.cache; 2 | 3 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 4 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 5 | 6 | import java.time.Duration; 7 | 8 | /** 9 | * @author somewhere 10 | * @date 2021/10/21 11:25 上午 11 | */ 12 | public class UserCacheKeyBuilder implements CacheKeyBuilder { 13 | @Override 14 | public String getPrefix() { 15 | return CacheKeyBuilderConstants.USER; 16 | } 17 | 18 | @Override 19 | public Duration getExpire() { 20 | return Duration.ofHours(12); 21 | } 22 | } 23 | 24 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-domain/src/main/java/com/albedo/java/modules/sys/domain/vo/LoggerVo.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.domain.vo; 2 | 3 | import ch.qos.logback.classic.Logger; 4 | import com.fasterxml.jackson.annotation.JsonCreator; 5 | 6 | public class LoggerVo { 7 | private String name; 8 | 9 | private String level; 10 | 11 | public LoggerVo(Logger logger) { 12 | this.name = logger.getName(); 13 | this.level = logger.getEffectiveLevel().toString(); 14 | } 15 | 16 | @JsonCreator 17 | public LoggerVo() { 18 | } 19 | 20 | public String getName() { 21 | return name; 22 | } 23 | 24 | public void setName(String name) { 25 | this.name = name; 26 | } 27 | 28 | public String getLevel() { 29 | return level; 30 | } 31 | 32 | public void setLevel(String level) { 33 | this.level = level; 34 | } 35 | 36 | @Override 37 | public String toString() { 38 | return "LoggerVM{" + "name='" + name + '\'' + ", level='" + level + '\'' + '}'; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-domain/src/main/java/com/albedo/java/modules/sys/domain/vo/account/AvatarInfo.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.sys.domain.vo.account; 2 | 3 | import lombok.Data; 4 | 5 | import javax.validation.constraints.NotBlank; 6 | import java.io.Serializable; 7 | 8 | /** 9 | * @author somewhere 10 | */ 11 | @Data 12 | public class AvatarInfo implements Serializable { 13 | 14 | @NotBlank 15 | private String avatar; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /albedo-modules/albedo-sys/albedo-sys-web/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | albedo-sys 7 | com.albedo.java 8 | 3.3.18-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | albedo-sys-web 13 | 14 | 15 | 16 | 17 | com.albedo.java 18 | albedo-sys-biz 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /albedo-modules/albedo-tenant/src/main/java/com/albedo/java/modules/tenant/cache/TenantCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.tenant; 2 | 3 | 4 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 5 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 6 | import com.albedo.java.common.core.util.StrPool; 7 | 8 | import java.time.Duration; 9 | 10 | /** 11 | * 系统用户 KEY 12 | *

13 | * #d_tenant 14 | * 15 | * @author somewhere 16 | * @date 2020/9/20 6:45 下午 17 | */ 18 | public class TenantCacheKeyBuilder implements CacheKeyBuilder { 19 | @Override 20 | public String getTenant() { 21 | return StrPool.EMPTY; 22 | } 23 | 24 | @Override 25 | public String getPrefix() { 26 | return CacheKeyBuilderConstants.TENANT; 27 | } 28 | 29 | @Override 30 | public Duration getExpire() { 31 | return Duration.ofHours(24); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /albedo-modules/albedo-tenant/src/main/java/com/albedo/java/modules/tenant/cache/TenantCodeCacheKeyBuilder.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.tenant; 2 | 3 | import com.albedo.java.common.core.cache.model.CacheKeyBuilder; 4 | import com.albedo.java.common.core.constant.CacheKeyBuilderConstants; 5 | import com.albedo.java.common.core.util.StrPool; 6 | 7 | import java.time.Duration; 8 | 9 | /** 10 | * 系统用户 KEY 11 | *

12 | * #c_tenant 13 | * 14 | * @author somewhere 15 | * @date 2020/9/20 6:45 下午 16 | */ 17 | public class TenantCodeCacheKeyBuilder implements CacheKeyBuilder { 18 | @Override 19 | public String getTenant() { 20 | return StrPool.EMPTY; 21 | } 22 | 23 | @Override 24 | public String getPrefix() { 25 | return CacheKeyBuilderConstants.TENANT_CODE; 26 | } 27 | 28 | @Override 29 | public Duration getExpire() { 30 | return Duration.ofHours(24); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /albedo-modules/albedo-tenant/src/main/java/com/albedo/java/modules/tenant/repository/InitDbRepository.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.tenant.repository; 2 | 3 | import com.baomidou.mybatisplus.annotation.InterceptorIgnore; 4 | import org.apache.ibatis.annotations.Mapper; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | /** 8 | * 初始化数据库DAO 9 | * 10 | * @author somewhere 11 | * @date 2019/09/02 12 | */ 13 | @Mapper 14 | @InterceptorIgnore(tenantLine = "true", dynamicTableName = "true") 15 | public interface InitDbRepository { 16 | /** 17 | * 创建数据库 18 | * 19 | * @param database 数据库 20 | * @return 创建数量 21 | */ 22 | int createDatabase(@Param("database") String database); 23 | 24 | 25 | /** 26 | * 删除数据库 27 | * 28 | * @param database 数据库 29 | * @return 删除数量 30 | */ 31 | int dropDatabase(@Param("database") String database); 32 | 33 | } 34 | -------------------------------------------------------------------------------- /albedo-modules/albedo-tenant/src/main/java/com/albedo/java/modules/tenant/repository/TenantRepository.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.tenant.repository; 2 | 3 | import com.albedo.java.modules.tenant.domain.Tenant; 4 | import com.albedo.java.plugins.database.mybatis.repository.BaseRepository; 5 | import com.baomidou.mybatisplus.annotation.InterceptorIgnore; 6 | import org.apache.ibatis.annotations.Mapper; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | /** 10 | *

11 | * Mapper 接口 12 | * 企业 13 | *

14 | * 15 | * @author somewhere 16 | * @date 2019-10-25 17 | */ 18 | @Mapper 19 | @InterceptorIgnore(tenantLine = "true", dynamicTableName = "true") 20 | public interface TenantRepository extends BaseRepository { 21 | 22 | /** 23 | * 根据租户编码查询 24 | * 25 | * @param code 租户编码 26 | * @return 租户 27 | */ 28 | Tenant getByCode(@Param("code") String code); 29 | } 30 | -------------------------------------------------------------------------------- /albedo-modules/albedo-tenant/src/main/java/com/albedo/java/modules/tenant/strategy/InitSystemStrategy.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.tenant.strategy; 2 | 3 | import com.albedo.java.modules.tenant.domain.dto.TenantConnectDto; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 初始化系统 9 | *

10 | * 11 | * @author somewhere 12 | * @date 2019/10/25 13 | */ 14 | public interface InitSystemStrategy { 15 | 16 | /** 17 | * 初始化 服务链接 18 | * 19 | * @param tenantConnect 链接信息 20 | * @return 是否成功 21 | */ 22 | boolean initConnect(TenantConnectDto tenantConnect); 23 | 24 | /** 25 | * 重置系统 26 | * 27 | * @param tenant 租户编码 28 | * @return 是否成功 29 | */ 30 | boolean reset(String tenant); 31 | 32 | /** 33 | * 删除租户数据 34 | * 35 | * @param ids 租户id 36 | * @param tenantCodeList 租户编码 37 | * @return 是否成功 38 | */ 39 | boolean delete(List ids, List tenantCodeList); 40 | } 41 | -------------------------------------------------------------------------------- /albedo-modules/albedo-tenant/src/main/java/com/albedo/java/modules/tenant/utils/DriverEnum.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.tenant.utils; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | 5 | /** 6 | * @author somewhere 7 | */ 8 | @Slf4j 9 | public enum DriverEnum { 10 | 11 | /** 12 | * mysql 13 | */ 14 | MYSQL("com.mysql.cj.jdbc.Driver"), 15 | 16 | /** 17 | * oracle 18 | */ 19 | ORACLE("oracle.jdbc.driver.OracleDriver"), 20 | 21 | /** 22 | * sql server 23 | */ 24 | SQLSERVER("com.microsoft.sqlserver.jdbc.SQLServerDriver"), 25 | ; 26 | 27 | /** 28 | * 驱动 29 | */ 30 | private final String driver; 31 | 32 | DriverEnum(String driver) { 33 | this.driver = driver; 34 | } 35 | 36 | public String getDriver() { 37 | return driver; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /albedo-modules/albedo-tenant/src/main/resources/mapper/tenant/InitDbMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CREATE 7 | DATABASE IF NOT EXISTS 8 | ${database} 9 | DEFAULT 10 | CHARACTER 11 | SET 12 | utf8mb4 13 | COLLATE 14 | utf8mb4_general_ci 15 | 16 | 17 | 18 | 19 | DROP 20 | DATABASE IF EXISTS 21 | ${database} 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /albedo-modules/albedo-tenant/src/main/resources/mapper/tenant/TenantMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-biz-ip/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | albedo-plugin 8 | com.albedo.java 9 | 3.3.18-SNAPSHOT 10 | 11 | 12 | albedo-plugin-biz-ip 13 | 14 | 15 | 16 | cn.hutool 17 | hutool-all 18 | 19 | 20 | com.albedo.java 21 | albedo-common-core 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-biz-ip/src/main/java/com/albedo/java/plugins/ip/Area.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.plugins.ip; 2 | 3 | import com.albedo.java.plugins.ip.enums.AreaTypeEnum; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.NoArgsConstructor; 7 | 8 | import java.util.List; 9 | 10 | @Data 11 | @AllArgsConstructor 12 | @NoArgsConstructor 13 | public class Area { 14 | 15 | /** 16 | * 编号 - 全球,即根目录 17 | */ 18 | public static final Integer ID_GLOBAL = 0; 19 | /** 20 | * 编号 - 中国 21 | */ 22 | public static final Integer ID_CHINA = 1; 23 | 24 | /** 25 | * 编号 26 | */ 27 | private Integer id; 28 | /** 29 | * 名字 30 | */ 31 | private String name; 32 | /** 33 | * 类型 34 | *

35 | * 枚举 {@link AreaTypeEnum} 36 | */ 37 | private Integer type; 38 | 39 | /** 40 | * 父节点 41 | */ 42 | private Area parent; 43 | /** 44 | * 子节点 45 | */ 46 | private List children; 47 | 48 | } 49 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-biz-ip/src/main/java/com/albedo/java/plugins/ip/enums/AreaTypeEnum.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.plugins.ip.enums; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | import java.util.Arrays; 7 | 8 | /** 9 | * 区域类型枚举 10 | * 11 | * @author somewhere 12 | */ 13 | @AllArgsConstructor 14 | @Getter 15 | public enum AreaTypeEnum { 16 | 17 | COUNTRY(1, "国家"), 18 | PROVINCE(2, "省份"), 19 | CITY(3, "城市"), 20 | DISTRICT(4, "地区"), // 县、镇、区等 21 | ; 22 | 23 | public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(AreaTypeEnum::getType).toArray(); 24 | 25 | /** 26 | * 类型 27 | */ 28 | private final Integer type; 29 | /** 30 | * 名字 31 | */ 32 | private final String name; 33 | 34 | public int[] array() { 35 | return ARRAYS; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-biz-ip/src/main/resources/ip2region.xdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-plugin/albedo-plugin-biz-ip/src/main/resources/ip2region.xdb -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-biz-ip/src/test/java/AreaUtilTest.java: -------------------------------------------------------------------------------- 1 | import com.albedo.java.plugins.ip.Area; 2 | import com.albedo.java.plugins.ip.enums.AreaTypeEnum; 3 | import com.albedo.java.plugins.ip.util.AreaUtil; 4 | import org.junit.jupiter.api.Test; 5 | 6 | import static org.junit.jupiter.api.Assertions.assertEquals; 7 | 8 | /** 9 | * {@link AreaUtil} 的单元测试 10 | * 11 | * @author somewhere 12 | */ 13 | public class AreaUtilTest { 14 | 15 | @Test 16 | public void testGetArea() { 17 | // 调用:北京 18 | Area area = AreaUtil.getArea(110100); 19 | // 断言 20 | assertEquals(area.getId(), 110100); 21 | assertEquals(area.getName(), "北京市"); 22 | assertEquals(area.getType(), AreaTypeEnum.CITY.getType()); 23 | assertEquals(area.getParent().getId(), 110000); 24 | assertEquals(area.getChildren().size(), 16); 25 | } 26 | 27 | @Test 28 | public void testFormat() { 29 | assertEquals(AreaUtil.format(110105), "北京 北京市 朝阳区"); 30 | assertEquals(AreaUtil.format(1), "中国"); 31 | assertEquals(AreaUtil.format(2), "蒙古"); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-cache-starter/src/main/java/com/albedo/java/plugins/cache/lock/CaffeineDistributedLock.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.plugins.cache.lock; 2 | 3 | 4 | import com.albedo.java.common.core.lock.DistributedLock; 5 | 6 | /** 7 | * 分布式锁 只能用redis实现 8 | * 写这个类的目的,只是为了防止代码启动报错 9 | * 10 | * @author somewhere 11 | * @date 2019/08/07 12 | */ 13 | public class CaffeineDistributedLock implements DistributedLock { 14 | @Override 15 | public boolean lock(String key, long expire, int retryTimes, long sleepMillis) { 16 | return true; 17 | } 18 | 19 | @Override 20 | public boolean releaseLock(String key) { 21 | return true; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-cache-starter/src/main/java/com/albedo/java/plugins/cache/properties/CacheType.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.plugins.cache.properties; 2 | 3 | /** 4 | * 缓存类型 5 | * 6 | * @author somewhere 7 | * @date 2020/9/22 3:34 下午 8 | */ 9 | public enum CacheType { 10 | /** 11 | * 内存 12 | */ 13 | CAFFEINE, 14 | /** 15 | * redis 16 | */ 17 | REDIS, 18 | ; 19 | 20 | public boolean eq(CacheType cacheType) { 21 | return cacheType != null && this.name().equals(cacheType.name()); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-cache-starter/src/main/java/com/albedo/java/plugins/cache/properties/SerializerType.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.plugins.cache.properties; 2 | 3 | /** 4 | * 序列化类型 5 | * 6 | * @author somewhere 7 | * @date 2021年04月19日08:25:13 8 | */ 9 | public enum SerializerType { 10 | /** 11 | * json 序列化 12 | */ 13 | JACK_SON, 14 | /** 15 | * 默认:ProtoStuff 序列化 16 | */ 17 | ProtoStuff, 18 | /** 19 | * jdk 序列化 20 | */ 21 | JDK 22 | } 23 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-cache-starter/src/main/java/com/albedo/java/plugins/cache/redis/NullVal.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.plugins.cache.redis; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * 空值 7 | * 解决缓存穿透 8 | * 9 | * @author somewhere 10 | * @date 2020/9/17 2:30 下午 11 | */ 12 | public class NullVal implements Serializable { 13 | private static final long serialVersionUID = 1L; 14 | } 15 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-cache-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | com.albedo.java.plugins.cache.CacheAutoConfigure 3 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-cache-starter/src/main/resources/limit.lua: -------------------------------------------------------------------------------- 1 | --lua 下标从 1 开始 2 | -- 限流 key 3 | local key = KEYS[1] 4 | -- 限流大小 5 | local limit = tonumber(ARGV[1]) 6 | 7 | -- 获取当前流量大小 8 | local curentLimit = tonumber(redis.call('get', key) or "0") 9 | 10 | if curentLimit + 1 > limit then 11 | -- 达到限流大小 返回 12 | return 0; 13 | else 14 | -- 没有达到阈值 value + 1 15 | redis.call("INCRBY", key, 1) 16 | redis.call("EXPIRE", key, 2) 17 | return curentLimit + 1 18 | end 19 | 20 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-database/src/main/java/com/albedo/java/plugins/database/handler/MultiTenantLineHandler.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.plugins.database.handler; 2 | 3 | import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler; 4 | import net.sf.jsqlparser.expression.ValueListExpression; 5 | 6 | /** 7 | * @author somewhere 8 | * @version v1.0 9 | * @date 2021/5/17 8:52 下午 10 | * @create [2021/5/17 8:52 下午 ] [somewhere] [初始创建] 11 | */ 12 | public interface MultiTenantLineHandler extends TenantLineHandler { 13 | /** 14 | * 获取租户 ID 值表达式,支持多个 ID 值 15 | *

16 | * 17 | * @return 租户 ID 值表达式 18 | */ 19 | ValueListExpression getTenantIdList(); 20 | } 21 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-database/src/main/java/com/albedo/java/plugins/database/injector/method/UpdateAllById.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.plugins.database.injector.method; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; 4 | import com.baomidou.mybatisplus.extension.injector.methods.AlwaysUpdateSomeColumnById; 5 | import lombok.NoArgsConstructor; 6 | 7 | import java.util.function.Predicate; 8 | 9 | /** 10 | * 修改所有的字段 11 | * 12 | * @author somewhere 13 | * @date 2020年05月08日16:05:19 14 | */ 15 | @NoArgsConstructor 16 | public class UpdateAllById extends AlwaysUpdateSomeColumnById { 17 | 18 | public UpdateAllById(Predicate predicate) { 19 | super("updateAllById", predicate); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-database/src/main/java/com/albedo/java/plugins/database/mybatis/conditions/Wraps.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.plugins.database.mybatis.conditions; 2 | 3 | 4 | import com.albedo.java.plugins.database.mybatis.query.LambdaQueryWrapperX; 5 | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 6 | 7 | 8 | /** 9 | * Wrappers 工具类, 该方法的主要目的是为了 缩短代码长度 10 | * 11 | * @author somewhere 12 | * @date 2019/06/14 13 | */ 14 | public final class Wraps { 15 | 16 | private Wraps() { 17 | // ignore 18 | } 19 | 20 | /** 21 | * 获取 QueryWrap<T> 22 | * 23 | * @param 实体类泛型 24 | * @return QueryWrapper<T> 25 | */ 26 | public static LambdaQueryWrapperX lambdaQueryWrapperX() { 27 | return new LambdaQueryWrapperX<>(); 28 | } 29 | 30 | 31 | /** 32 | * 获取 QueryWrap<T> 33 | * 34 | * @param 实体类泛型 35 | * @return QueryWrapper<T> 36 | */ 37 | public static LambdaUpdateWrapper lambdaUpdateWrapper() { 38 | return new LambdaUpdateWrapper<>(); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-database/src/main/java/com/albedo/java/plugins/database/mybatis/enums/SqlConstants.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.plugins.database.mybatis.enums; 2 | 3 | import com.baomidou.mybatisplus.annotation.DbType; 4 | 5 | /** 6 | * SQL相关常量类 7 | * 8 | * @author somewhere 9 | */ 10 | public class SqlConstants { 11 | 12 | /** 13 | * 数据库的类型 14 | */ 15 | public static DbType DB_TYPE; 16 | 17 | public static void init(DbType dbType) { 18 | DB_TYPE = dbType; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-database/src/main/java/com/albedo/java/plugins/database/mybatis/typehandler/FullLikeTypeHandler.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.plugins.database.mybatis.typehandler; 2 | 3 | import com.baomidou.mybatisplus.core.enums.SqlLike; 4 | import org.apache.ibatis.type.Alias; 5 | 6 | /** 7 | * 仅仅用于like查询 8 | * 9 | * @author somewhere 10 | */ 11 | @Alias("fullLike") 12 | public class FullLikeTypeHandler extends BaseLikeTypeHandler { 13 | public FullLikeTypeHandler() { 14 | super(SqlLike.DEFAULT); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-database/src/main/java/com/albedo/java/plugins/database/mybatis/typehandler/LeftLikeTypeHandler.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.plugins.database.mybatis.typehandler; 2 | 3 | 4 | import com.baomidou.mybatisplus.core.enums.SqlLike; 5 | import org.apache.ibatis.type.Alias; 6 | 7 | /** 8 | * 仅仅用于like查询 9 | * 10 | * @author somewhere 11 | */ 12 | @Alias("leftLike") 13 | public class LeftLikeTypeHandler extends BaseLikeTypeHandler { 14 | public LeftLikeTypeHandler() { 15 | super(SqlLike.LEFT); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-database/src/main/java/com/albedo/java/plugins/database/mybatis/typehandler/RightLikeTypeHandler.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.plugins.database.mybatis.typehandler; 2 | 3 | 4 | import com.baomidou.mybatisplus.core.enums.SqlLike; 5 | import org.apache.ibatis.type.Alias; 6 | 7 | /** 8 | * 仅仅用于like查询 9 | * 10 | * @author somewhere 11 | */ 12 | @Alias("rightLike") 13 | public class RightLikeTypeHandler extends BaseLikeTypeHandler { 14 | public RightLikeTypeHandler() { 15 | super(SqlLike.RIGHT); 16 | } 17 | } 18 | 19 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-database/src/main/java/com/albedo/java/plugins/database/p6spy/TenantP6SpyLogger.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.plugins.database.p6spy; 2 | 3 | import cn.hutool.core.util.StrUtil; 4 | import com.albedo.java.common.core.context.ContextUtil; 5 | import com.baomidou.mybatisplus.core.toolkit.StringPool; 6 | import com.baomidou.mybatisplus.core.toolkit.StringUtils; 7 | import com.p6spy.engine.spy.appender.MessageFormattingStrategy; 8 | 9 | /** 10 | * 用于 p6spy 在输出的sql日志中,打印当前租户、当前用户ID、当前数据源连接url 11 | * 12 | * @author somewhere 13 | * @date 2020/9/3 3:39 下午 14 | */ 15 | public class TenantP6SpyLogger implements MessageFormattingStrategy { 16 | public static final String REGX = "[\\s]+"; 17 | 18 | @Override 19 | public String formatMessage(int connectionId, String now, long elapsed, String category, 20 | String prepared, String sql, String url) { 21 | return StringUtils.isNotBlank(sql) ? 22 | StrUtil.format(" tenant: {} userId: {} \n Consume Time:{} ms {} \n url: {} \n Execute SQL:{} \n", 23 | ContextUtil.getTenant(), ContextUtil.getUserId(), elapsed, now, url, sql.replaceAll(REGX, StringPool.SPACE)) : 24 | StringPool.EMPTY; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-database/src/main/java/com/albedo/java/plugins/database/properties/IdType.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.plugins.database.properties; 2 | 3 | /** 4 | * @author somewhere 5 | * @date 2020/9/15 3:44 下午 6 | */ 7 | public enum IdType { 8 | /** 9 | * 单机部署 或者 有固定部署集群数量时,使用hu tool的 10 | */ 11 | HU_TOOL, 12 | /** 13 | * 集群部署动态扩容时使用 14 | *

15 | * UidGenerator通过借用未来时间来解决sequence天然存在的并发限制 16 | */ 17 | DEFAULT, 18 | /** 19 | * 集群部署动态扩容时使用 20 | * 采用RingBuffer来缓存已生成的UID, 并行化UID的生产和消费, 同时对CacheLine补齐,避免了由RingBuffer带来的硬件级「伪共享」问题 21 | *

22 | * 600万/s的稳定吞吐量 23 | */ 24 | CACHE, 25 | ; 26 | 27 | public boolean eq(IdType t) { 28 | return t != null && this.name().equals(t.name()); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-dynamic-datasource/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | albedo-plugin 7 | com.albedo.java 8 | 3.3.18-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | albedo-plugin-dynamic-datasource 13 | 14 | 15 | 16 | 17 | 18 | com.baomidou 19 | dynamic-datasource-spring-boot-starter 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-swagger/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-swagger/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration= 2 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-uid/src/main/java/com/baidu/fsg/uid/utils/ValuedEnum.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 Baidu, Inc. All Rights Reserve. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.baidu.fsg.uid.utils; 17 | 18 | /** 19 | * {@code ValuedEnum} defines an enumeration which is bounded to a value, you 20 | * may implements this interface when you defines such kind of enumeration 21 | * 22 | * @author yutianbao 23 | */ 24 | public interface ValuedEnum { 25 | /** 26 | * 值 27 | * 28 | * @return 29 | */ 30 | T value(); 31 | } 32 | -------------------------------------------------------------------------------- /albedo-plugin/albedo-plugin-uid/src/main/java/com/baidu/fsg/uid/worker/WorkerIdAssigner.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2017 Baidu, Inc. All Rights Reserve. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package com.baidu.fsg.uid.worker; 17 | 18 | /** 19 | * Represents a worker id assigner for {@link com.baidu.fsg.uid.impl.DefaultUidGenerator} 20 | * 21 | * @author yutianbao 22 | */ 23 | public interface WorkerIdAssigner { 24 | 25 | /** 26 | * Assign worker id for {@link com.baidu.fsg.uid.impl.DefaultUidGenerator} 27 | * 28 | * @return assigned worker id 29 | */ 30 | long assignWorkerId(); 31 | 32 | } 33 | -------------------------------------------------------------------------------- /albedo-plugin/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | albedo 7 | com.albedo.java 8 | 3.3.18-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | albedo-plugin 13 | 14 | pom 15 | 16 | 17 | 18 | albedo-plugin-cache-starter 19 | albedo-plugin-database 20 | albedo-plugin-dynamic-datasource 21 | albedo-plugin-swagger 22 | albedo-plugin-uid 23 | albedo-plugin-biz-ip 24 | 25 | 26 | -------------------------------------------------------------------------------- /albedo-servers/albedo-admin-server/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:8 as builder 2 | WORKDIR /build 3 | ARG JAR_FILE=target/albedo-admin.jar 4 | COPY ${JAR_FILE} app.jar 5 | RUN java -Djarmode=layertools -jar app.jar extract && rm app.jar 6 | 7 | FROM openjdk:8 8 | LABEL maintainer="somewhere0813@gmail.com" 9 | ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=fileDo:/dev/./urandom" 10 | WORKDIR albedo-admin 11 | 12 | COPY --from=builder /build/dependencies/ ./ 13 | COPY --from=builder /build/snapshot-dependencies/ ./ 14 | COPY --from=builder /build/spring-boot-loader/ ./ 15 | COPY --from=builder /build/application/ ./ 16 | 17 | EXPOSE 4000 18 | 19 | CMD sleep 10; java $JAVA_OPTS org.springframework.boot.loader.JarLauncher 20 | -------------------------------------------------------------------------------- /albedo-servers/albedo-admin-server/src/main/resources/templates/codet/curd/viewService.xml: -------------------------------------------------------------------------------- 1 | 2 | 47 | -------------------------------------------------------------------------------- /albedo-servers/albedo-admin-server/src/test/java/com/albedo/java/modules/base/BaseRedisIntegrationTest.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.base; 2 | 3 | import com.albedo.java.plugins.cache.RedisAutoConfigure; 4 | import org.redisson.spring.starter.RedissonAutoConfiguration; 5 | import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; 6 | import org.springframework.boot.test.context.SpringBootTest; 7 | import org.springframework.context.annotation.Import; 8 | import org.springframework.test.context.ActiveProfiles; 9 | 10 | @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseRedisIntegrationTest.Application.class) 11 | @ActiveProfiles("integration-test") // 设置使用 application-integration-test 配置文件 12 | public class BaseRedisIntegrationTest { 13 | 14 | @Import({ 15 | // Redis 配置类 16 | RedisAutoConfiguration.class, // Spring Redis 自动配置类 17 | RedisAutoConfigure.class, // 自己的 Redis 配置类 18 | RedissonAutoConfiguration.class, // Redisson 自动高配置类 19 | }) 20 | public static class Application { 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /albedo-servers/albedo-admin-server/src/test/java/com/albedo/java/modules/base/SimulationRuntimeIntegrationTest.java: -------------------------------------------------------------------------------- 1 | package com.albedo.java.modules.base; 2 | 3 | import com.albedo.java.common.core.constant.CommonConstants; 4 | import com.albedo.java.common.core.context.ContextUtil; 5 | import com.albedo.java.modules.AlbedoAdminApplication; 6 | import lombok.extern.slf4j.Slf4j; 7 | import org.junit.jupiter.api.BeforeEach; 8 | import org.springframework.boot.test.context.SpringBootTest; 9 | import org.springframework.security.test.context.support.TestExecutionEvent; 10 | import org.springframework.security.test.context.support.WithUserDetails; 11 | 12 | @Slf4j 13 | @WithUserDetails(userDetailsServiceBeanName = "userDetailsServiceImpl", value = "admin", setupBefore = TestExecutionEvent.TEST_EXECUTION) 14 | @SpringBootTest(classes = AlbedoAdminApplication.class) 15 | public class SimulationRuntimeIntegrationTest { 16 | @BeforeEach 17 | public void initBeforeTest() { 18 | ContextUtil.setTenant(CommonConstants.TENANT_CODE_ADMIN); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /albedo-servers/albedo-app-server/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:8 as builder 2 | WORKDIR /build 3 | ARG JAR_FILE=target/albedo-app.jar 4 | COPY ${JAR_FILE} app.jar 5 | RUN java -Djarmode=layertools -jar app.jar extract && rm app.jar 6 | 7 | FROM openjdk:8 8 | LABEL maintainer="somewhere0813@gmail.com" 9 | ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=fileDo:/dev/./urandom" 10 | WORKDIR albedo-api 11 | 12 | COPY --from=builder /build/dependencies/ ./ 13 | COPY --from=builder /build/snapshot-dependencies/ ./ 14 | COPY --from=builder /build/spring-boot-loader/ ./ 15 | COPY --from=builder /build/application/ ./ 16 | 17 | EXPOSE 4001 18 | 19 | CMD sleep 5; java $JAVA_OPTS org.springframework.boot.loader.JarLauncher 20 | -------------------------------------------------------------------------------- /albedo-servers/albedo-app-server/src/main/resources/config/application-swagger.yml: -------------------------------------------------------------------------------- 1 | # =================================================================== 2 | # Albedo specific properties 3 | # =================================================================== 4 | 5 | application: 6 | swagger: 7 | default-include-pattern: ${application.adminPath}/.* 8 | title: ${spring.application.name} API 9 | description: ${spring.application.name} API documentation 10 | version: 0.0.1 11 | termsOfServiceUrl: 12 | contactName: 13 | contactUrl: 14 | contactEmail: 15 | license: 16 | licenseUrl: 17 | oauthServer: /auth/oauth/token 18 | -------------------------------------------------------------------------------- /albedo-servers/albedo-quartz-server/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:8 as builder 2 | WORKDIR /build 3 | ARG JAR_FILE=target/albedo-quartz.jar 4 | COPY ${JAR_FILE} app.jar 5 | RUN java -Djarmode=layertools -jar app.jar extract && rm app.jar 6 | 7 | FROM openjdk:8 8 | LABEL maintainer="somewhere0813@gmail.com" 9 | ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=fileDo:/dev/./urandom" 10 | WORKDIR albedo-quartz 11 | 12 | COPY --from=builder /build/dependencies/ ./ 13 | COPY --from=builder /build/snapshot-dependencies/ ./ 14 | COPY --from=builder /build/spring-boot-loader/ ./ 15 | COPY --from=builder /build/application/ ./ 16 | 17 | EXPOSE 4002 18 | 19 | CMD sleep 5; java $JAVA_OPTS org.springframework.boot.loader.JarLauncher 20 | -------------------------------------------------------------------------------- /albedo-servers/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | albedo 7 | com.albedo.java 8 | 3.3.18-SNAPSHOT 9 | 10 | 4.0.0 11 | 12 | pom 13 | albedo-servers 14 | 15 | 16 | albedo-admin-server 17 | albedo-quartz-server 18 | albedo-app-server 19 | 20 | 21 | -------------------------------------------------------------------------------- /albedo-ui/.editorconfig: -------------------------------------------------------------------------------- 1 | # https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | end_of_line = lf 9 | insert_final_newline = true 10 | trim_trailing_whitespace = true 11 | 12 | [*.md] 13 | insert_final_newline = false 14 | trim_trailing_whitespace = false 15 | -------------------------------------------------------------------------------- /albedo-ui/.env.development: -------------------------------------------------------------------------------- 1 | ENV = 'development' 2 | 3 | # 接口地址 4 | VUE_APP_BASE_URL = 'http://127.0.0.1:8061' 5 | VUE_APP_WS_URL = 'ws://127.0.0.1:8061' 6 | 7 | VUE_APP_BASE_API = '/a' 8 | 9 | # 是否启用 babel-plugin-dynamic-import-node插件 10 | VUE_CLI_BABEL_TRANSPILE_MODULES = true 11 | -------------------------------------------------------------------------------- /albedo-ui/.env.production: -------------------------------------------------------------------------------- 1 | ENV = 'production' 2 | 3 | 4 | VUE_APP_BASE_API = '/a' 5 | 6 | # 接口地址,注意协议,如果你没有配置 ssl,需要将 https 改为 http 7 | VUE_APP_BASE_URL = '' 8 | # 如果接口是 http 形式, wss 需要改为 ws 9 | VUE_APP_WS_URL = '' 10 | -------------------------------------------------------------------------------- /albedo-ui/.eslintignore: -------------------------------------------------------------------------------- 1 | build/*.js 2 | src/assets 3 | public 4 | dist 5 | -------------------------------------------------------------------------------- /albedo-ui/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | **/*.log 8 | 9 | tests/**/coverage/ 10 | tests/e2e/reports 11 | selenium-debug.log 12 | 13 | # Editor directories and files 14 | .idea 15 | .vscode 16 | *.suo 17 | *.ntvs* 18 | *.njsproj 19 | *.sln 20 | *.local 21 | 22 | package-lock.json 23 | yarn.lock 24 | -------------------------------------------------------------------------------- /albedo-ui/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 10 3 | script: npm run test 4 | notifications: 5 | email: false 6 | -------------------------------------------------------------------------------- /albedo-ui/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM nginx 3 | 4 | COPY ./dist /data 5 | 6 | RUN rm /etc/nginx/conf.d/default.conf 7 | 8 | ADD ./nginx.conf /etc/nginx/conf.d/ 9 | 10 | RUN /bin/bash -c 'echo init ok' 11 | 12 | 13 | EXPOSE 80 14 | -------------------------------------------------------------------------------- /albedo-ui/babel.config.js: -------------------------------------------------------------------------------- 1 | const plugins = ['@vue/babel-plugin-transform-vue-jsx'] 2 | // 生产环境移除console 3 | if (process.env.NODE_ENV === 'production') { 4 | plugins.push('transform-remove-console') 5 | } 6 | module.exports = { 7 | plugins: plugins, 8 | presets: [ 9 | '@vue/app' 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /albedo-ui/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | moduleFileExtensions: ['js', 'jsx', 'json', 'vue'], 3 | transform: { 4 | '^.+\\.vue$': 'vue-jest', 5 | '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 6 | 'jest-transform-stub', 7 | '^.+\\.jsx?$': 'babel-jest' 8 | }, 9 | moduleNameMapper: { 10 | '^@/(.*)$': '/src/$1' 11 | }, 12 | snapshotSerializers: ['jest-serializer-vue'], 13 | testMatch: [ 14 | '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)' 15 | ], 16 | collectCoverageFrom: ['src/utils/**/*.{js,vue}', '!src/utils/auth.js', '!src/utils/request.js', 'src/components/**/*.{js,vue}'], 17 | coverageDirectory: '/tests/unit/coverage', 18 | // 'collectCoverage': true, 19 | 'coverageReporters': [ 20 | 'lcov', 21 | 'text-summary' 22 | ], 23 | testURL: 'http://localhost/' 24 | } 25 | -------------------------------------------------------------------------------- /albedo-ui/nginx.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name localhost; 4 | 5 | root /data/; 6 | 7 | location ~* ^/(a) { 8 | proxy_pass http://albedo-admin:4000; 9 | #proxy_set_header Host $http_host; 10 | proxy_connect_timeout 15s; 11 | proxy_send_timeout 15s; 12 | proxy_read_timeout 15s; 13 | proxy_set_header X-Real-IP $remote_addr; 14 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /albedo-ui/plopfile.js: -------------------------------------------------------------------------------- 1 | const viewGenerator = require('./plop-templates/view/prompt') 2 | const componentGenerator = require('./plop-templates/component/prompt') 3 | 4 | module.exports = function(plop) { 5 | plop.setGenerator('view', viewGenerator) 6 | plop.setGenerator('component', componentGenerator) 7 | } 8 | -------------------------------------------------------------------------------- /albedo-ui/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | autoprefixer: {} 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /albedo-ui/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/public/favicon.ico -------------------------------------------------------------------------------- /albedo-ui/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | <%= webpackConfig.name %> 10 | 11 | 12 |

13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /albedo-ui/src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /albedo-ui/src/api/account.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | import { encrypt } from '@/utils/rsa-encrypt' 3 | 4 | const accountService = { 5 | updatePass(user) { 6 | const data = { 7 | oldPassword: encrypt(user.oldPassword), 8 | newPassword: encrypt(user.newPassword), 9 | confirmPassword: encrypt(user.confirmPassword) 10 | } 11 | return request({ 12 | url: '/account/change-password', 13 | method: 'post', 14 | data 15 | }) 16 | }, 17 | resetEmailSend(data) { 18 | return request({ 19 | url: '/reset/email-send?email=' + data, 20 | method: 'post' 21 | }) 22 | }, 23 | 24 | updateEmail(form) { 25 | const data = { 26 | password: encrypt(form.pass), 27 | email: form.email 28 | } 29 | return request({ 30 | url: '/account/change-email/' + form.code, 31 | method: 'post', 32 | data 33 | }) 34 | }, 35 | updateAvatar(avatar) { 36 | return request({ 37 | url: '/account/change-avatar', 38 | method: 'post', 39 | data: { avatar: avatar } 40 | }) 41 | } 42 | } 43 | 44 | export default accountService 45 | -------------------------------------------------------------------------------- /albedo-ui/src/api/dashboard.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | 3 | const apiList = { 4 | getChart: `/dashboard/chart`, 5 | getItem: `/dashboard/item` 6 | } 7 | 8 | export default { 9 | getChart(data) { 10 | return request({ 11 | method: 'GET', 12 | url: apiList.getChart, 13 | data 14 | }) 15 | }, 16 | getItem(data) { 17 | return request({ 18 | method: 'GET', 19 | url: apiList.getItem, 20 | data 21 | }) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /albedo-ui/src/api/data.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request' 2 | import qs from 'qs' 3 | 4 | export function initData(url, params) { 5 | return request({ 6 | url: url + '?' + qs.stringify(params, { indices: false }), 7 | method: 'get' 8 | }) 9 | } 10 | 11 | export function download(url, params) { 12 | return request({ 13 | url: url + '?' + qs.stringify(params, { indices: false }), 14 | method: 'get', 15 | responseType: 'blob' 16 | }) 17 | } 18 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/401_images/401.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/401_images/401.gif -------------------------------------------------------------------------------- /albedo-ui/src/assets/404_images/404.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/404_images/404.png -------------------------------------------------------------------------------- /albedo-ui/src/assets/404_images/404_cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/404_images/404_cloud.png -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/17e420c250804efe904a09a33796d5a10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/17e420c250804efe904a09a33796d5a10.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/17e420c250804efe904a09a33796d5a16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/17e420c250804efe904a09a33796d5a16.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/19034103295190235.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/19034103295190235.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/1d22f3e41d284f50b2c8fc32e0788698.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/1d22f3e41d284f50b2c8fc32e0788698.jpeg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/20180414165754.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/20180414165754.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/20180414165815.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/20180414165815.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/20180414165821.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/20180414165821.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/20180414165827.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/20180414165827.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/20180414165834.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/20180414165834.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/20180414165840.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/20180414165840.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/20180414165846.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/20180414165846.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/20180414165855.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/20180414165855.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/20180414165909.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/20180414165909.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/20180414165914.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/20180414165914.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/20180414165920.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/20180414165920.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/20180414165927.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/20180414165927.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/20180414165936.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/20180414165936.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/20180414165942.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/20180414165942.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/20180414165947.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/20180414165947.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/20180414165955.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/20180414165955.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/20180414170003.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/20180414170003.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/2dd7a2d09fa94bf8b5c52e5318868b4d9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/2dd7a2d09fa94bf8b5c52e5318868b4d9.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/2dd7a2d09fa94bf8b5c52e5318868b4df.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/2dd7a2d09fa94bf8b5c52e5318868b4df.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/496b3ace787342f7954b7045b8b06804.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/496b3ace787342f7954b7045b8b06804.jpeg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/595ba7b05f2e485eb50565a50cb6cc3c.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/595ba7b05f2e485eb50565a50cb6cc3c.jpeg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/5997fedcc7bd4cffbd350b40d1b5b9824.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/5997fedcc7bd4cffbd350b40d1b5b9824.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/5997fedcc7bd4cffbd350b40d1b5b987.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/5997fedcc7bd4cffbd350b40d1b5b987.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/87d8194bc9834e9f8f0228e9e530beb1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/87d8194bc9834e9f8f0228e9e530beb1.jpeg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/8f5b60ef00714a399ee544d331231820.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/8f5b60ef00714a399ee544d331231820.jpeg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/964e40b005724165b8cf772355796c8c.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/964e40b005724165b8cf772355796c8c.jpeg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/BiazfanxmamNRoxxVxka.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/BiazfanxmamNRoxxVxka.png -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/WhxKECPNujWoWEFNdnJE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/WhxKECPNujWoWEFNdnJE.png -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/a3b10296862e40edb811418d64455d00.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/a3b10296862e40edb811418d64455d00.jpeg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/a43456282d684e0b9319cf332f8ac468.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/a43456282d684e0b9319cf332f8ac468.jpeg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/bba284ac05b041a8b8b0d1927868d5c9x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/bba284ac05b041a8b8b0d1927868d5c9x.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/c7c4ee7be3eb4e73a19887dc713505145.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/c7c4ee7be3eb4e73a19887dc713505145.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/cnrhVkzwxjPwAaCfPbdc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/cnrhVkzwxjPwAaCfPbdc.png -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/default.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/default.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/ff698bb2d25c4d218b3256b46c706ece.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/ff698bb2d25c4d218b3256b46c706ece.jpeg -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/gaOngJwsRYRaVAuXXcmB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/gaOngJwsRYRaVAuXXcmB.png -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/jZUIxmJycoymBprLOUbT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/jZUIxmJycoymBprLOUbT.png -------------------------------------------------------------------------------- /albedo-ui/src/assets/avatar/ubnKSIfAJTxIgXOKlciN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/avatar/ubnKSIfAJTxIgXOKlciN.png -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import SvgIcon from '@/views/components/SvgIcon'// svg component 3 | 4 | // register globally 5 | Vue.component('svg-icon', SvgIcon) 6 | 7 | const req = require.context('./svg', false, /\.svg$/) 8 | const requireAll = requireContext => requireContext.keys().map(requireContext) 9 | requireAll(req) 10 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/chart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/clipboard.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/codeConsole.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/component.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/deploy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/dev.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/develop.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/dictionary.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/doc.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/documentation.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/download.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/drag.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/edit.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/education.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/example.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/excel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/fullscreen.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/gonggao.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/guide.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/image.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/international.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/link.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/list.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/lock.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/login.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/magnifying-glass.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/markdown.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/menu.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/message.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/money.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/monitor.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/nested.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/password.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/peoples.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/search.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/size.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/skill.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/star.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/tab.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/table.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/theme.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/timing.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/tree-table.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/unlock.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/user.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/user1.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/validCode.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/visits.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/wechat.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svg/zujian.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/icons/svgo.yml: -------------------------------------------------------------------------------- 1 | # replace default config 2 | 3 | # multipass: true 4 | # full: true 5 | 6 | plugins: 7 | 8 | # - name 9 | # 10 | # or: 11 | # - name: false 12 | # - name: true 13 | # 14 | # or: 15 | # - name: 16 | # param1: 1 17 | # param2: 2 18 | 19 | - removeAttrs: 20 | attrs: 21 | - 'fill' 22 | - 'fill-rule' 23 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/images/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/images/avatar.png -------------------------------------------------------------------------------- /albedo-ui/src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/images/logo.png -------------------------------------------------------------------------------- /albedo-ui/src/assets/logo/dingtalk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/logo/dingtalk.png -------------------------------------------------------------------------------- /albedo-ui/src/assets/logo/gitee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/logo/gitee.png -------------------------------------------------------------------------------- /albedo-ui/src/assets/logo/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/logo/github.png -------------------------------------------------------------------------------- /albedo-ui/src/assets/logo/microsoft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/logo/microsoft.png -------------------------------------------------------------------------------- /albedo-ui/src/assets/logo/qq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/logo/qq.png -------------------------------------------------------------------------------- /albedo-ui/src/assets/logo/tencent_cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/logo/tencent_cloud.png -------------------------------------------------------------------------------- /albedo-ui/src/assets/styles/element-variables.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * I think element-ui's default theme color is too light for long-term use. 3 | * So I modified the default color and you can modify it to your liking. 4 | **/ 5 | 6 | /* theme color */ 7 | $--color-primary: #1890ff; 8 | $--color-success: #13ce66; 9 | $--color-warning: #FFBA00; 10 | $--color-danger: #ff4949; 11 | // $--color-info: #1E1E1E; 12 | 13 | $--button-font-weight: 400; 14 | 15 | // $--color-text-regular: #1f2d3d; 16 | 17 | $--border-color-light: #dfe4ed; 18 | $--border-color-lighter: #e6ebf5; 19 | 20 | $--table-border:1px solid#dfe6ec; 21 | 22 | /* icon font path, required */ 23 | $--font-path: '~element-ui/lib/theme-chalk/fonts'; 24 | 25 | @import "../../../node_modules/element-ui/packages/theme-chalk/src/index"; 26 | 27 | // the :export directive is the magic sauce for webpack 28 | // https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass 29 | :export { 30 | theme: $--color-primary; 31 | } 32 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/styles/transition.scss: -------------------------------------------------------------------------------- 1 | // global transition css 2 | 3 | /* fade */ 4 | .fade-enter-active, 5 | .fade-leave-active { 6 | transition: opacity 0.28s; 7 | } 8 | 9 | .fade-enter, 10 | .fade-leave-active { 11 | opacity: 0; 12 | } 13 | 14 | /* fade-transform */ 15 | .fade-transform-leave-active, 16 | .fade-transform-enter-active { 17 | transition: all .5s; 18 | } 19 | 20 | .fade-transform-enter { 21 | opacity: 0; 22 | transform: translateX(-30px); 23 | } 24 | 25 | .fade-transform-leave-to { 26 | opacity: 0; 27 | transform: translateX(30px); 28 | } 29 | 30 | /* breadcrumb transition */ 31 | .breadcrumb-enter-active, 32 | .breadcrumb-leave-active { 33 | transition: all .5s; 34 | } 35 | 36 | .breadcrumb-enter, 37 | .breadcrumb-leave-active { 38 | opacity: 0; 39 | transform: translateX(20px); 40 | } 41 | 42 | .breadcrumb-move { 43 | transition: all .5s; 44 | } 45 | 46 | .breadcrumb-leave-active { 47 | position: absolute; 48 | } 49 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/styles/variables.scss: -------------------------------------------------------------------------------- 1 | // base color 2 | $blue:#324157; 3 | $light-blue:#3A71A8; 4 | $red:#C03639; 5 | $pink: #E65D6E; 6 | $green: #30B08F; 7 | $tiffany: #4AB7BD; 8 | $yellow:#FEC171; 9 | $panGreen: #30B08F; 10 | 11 | // sidebar 12 | $menuText:#bfcbd9; 13 | $menuActiveText:#409EFF; 14 | $subMenuActiveText:#f4f4f5; // https://github.com/ElemeFE/element/issues/12951 15 | 16 | $menuBg:#304156; 17 | $menuHover:#263445; 18 | 19 | $subMenuBg:#1f2d3d; 20 | $subMenuHover:#001528; 21 | 22 | $sideBarWidth: 205px; 23 | 24 | // the :export directive is the magic sauce for webpack 25 | // https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass 26 | :export { 27 | menuText: $menuText; 28 | menuActiveText: $menuActiveText; 29 | subMenuActiveText: $subMenuActiveText; 30 | menuBg: $menuBg; 31 | menuHover: $menuHover; 32 | subMenuBg: $subMenuBg; 33 | subMenuHover: $subMenuHover; 34 | sideBarWidth: $sideBarWidth; 35 | } 36 | -------------------------------------------------------------------------------- /albedo-ui/src/assets/捐赠1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/捐赠1.jpg -------------------------------------------------------------------------------- /albedo-ui/src/assets/捐赠2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/somowhere/albedo/c3c3dc8d2764fcb7bc2598be5ff1e9ddc69f541d/albedo-ui/src/assets/捐赠2.jpg -------------------------------------------------------------------------------- /albedo-ui/src/const/common.js: -------------------------------------------------------------------------------- 1 | /* ture 网关模式, false 普通模式*/ 2 | /** * 返回消息类型 info */ 3 | export const MSG_TYPE_FAIL = 0 4 | /** * 返回消息类型 success */ 5 | export const MSG_TYPE_SUCCESS = 1 6 | 7 | /** * 否 */ 8 | export const NO = 0 9 | /** * 是 */ 10 | export const YES = 1 11 | 12 | -------------------------------------------------------------------------------- /albedo-ui/src/directive/clipboard/index.js: -------------------------------------------------------------------------------- 1 | import Clipboard from './clipboard' 2 | 3 | const install = function(Vue) { 4 | Vue.directive('Clipboard', Clipboard) 5 | } 6 | 7 | if (window.Vue) { 8 | window.clipboard = Clipboard 9 | Vue.use(install); // eslint-disable-line 10 | } 11 | 12 | Clipboard.install = install 13 | export default Clipboard 14 | -------------------------------------------------------------------------------- /albedo-ui/src/directive/el-drag-dialog/index.js: -------------------------------------------------------------------------------- 1 | import drag from './drag' 2 | 3 | const install = function(Vue) { 4 | Vue.directive('el-drag-dialog', drag) 5 | } 6 | 7 | if (window.Vue) { 8 | window['el-drag-dialog'] = drag 9 | Vue.use(install); // eslint-disable-line 10 | } 11 | 12 | drag.install = install 13 | export default drag 14 | -------------------------------------------------------------------------------- /albedo-ui/src/directive/el-table/index.js: -------------------------------------------------------------------------------- 1 | import adaptive from './adaptive' 2 | 3 | const install = function(Vue) { 4 | Vue.directive('el-height-adaptive-table', adaptive) 5 | } 6 | 7 | if (window.Vue) { 8 | window['el-height-adaptive-table'] = adaptive 9 | Vue.use(install); // eslint-disable-line 10 | } 11 | 12 | adaptive.install = install 13 | export default adaptive 14 | -------------------------------------------------------------------------------- /albedo-ui/src/directive/waves/index.js: -------------------------------------------------------------------------------- 1 | import waves from './waves' 2 | 3 | const install = function(Vue) { 4 | Vue.directive('waves', waves) 5 | } 6 | 7 | if (window.Vue) { 8 | window.waves = waves 9 | Vue.use(install); // eslint-disable-line 10 | } 11 | 12 | waves.install = install 13 | export default waves 14 | -------------------------------------------------------------------------------- /albedo-ui/src/directive/waves/waves.css: -------------------------------------------------------------------------------- 1 | .waves-ripple { 2 | position: absolute; 3 | border-radius: 100%; 4 | background-color: rgba(0, 0, 0, 0.15); 5 | background-clip: padding-box; 6 | pointer-events: none; 7 | -webkit-user-select: none; 8 | -moz-user-select: none; 9 | -ms-user-select: none; 10 | user-select: none; 11 | -webkit-transform: scale(0); 12 | -ms-transform: scale(0); 13 | transform: scale(0); 14 | opacity: 1; 15 | } 16 | 17 | .waves-ripple.z-active { 18 | opacity: 0; 19 | -webkit-transform: scale(2); 20 | -ms-transform: scale(2); 21 | transform: scale(2); 22 | -webkit-transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out; 23 | transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out; 24 | transition: opacity 1.2s ease-out, transform 0.6s ease-out; 25 | transition: opacity 1.2s ease-out, transform 0.6s ease-out, -webkit-transform 0.6s ease-out; 26 | } -------------------------------------------------------------------------------- /albedo-ui/src/layout/components/Sidebar/FixiOSBug.js: -------------------------------------------------------------------------------- 1 | export default { 2 | computed: { 3 | device() { 4 | return this.$store.state.app.device 5 | } 6 | }, 7 | mounted() { 8 | // In order to fix the click on menu on the ios device will trigger the mouseleave bug 9 | // https://github.com/PanJiaChen/vue-element-admin/issues/1135 10 | this.fixBugIniOS() 11 | }, 12 | methods: { 13 | fixBugIniOS() { 14 | const $subMenu = this.$refs.subMenu 15 | if ($subMenu) { 16 | const handleMouseleave = $subMenu.handleMouseleave 17 | $subMenu.handleMouseleave = (e) => { 18 | if (this.device === 'mobile') { 19 | return 20 | } 21 | handleMouseleave(e) 22 | } 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /albedo-ui/src/layout/components/Sidebar/Item.vue: -------------------------------------------------------------------------------- 1 | 30 | -------------------------------------------------------------------------------- /albedo-ui/src/layout/components/Sidebar/Link.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 36 | -------------------------------------------------------------------------------- /albedo-ui/src/layout/components/index.js: -------------------------------------------------------------------------------- 1 | export { default as AppMain } from './AppMain' 2 | export { default as Navbar } from './Navbar' 3 | export { default as Settings } from './Settings' 4 | export { default as Sidebar } from './Sidebar/index.vue' 5 | export { default as TagsView } from './TagsView/index.vue' 6 | -------------------------------------------------------------------------------- /albedo-ui/src/settings.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | /** 3 | * @description 网站标题 4 | */ 5 | title: 'Albedo', 6 | key: 'Albedo', 7 | /** 8 | * @description 是否显示 tagsView 9 | */ 10 | tagsView: true, 11 | /** 12 | * @description 固定头部 13 | */ 14 | fixedHeader: true, 15 | /** 16 | * @description 记住密码状态下的token在Cookie中存储的天数,默认1天 17 | */ 18 | tokenCookieExpires: 1, 19 | /** 20 | * @description 记住密码状态下的密码在Cookie中存储的天数,默认1天s 21 | */ 22 | passCookieExpires: 1, 23 | /** 24 | * @description 是否只保持一个子菜单的展开 25 | */ 26 | uniqueOpened: true, 27 | /** 28 | * @description token key 29 | */ 30 | TokenKey: 'ALBEDO-TOEKN', 31 | /** 32 | * @description 请求超时时间,毫秒(默认2分钟) 33 | */ 34 | timeout: 1200000, 35 | /** 36 | * @description 是否显示logo 37 | */ 38 | sidebarLogo: true, 39 | /** 40 | * 是否显示设置的底部信息 41 | */ 42 | showFooter: true, 43 | /** 44 | * 底部文字,支持html语法 45 | */ 46 | footerTxt: '© 2020 somewhere Apache License 2.0', 47 | /** 48 | * 备案号 49 | */ 50 | caseNumber: 'xxxx号' 51 | } 52 | -------------------------------------------------------------------------------- /albedo-ui/src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | import getters from './getters' 4 | 5 | Vue.use(Vuex) 6 | 7 | // https://webpack.js.org/guides/dependency-management/#requirecontext 8 | const modulesFiles = require.context('./modules', true, /\.js$/) 9 | 10 | // you do not need `import app from './modules/app'` 11 | // it will auto require all vuex module from modules file 12 | const modules = modulesFiles.keys().reduce((modules, modulePath) => { 13 | // set './app.js' => 'app' 14 | const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1') 15 | const value = modulesFiles(modulePath) 16 | modules[moduleName] = value.default 17 | return modules 18 | }, {}) 19 | 20 | const store = new Vuex.Store({ 21 | modules, 22 | getters 23 | }) 24 | 25 | export default store 26 | -------------------------------------------------------------------------------- /albedo-ui/src/store/modules/api.js: -------------------------------------------------------------------------------- 1 | const baseUrl = process.env.VUE_APP_BASE_URL 2 | const api = { 3 | state: { 4 | // 实时控制台 5 | socketApi: baseUrl + '/websocket?token=kl', 6 | // swagger 7 | swaggerApi: baseUrl + '/swagger-ui/index.html', 8 | // 文件上传 9 | fileUploadApi: process.env.VUE_APP_BASE_API + '/file/upload', 10 | // baseUrl, 11 | baseUrl: baseUrl, 12 | // baseApi, 13 | baseApi: process.env.VUE_APP_BASE_API 14 | } 15 | } 16 | 17 | export default api 18 | -------------------------------------------------------------------------------- /albedo-ui/src/store/modules/dict.js: -------------------------------------------------------------------------------- 1 | import commonService from '@/api/common' 2 | import { MSG_TYPE_SUCCESS } from '@/const/common' 3 | 4 | const dict = { 5 | state: { 6 | dicts: {} 7 | }, 8 | mutations: { 9 | SET_DICTS: (state, dicts) => { 10 | state.dicts = dicts 11 | } 12 | }, 13 | actions: { 14 | // 获取字典数据 15 | GetDicts({ commit }) { 16 | return new Promise((resolve, reject) => { 17 | commonService.getDicts().then(res => { 18 | if (res.code === MSG_TYPE_SUCCESS) { 19 | commit('SET_DICTS', res.data) 20 | resolve() 21 | } 22 | }).catch(error => { 23 | reject(error) 24 | }) 25 | }) 26 | } 27 | } 28 | } 29 | 30 | export default dict 31 | -------------------------------------------------------------------------------- /albedo-ui/src/utils/auth.js: -------------------------------------------------------------------------------- 1 | import Cookies from 'js-cookie' 2 | import Config from '@/settings' 3 | 4 | const TokenKey = Config.TokenKey 5 | 6 | export function getToken() { 7 | return Cookies.get(TokenKey) 8 | } 9 | 10 | export function getXsrfToken() { 11 | return Cookies.get('XSRF-TOKEN') 12 | } 13 | 14 | export function setToken(token, rememberMe) { 15 | if (rememberMe) { 16 | return Cookies.set(TokenKey, token, { expires: Config.tokenCookieExpires }) 17 | } else return Cookies.set(TokenKey, token) 18 | } 19 | 20 | export function removeToken() { 21 | return Cookies.remove(TokenKey) 22 | } 23 | -------------------------------------------------------------------------------- /albedo-ui/src/utils/clipboard.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Clipboard from 'clipboard' 3 | 4 | function clipboardSuccess() { 5 | Vue.prototype.$message({ 6 | message: 'Copy successfully', 7 | type: 'success', 8 | duration: 1500 9 | }) 10 | } 11 | 12 | function clipboardError() { 13 | Vue.prototype.$message({ 14 | message: 'Copy failed', 15 | type: 'error' 16 | }) 17 | } 18 | 19 | export default function handleClipboard(text, event) { 20 | const clipboard = new Clipboard(event.target, { 21 | text: () => text 22 | }) 23 | clipboard.on('success', () => { 24 | clipboardSuccess() 25 | clipboard.off('error') 26 | clipboard.off('success') 27 | clipboard.destroy() 28 | }) 29 | clipboard.on('error', () => { 30 | clipboardError() 31 | clipboard.off('error') 32 | clipboard.off('success') 33 | clipboard.destroy() 34 | }) 35 | clipboard.onClick(event) 36 | } 37 | -------------------------------------------------------------------------------- /albedo-ui/src/utils/get-page-title.js: -------------------------------------------------------------------------------- 1 | import defaultSettings from '@/settings' 2 | 3 | const title = defaultSettings.title || 'Vue Element Admin' 4 | 5 | export default function getPageTitle(pageTitle) { 6 | if (pageTitle) { 7 | return `${pageTitle} - ${title}` 8 | } 9 | return `${title}` 10 | } 11 | -------------------------------------------------------------------------------- /albedo-ui/src/utils/permission.js: -------------------------------------------------------------------------------- 1 | import store from '@/store' 2 | 3 | /** 4 | * @param {Array} value 5 | * @returns {Boolean} 6 | * @example see @/views/permission/directive.vue 7 | */ 8 | export default function checkPermission(value) { 9 | if (value && value instanceof Array && value.length > 0) { 10 | const roles = store.getters && store.getters.roles 11 | const permissionRoles = value 12 | 13 | const hasPermission = roles.some(role => { 14 | return permissionRoles.includes(role) 15 | }) 16 | 17 | if (!hasPermission) { 18 | return false 19 | } 20 | return true 21 | } else { 22 | console.error(`need roles! Like v-permission="['admin','editor']"`) 23 | return false 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /albedo-ui/src/utils/rsa-encrypt.js: -------------------------------------------------------------------------------- 1 | import JSEncrypt from 'jsencrypt/bin/jsencrypt' 2 | 3 | // 密钥对生成 http://web.chacuo.net/netrsakeypair 4 | 5 | const publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAN4UOrkIuLpL0o7WItgIUkP/RFBsurMPQ7fTaOKwT+S9tWly0xMmJzSl9Kdh8MpWcyz+5nUSb7SgGWxiE3qIL2sCAwEAAQ==' 6 | 7 | // 加密 8 | export function encrypt(txt) { 9 | const encryptor = new JSEncrypt() 10 | encryptor.setPublicKey(publicKey) // 设置公钥 11 | return encryptor.encrypt(txt) // 对需要加密的数据进行加密 12 | } 13 | 14 | // 解密 15 | // export function decrypt(txt) { 16 | // const encryptor = new JSEncrypt() 17 | // encryptor.setPrivateKey(privateKey) 18 | // return encryptor.decrypt(txt) 19 | // } 20 | 21 | -------------------------------------------------------------------------------- /albedo-ui/src/utils/upload.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | import { getToken } from '@/utils/auth' 3 | 4 | export function upload(api, file) { 5 | var data = new FormData() 6 | data.append('file', file) 7 | const config = { 8 | headers: { 'Authorization': getToken() } 9 | } 10 | return axios.post(api, data, config) 11 | } 12 | -------------------------------------------------------------------------------- /albedo-ui/src/views/components/Crud/Pagination.vue: -------------------------------------------------------------------------------- 1 | 2 | 13 | 20 | -------------------------------------------------------------------------------- /albedo-ui/src/views/components/Crud/RR.operation.vue: -------------------------------------------------------------------------------- 1 | 2 | 22 | 36 | -------------------------------------------------------------------------------- /albedo-ui/src/views/components/Doc/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 17 | -------------------------------------------------------------------------------- /albedo-ui/src/views/components/Echarts/mixins/resize.js: -------------------------------------------------------------------------------- 1 | import commonUtil from '@/utils/common' 2 | 3 | export default { 4 | data() { 5 | return { 6 | $_sidebarElm: null 7 | } 8 | }, 9 | mounted() { 10 | this.__resizeHandler = commonUtil.debounce(() => { 11 | if (this.chart) { 12 | this.chart.resize() 13 | } 14 | }, 100) 15 | window.addEventListener('resize', this.__resizeHandler) 16 | 17 | this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0] 18 | this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler) 19 | }, 20 | beforeDestroy() { 21 | window.removeEventListener('resize', this.__resizeHandler) 22 | 23 | this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler) 24 | }, 25 | methods: { 26 | // use $_ for mixins properties 27 | // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential 28 | $_sidebarResizeHandler(e) { 29 | if (e.propertyName === 'width') { 30 | this.__resizeHandler() 31 | } 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /albedo-ui/src/views/components/IconSelect/requireIcons.js: -------------------------------------------------------------------------------- 1 | const req = require.context('@/assets/icons/svg', false, /\.svg$/) 2 | const requireAll = requireContext => requireContext.keys() 3 | 4 | const re = /\.\/(.*)\.svg/ 5 | 6 | const icons = requireAll(req).map(i => { 7 | return i.match(re)[1] 8 | }) 9 | 10 | export default icons 11 | -------------------------------------------------------------------------------- /albedo-ui/src/views/components/Icons/svg-icons.js: -------------------------------------------------------------------------------- 1 | const req = require.context('@/assets/icons/svg', false, /\.svg$/) 2 | const requireAll = requireContext => requireContext.keys() 3 | 4 | const re = /\.\/(.*)\.svg/ 5 | 6 | const svgIcons = requireAll(req).map(i => { 7 | return i.match(re)[1] 8 | }) 9 | 10 | export default svgIcons 11 | -------------------------------------------------------------------------------- /albedo-ui/src/views/components/Iframe/index.vue: -------------------------------------------------------------------------------- 1 |