Full Code of pig-mesh/pig for AI

master 6721dd17df59 cached
490 files
1.2 MB
349.9k tokens
1337 symbols
1 requests
Download .txt
Showing preview only (1,353K chars total). Download the full file or copy to clipboard to get everything.
Repository: pig-mesh/pig
Branch: master
Commit: 6721dd17df59
Files: 490
Total size: 1.2 MB

Directory structure:
gitextract_fxd_qqx7/

├── .editorconfig
├── .gitee/
│   └── ISSUE_TEMPLATE/
│       ├── config.yml
│       └── issue.yml
├── .github/
│   ├── renovate.json
│   └── workflows/
│       ├── github-release.yml
│       ├── image.yml
│       ├── maven.yml
│       └── mirror.yml
├── .gitignore
├── LICENSE
├── README.md
├── db/
│   ├── Dockerfile
│   ├── pig.sql
│   └── pig_config.sql
├── docker-compose.yml
├── pig-auth/
│   ├── Dockerfile
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── pig4cloud/
│           │           └── pig/
│           │               └── auth/
│           │                   ├── PigAuthApplication.java
│           │                   ├── config/
│           │                   │   └── AuthorizationServerConfiguration.java
│           │                   ├── endpoint/
│           │                   │   ├── ImageCodeEndpoint.java
│           │                   │   └── PigTokenEndpoint.java
│           │                   └── support/
│           │                       ├── CustomeOAuth2AccessTokenGenerator.java
│           │                       ├── base/
│           │                       │   ├── OAuth2ResourceOwnerBaseAuthenticationConverter.java
│           │                       │   ├── OAuth2ResourceOwnerBaseAuthenticationProvider.java
│           │                       │   ├── OAuth2ResourceOwnerBaseAuthenticationToken.java
│           │                       │   └── package-info.java
│           │                       ├── core/
│           │                       │   ├── CustomeOAuth2TokenCustomizer.java
│           │                       │   ├── FormIdentityLoginConfigurer.java
│           │                       │   └── PigDaoAuthenticationProvider.java
│           │                       ├── filter/
│           │                       │   ├── AuthSecurityConfigProperties.java
│           │                       │   ├── PasswordDecoderFilter.java
│           │                       │   └── ValidateCodeFilter.java
│           │                       ├── handler/
│           │                       │   ├── FormAuthenticationFailureHandler.java
│           │                       │   ├── PigAuthenticationFailureEventHandler.java
│           │                       │   ├── PigAuthenticationSuccessEventHandler.java
│           │                       │   ├── PigLogoutSuccessEventHandler.java
│           │                       │   └── SsoLogoutSuccessHandler.java
│           │                       ├── password/
│           │                       │   ├── OAuth2ResourceOwnerPasswordAuthenticationConverter.java
│           │                       │   ├── OAuth2ResourceOwnerPasswordAuthenticationProvider.java
│           │                       │   ├── OAuth2ResourceOwnerPasswordAuthenticationToken.java
│           │                       │   └── package-info.java
│           │                       └── sms/
│           │                           ├── OAuth2ResourceOwnerSmsAuthenticationConverter.java
│           │                           ├── OAuth2ResourceOwnerSmsAuthenticationProvider.java
│           │                           ├── OAuth2ResourceOwnerSmsAuthenticationToken.java
│           │                           └── package-info.java
│           └── resources/
│               ├── application.yml
│               ├── logback-spring.xml
│               └── templates/
│                   └── ftl/
│                       ├── confirm.ftl
│                       ├── layout/
│                       │   └── base.ftl
│                       └── login.ftl
├── pig-boot/
│   ├── Dockerfile
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── pig4cloud/
│           │           └── pig/
│           │               └── PigBootApplication.java
│           └── resources/
│               ├── application-dev.yml
│               ├── application.yml
│               └── logback-spring.xml
├── pig-common/
│   ├── pig-common-bom/
│   │   └── pom.xml
│   ├── pig-common-core/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── common/
│   │           │                   └── core/
│   │           │                       ├── config/
│   │           │                       │   ├── JacksonConfiguration.java
│   │           │                       │   ├── RedisTemplateConfiguration.java
│   │           │                       │   ├── RestTemplateConfiguration.java
│   │           │                       │   └── WebMvcConfiguration.java
│   │           │                       ├── constant/
│   │           │                       │   ├── CacheConstants.java
│   │           │                       │   ├── CommonConstants.java
│   │           │                       │   ├── SecurityConstants.java
│   │           │                       │   ├── ServiceNameConstants.java
│   │           │                       │   └── enums/
│   │           │                       │       ├── DictTypeEnum.java
│   │           │                       │       ├── LoginTypeEnum.java
│   │           │                       │       └── MenuTypeEnum.java
│   │           │                       ├── exception/
│   │           │                       │   ├── CheckedException.java
│   │           │                       │   ├── ErrorCodes.java
│   │           │                       │   ├── PigDeniedException.java
│   │           │                       │   └── ValidateCodeException.java
│   │           │                       ├── factory/
│   │           │                       │   └── YamlPropertySourceFactory.java
│   │           │                       ├── jackson/
│   │           │                       │   └── PigJavaTimeModule.java
│   │           │                       ├── servlet/
│   │           │                       │   └── RepeatBodyRequestWrapper.java
│   │           │                       └── util/
│   │           │                           ├── ClassUtils.java
│   │           │                           ├── MsgUtils.java
│   │           │                           ├── R.java
│   │           │                           ├── RedisUtils.java
│   │           │                           ├── RetOps.java
│   │           │                           ├── SpringContextHolder.java
│   │           │                           └── WebUtils.java
│   │           └── resources/
│   │               ├── META-INF/
│   │               │   └── spring/
│   │               │       └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│   │               ├── banner.txt
│   │               ├── i18n/
│   │               │   └── messages_zh_CN.properties
│   │               └── logback-spring.xml
│   ├── pig-common-datasource/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── pig4cloud/
│   │                       └── pig/
│   │                           └── common/
│   │                               └── datasource/
│   │                                   ├── DynamicDataSourceAutoConfiguration.java
│   │                                   ├── annotation/
│   │                                   │   └── EnableDynamicDataSource.java
│   │                                   ├── config/
│   │                                   │   ├── ClearTtlDataSourceFilter.java
│   │                                   │   ├── DataSourceProperties.java
│   │                                   │   ├── JdbcDynamicDataSourceProvider.java
│   │                                   │   ├── LastParamDsProcessor.java
│   │                                   │   └── MasterDataSourceProvider.java
│   │                                   ├── support/
│   │                                   │   └── DataSourceConstants.java
│   │                                   └── util/
│   │                                       ├── DsConfTypeEnum.java
│   │                                       └── DsJdbcUrlEnum.java
│   ├── pig-common-excel/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── common/
│   │           │                   └── excel/
│   │           │                       ├── ExcelAutoConfiguration.java
│   │           │                       └── provider/
│   │           │                           ├── RemoteDictApiService.java
│   │           │                           └── RemoteDictDataProvider.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── spring/
│   │                       └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│   ├── pig-common-feign/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   ├── com/
│   │           │   │   └── pig4cloud/
│   │           │   │       └── pig/
│   │           │   │           └── common/
│   │           │   │               └── feign/
│   │           │   │                   ├── PigFeignAutoConfiguration.java
│   │           │   │                   ├── annotation/
│   │           │   │                   │   ├── EnablePigFeignClients.java
│   │           │   │                   │   └── NoToken.java
│   │           │   │                   ├── core/
│   │           │   │                   │   ├── PigFeignInnerRequestInterceptor.java
│   │           │   │                   │   └── PigFeignRequestCloseInterceptor.java
│   │           │   │                   └── sentinel/
│   │           │   │                       ├── SentinelAutoConfiguration.java
│   │           │   │                       ├── ext/
│   │           │   │                       │   ├── PigSentinelFeign.java
│   │           │   │                       │   └── PigSentinelInvocationHandler.java
│   │           │   │                       ├── handle/
│   │           │   │                       │   ├── GlobalBizExceptionHandler.java
│   │           │   │                       │   └── PigUrlBlockHandler.java
│   │           │   │                       └── parser/
│   │           │   │                           └── PigHeaderRequestOriginParser.java
│   │           │   └── org/
│   │           │       └── springframework/
│   │           │           └── cloud/
│   │           │               └── openfeign/
│   │           │                   └── PigFeignClientsRegistrar.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── spring/
│   │                       └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│   ├── pig-common-log/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── common/
│   │           │                   └── log/
│   │           │                       ├── LogAutoConfiguration.java
│   │           │                       ├── annotation/
│   │           │                       │   └── SysLog.java
│   │           │                       ├── aspect/
│   │           │                       │   └── SysLogAspect.java
│   │           │                       ├── config/
│   │           │                       │   └── PigLogProperties.java
│   │           │                       ├── event/
│   │           │                       │   ├── SysLogEvent.java
│   │           │                       │   ├── SysLogEventSource.java
│   │           │                       │   └── SysLogListener.java
│   │           │                       ├── init/
│   │           │                       │   └── ApplicationLoggerInitializer.java
│   │           │                       └── util/
│   │           │                           ├── LogTypeEnum.java
│   │           │                           └── SysLogUtils.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   ├── spring/
│   │                   │   └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│   │                   ├── spring-configuration-metadata.json
│   │                   └── spring.factories
│   ├── pig-common-mybatis/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── common/
│   │           │                   └── mybatis/
│   │           │                       ├── MybatisAutoConfiguration.java
│   │           │                       ├── base/
│   │           │                       │   └── BaseEntity.java
│   │           │                       ├── config/
│   │           │                       │   └── MybatisPlusMetaObjectHandler.java
│   │           │                       ├── handler/
│   │           │                       │   ├── JsonLongArrayTypeHandler.java
│   │           │                       │   └── JsonStringArrayTypeHandler.java
│   │           │                       ├── plugins/
│   │           │                       │   └── PigPaginationInnerInterceptor.java
│   │           │                       └── resolver/
│   │           │                           └── SqlFilterArgumentResolver.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── spring/
│   │                       └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│   ├── pig-common-oss/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── common/
│   │           │                   └── file/
│   │           │                       ├── FileAutoConfiguration.java
│   │           │                       ├── core/
│   │           │                       │   ├── FileProperties.java
│   │           │                       │   └── FileTemplate.java
│   │           │                       ├── local/
│   │           │                       │   ├── LocalFileAutoConfiguration.java
│   │           │                       │   ├── LocalFileProperties.java
│   │           │                       │   └── LocalFileTemplate.java
│   │           │                       └── oss/
│   │           │                           ├── OssAutoConfiguration.java
│   │           │                           ├── OssProperties.java
│   │           │                           ├── http/
│   │           │                           │   └── OssEndpoint.java
│   │           │                           └── service/
│   │           │                               └── OssTemplate.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── spring/
│   │                       └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│   ├── pig-common-seata/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── common/
│   │           │                   └── seata/
│   │           │                       └── config/
│   │           │                           └── SeataAutoConfiguration.java
│   │           └── resources/
│   │               ├── META-INF/
│   │               │   └── spring/
│   │               │       └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│   │               └── seata-config.yml
│   ├── pig-common-security/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── common/
│   │           │                   └── security/
│   │           │                       ├── annotation/
│   │           │                       │   ├── EnablePigResourceServer.java
│   │           │                       │   ├── HasPermission.java
│   │           │                       │   └── Inner.java
│   │           │                       ├── component/
│   │           │                       │   ├── PermissionService.java
│   │           │                       │   ├── PermitAllUrlProperties.java
│   │           │                       │   ├── PigBearerTokenExtractor.java
│   │           │                       │   ├── PigBootCorsProperties.java
│   │           │                       │   ├── PigClientCredentialsOAuth2AuthenticatedPrincipal.java
│   │           │                       │   ├── PigCustomOAuth2AccessTokenResponseHttpMessageConverter.java
│   │           │                       │   ├── PigCustomOpaqueTokenIntrospector.java
│   │           │                       │   ├── PigResourceServerAutoConfiguration.java
│   │           │                       │   ├── PigResourceServerConfiguration.java
│   │           │                       │   ├── PigSecurityInnerAspect.java
│   │           │                       │   ├── PigSecurityMessageSourceConfiguration.java
│   │           │                       │   └── ResourceAuthExceptionEntryPoint.java
│   │           │                       ├── feign/
│   │           │                       │   ├── PigFeignClientConfiguration.java
│   │           │                       │   └── PigOAuthRequestInterceptor.java
│   │           │                       ├── service/
│   │           │                       │   ├── PigAppUserDetailsServiceImpl.java
│   │           │                       │   ├── PigRedisOAuth2AuthorizationConsentService.java
│   │           │                       │   ├── PigRedisOAuth2AuthorizationService.java
│   │           │                       │   ├── PigRemoteRegisteredClientRepository.java
│   │           │                       │   ├── PigUser.java
│   │           │                       │   ├── PigUserDetailsService.java
│   │           │                       │   └── PigUserDetailsServiceImpl.java
│   │           │                       └── util/
│   │           │                           ├── OAuth2EndpointUtils.java
│   │           │                           ├── OAuth2ErrorCodesExpand.java
│   │           │                           ├── OAuthClientException.java
│   │           │                           ├── ScopeException.java
│   │           │                           └── SecurityUtils.java
│   │           └── resources/
│   │               ├── META-INF/
│   │               │   └── spring/
│   │               │       └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│   │               └── i18n/
│   │                   └── errors/
│   │                       └── messages_zh_CN.properties
│   ├── pig-common-swagger/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── common/
│   │           │                   └── swagger/
│   │           │                       ├── annotation/
│   │           │                       │   └── EnablePigDoc.java
│   │           │                       ├── config/
│   │           │                       │   ├── OpenAPIDefinition.java
│   │           │                       │   ├── OpenAPIDefinitionImportSelector.java
│   │           │                       │   └── OpenAPIMetadataConfiguration.java
│   │           │                       └── support/
│   │           │                           └── SwaggerProperties.java
│   │           └── resources/
│   │               └── openapi-config.yaml
│   ├── pig-common-websocket/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── common/
│   │           │                   └── websocket/
│   │           │                       ├── config/
│   │           │                       │   ├── LocalMessageDistributorConfiguration.java
│   │           │                       │   ├── MessageDistributorTypeConstants.java
│   │           │                       │   ├── RedisMessageDistributorConfiguration.java
│   │           │                       │   ├── WebSocketAutoConfiguration.java
│   │           │                       │   ├── WebSocketHandlerConfig.java
│   │           │                       │   ├── WebSocketMessageSender.java
│   │           │                       │   └── WebSocketProperties.java
│   │           │                       ├── custom/
│   │           │                       │   ├── PigxSessionKeyGenerator.java
│   │           │                       │   └── UserAttributeHandshakeInterceptor.java
│   │           │                       ├── distribute/
│   │           │                       │   ├── LocalMessageDistributor.java
│   │           │                       │   ├── MessageDO.java
│   │           │                       │   ├── MessageDistributor.java
│   │           │                       │   ├── MessageSender.java
│   │           │                       │   ├── RedisMessageDistributor.java
│   │           │                       │   └── RedisWebsocketMessageListener.java
│   │           │                       ├── handler/
│   │           │                       │   ├── CustomPlanTextMessageHandler.java
│   │           │                       │   ├── CustomWebSocketHandler.java
│   │           │                       │   ├── JsonMessageHandler.java
│   │           │                       │   ├── PingJsonMessageHandler.java
│   │           │                       │   └── PlanTextMessageHandler.java
│   │           │                       ├── holder/
│   │           │                       │   ├── JsonMessageHandlerHolder.java
│   │           │                       │   ├── MapSessionWebSocketHandlerDecorator.java
│   │           │                       │   ├── SessionKeyGenerator.java
│   │           │                       │   └── WebSocketSessionHolder.java
│   │           │                       ├── message/
│   │           │                       │   ├── AbstractJsonWebSocketMessage.java
│   │           │                       │   ├── JsonWebSocketMessage.java
│   │           │                       │   ├── PingJsonWebSocketMessage.java
│   │           │                       │   ├── PongJsonWebSocketMessage.java
│   │           │                       │   └── WebSocketMessageTypeEnum.java
│   │           │                       └── package-info.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── spring/
│   │                       └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│   ├── pig-common-xss/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── common/
│   │           │                   └── xss/
│   │           │                       ├── PigXssAutoConfiguration.java
│   │           │                       ├── config/
│   │           │                       │   ├── PigXssProperties.java
│   │           │                       │   └── package-info.java
│   │           │                       ├── core/
│   │           │                       │   ├── DefaultXssCleaner.java
│   │           │                       │   ├── FormXssClean.java
│   │           │                       │   ├── FromXssException.java
│   │           │                       │   ├── JacksonXssClean.java
│   │           │                       │   ├── JacksonXssException.java
│   │           │                       │   ├── XssCleanDeserializer.java
│   │           │                       │   ├── XssCleanDeserializerBase.java
│   │           │                       │   ├── XssCleanIgnore.java
│   │           │                       │   ├── XssCleanInterceptor.java
│   │           │                       │   ├── XssCleaner.java
│   │           │                       │   ├── XssException.java
│   │           │                       │   ├── XssHolder.java
│   │           │                       │   └── XssType.java
│   │           │                       ├── package-info.java
│   │           │                       └── utils/
│   │           │                           ├── XssUtil.java
│   │           │                           └── package-info.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   ├── spring/
│   │                   │   └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│   │                   └── spring-configuration-metadata.json
│   └── pom.xml
├── pig-gateway/
│   ├── Dockerfile
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── pig4cloud/
│           │           └── pig/
│           │               └── gateway/
│           │                   ├── PigGatewayApplication.java
│           │                   ├── config/
│           │                   │   ├── GatewayConfiguration.java
│           │                   │   ├── RateLimiterConfiguration.java
│           │                   │   └── SpringDocConfiguration.java
│           │                   ├── filter/
│           │                   │   └── PigRequestGlobalFilter.java
│           │                   └── handler/
│           │                       └── GlobalExceptionHandler.java
│           └── resources/
│               ├── application.yml
│               └── logback-spring.xml
├── pig-register/
│   ├── Dockerfile
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── alibaba/
│           │           └── nacos/
│           │               └── bootstrap/
│           │                   └── PigNacosApplication.java
│           └── resources/
│               ├── application.properties
│               └── logback-spring.xml
├── pig-upms/
│   ├── pig-upms-api/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── admin/
│   │           │                   └── api/
│   │           │                       ├── dto/
│   │           │                       │   ├── RegisterUserDTO.java
│   │           │                       │   ├── SysLogDTO.java
│   │           │                       │   ├── UserDTO.java
│   │           │                       │   └── UserInfo.java
│   │           │                       ├── entity/
│   │           │                       │   ├── SysDept.java
│   │           │                       │   ├── SysDeptRelation.java
│   │           │                       │   ├── SysDict.java
│   │           │                       │   ├── SysDictItem.java
│   │           │                       │   ├── SysFile.java
│   │           │                       │   ├── SysLog.java
│   │           │                       │   ├── SysMenu.java
│   │           │                       │   ├── SysOauthClientDetails.java
│   │           │                       │   ├── SysPost.java
│   │           │                       │   ├── SysPublicParam.java
│   │           │                       │   ├── SysRole.java
│   │           │                       │   ├── SysRoleMenu.java
│   │           │                       │   ├── SysUser.java
│   │           │                       │   ├── SysUserPost.java
│   │           │                       │   └── SysUserRole.java
│   │           │                       ├── feign/
│   │           │                       │   ├── RemoteClientDetailsService.java
│   │           │                       │   ├── RemoteDictService.java
│   │           │                       │   ├── RemoteLogService.java
│   │           │                       │   ├── RemoteParamService.java
│   │           │                       │   ├── RemoteTokenService.java
│   │           │                       │   └── RemoteUserService.java
│   │           │                       ├── util/
│   │           │                       │   ├── DictResolver.java
│   │           │                       │   └── ParamResolver.java
│   │           │                       └── vo/
│   │           │                           ├── DeptExcelVo.java
│   │           │                           ├── PostExcelVO.java
│   │           │                           ├── PreLogVO.java
│   │           │                           ├── RoleExcelVO.java
│   │           │                           ├── RoleVO.java
│   │           │                           ├── TokenVo.java
│   │           │                           ├── UserExcelVO.java
│   │           │                           └── UserVO.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── spring/
│   │                       └── org.springframework.cloud.openfeign.FeignClient.imports
│   ├── pig-upms-biz/
│   │   ├── Dockerfile
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── admin/
│   │           │                   ├── PigAdminApplication.java
│   │           │                   ├── controller/
│   │           │                   │   ├── SysClientController.java
│   │           │                   │   ├── SysDeptController.java
│   │           │                   │   ├── SysDictController.java
│   │           │                   │   ├── SysFileController.java
│   │           │                   │   ├── SysLogController.java
│   │           │                   │   ├── SysMenuController.java
│   │           │                   │   ├── SysMobileController.java
│   │           │                   │   ├── SysPostController.java
│   │           │                   │   ├── SysPublicParamController.java
│   │           │                   │   ├── SysRegisterController.java
│   │           │                   │   ├── SysRoleController.java
│   │           │                   │   ├── SysSystemInfoController.java
│   │           │                   │   ├── SysTokenController.java
│   │           │                   │   └── SysUserController.java
│   │           │                   ├── mapper/
│   │           │                   │   ├── SysDeptMapper.java
│   │           │                   │   ├── SysDictItemMapper.java
│   │           │                   │   ├── SysDictMapper.java
│   │           │                   │   ├── SysFileMapper.java
│   │           │                   │   ├── SysLogMapper.java
│   │           │                   │   ├── SysMenuMapper.java
│   │           │                   │   ├── SysOauthClientDetailsMapper.java
│   │           │                   │   ├── SysPostMapper.java
│   │           │                   │   ├── SysPublicParamMapper.java
│   │           │                   │   ├── SysRoleMapper.java
│   │           │                   │   ├── SysRoleMenuMapper.java
│   │           │                   │   ├── SysUserMapper.java
│   │           │                   │   ├── SysUserPostMapper.java
│   │           │                   │   └── SysUserRoleMapper.java
│   │           │                   └── service/
│   │           │                       ├── SysDeptService.java
│   │           │                       ├── SysDictItemService.java
│   │           │                       ├── SysDictService.java
│   │           │                       ├── SysFileService.java
│   │           │                       ├── SysLogService.java
│   │           │                       ├── SysMenuService.java
│   │           │                       ├── SysMobileService.java
│   │           │                       ├── SysOauthClientDetailsService.java
│   │           │                       ├── SysPostService.java
│   │           │                       ├── SysPublicParamService.java
│   │           │                       ├── SysRoleMenuService.java
│   │           │                       ├── SysRoleService.java
│   │           │                       ├── SysUserRoleService.java
│   │           │                       ├── SysUserService.java
│   │           │                       └── impl/
│   │           │                           ├── SysDeptServiceImpl.java
│   │           │                           ├── SysDictItemServiceImpl.java
│   │           │                           ├── SysDictServiceImpl.java
│   │           │                           ├── SysFileServiceImpl.java
│   │           │                           ├── SysLogServiceImpl.java
│   │           │                           ├── SysMenuServiceImpl.java
│   │           │                           ├── SysMobileServiceImpl.java
│   │           │                           ├── SysOauthClientDetailsServiceImpl.java
│   │           │                           ├── SysPostServiceImpl.java
│   │           │                           ├── SysPublicParamServiceImpl.java
│   │           │                           ├── SysRoleMenuServiceImpl.java
│   │           │                           ├── SysRoleServiceImpl.java
│   │           │                           ├── SysUserRoleServiceImpl.java
│   │           │                           └── SysUserServiceImpl.java
│   │           └── resources/
│   │               ├── application.yml
│   │               ├── file/
│   │               │   ├── approle.xlsx
│   │               │   ├── dept.xlsx
│   │               │   ├── post.xlsx
│   │               │   ├── role.xlsx
│   │               │   └── user.xlsx
│   │               ├── logback-spring.xml
│   │               └── mapper/
│   │                   ├── SysDeptMapper.xml
│   │                   ├── SysMenuMapper.xml
│   │                   ├── SysPostMapper.xml
│   │                   ├── SysRoleMapper.xml
│   │                   └── SysUserMapper.xml
│   └── pom.xml
├── pig-visual/
│   ├── pig-codegen/
│   │   ├── Dockerfile
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── codegen/
│   │           │                   ├── PigCodeGenApplication.java
│   │           │                   ├── config/
│   │           │                   │   └── PigCodeGenDefaultProperties.java
│   │           │                   ├── controller/
│   │           │                   │   ├── GenDsConfController.java
│   │           │                   │   ├── GenFieldTypeController.java
│   │           │                   │   ├── GenGroupController.java
│   │           │                   │   ├── GenTableController.java
│   │           │                   │   ├── GenTemplateController.java
│   │           │                   │   ├── GenTemplateGroupController.java
│   │           │                   │   └── GeneratorController.java
│   │           │                   ├── entity/
│   │           │                   │   ├── ColumnEntity.java
│   │           │                   │   ├── GenConfig.java
│   │           │                   │   ├── GenDatasourceConf.java
│   │           │                   │   ├── GenFieldType.java
│   │           │                   │   ├── GenGroupEntity.java
│   │           │                   │   ├── GenTable.java
│   │           │                   │   ├── GenTableColumnEntity.java
│   │           │                   │   ├── GenTemplateEntity.java
│   │           │                   │   ├── GenTemplateGroupEntity.java
│   │           │                   │   └── TableEntity.java
│   │           │                   ├── mapper/
│   │           │                   │   ├── GenDatasourceConfMapper.java
│   │           │                   │   ├── GenDynamicMapper.java
│   │           │                   │   ├── GenFieldTypeMapper.java
│   │           │                   │   ├── GenGroupMapper.java
│   │           │                   │   ├── GenTableColumnMapper.java
│   │           │                   │   ├── GenTableMapper.java
│   │           │                   │   ├── GenTemplateGroupMapper.java
│   │           │                   │   └── GenTemplateMapper.java
│   │           │                   ├── service/
│   │           │                   │   ├── GenDatasourceConfService.java
│   │           │                   │   ├── GenFieldTypeService.java
│   │           │                   │   ├── GenGroupService.java
│   │           │                   │   ├── GenTableColumnService.java
│   │           │                   │   ├── GenTableService.java
│   │           │                   │   ├── GenTemplateGroupService.java
│   │           │                   │   ├── GenTemplateService.java
│   │           │                   │   ├── GeneratorService.java
│   │           │                   │   └── impl/
│   │           │                   │       ├── GenDatasourceConfServiceImpl.java
│   │           │                   │       ├── GenFieldTypeServiceImpl.java
│   │           │                   │       ├── GenGroupServiceImpl.java
│   │           │                   │       ├── GenTableColumnServiceImpl.java
│   │           │                   │       ├── GenTableServiceImpl.java
│   │           │                   │       ├── GenTemplateGroupServiceImpl.java
│   │           │                   │       ├── GenTemplateServiceImpl.java
│   │           │                   │       └── GeneratorServiceImpl.java
│   │           │                   └── util/
│   │           │                       ├── AutoFillEnum.java
│   │           │                       ├── BoolFillEnum.java
│   │           │                       ├── CommonColumnFiledEnum.java
│   │           │                       ├── DictTool.java
│   │           │                       ├── GenKit.java
│   │           │                       ├── GeneratorStyleEnum.java
│   │           │                       ├── NamingCaseTool.java
│   │           │                       ├── VelocityKit.java
│   │           │                       └── vo/
│   │           │                           ├── GenCreateTableVO.java
│   │           │                           ├── GenTemplateFileVO.java
│   │           │                           ├── GroupVO.java
│   │           │                           ├── SqlDto.java
│   │           │                           └── TemplateGroupDTO.java
│   │           └── resources/
│   │               ├── application.yml
│   │               ├── logback-spring.xml
│   │               └── mapper/
│   │                   ├── GenFieldTypeMapper.xml
│   │                   ├── GenGroupMapper.xml
│   │                   ├── GenTableMapper.xml
│   │                   ├── GenTemplateGroupMapper.xml
│   │                   └── GenTemplateMapper.xml
│   ├── pig-monitor/
│   │   ├── Dockerfile
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── monitor/
│   │           │                   ├── PigMonitorApplication.java
│   │           │                   ├── config/
│   │           │                   │   ├── CustomCsrfFilter.java
│   │           │                   │   └── SecuritySecureConfig.java
│   │           │                   └── converter/
│   │           │                       └── NacosServiceInstanceConverter.java
│   │           └── resources/
│   │               ├── application.yml
│   │               └── logback-spring.xml
│   ├── pig-quartz/
│   │   ├── Dockerfile
│   │   ├── SECURITY.md
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── daemon/
│   │           │                   └── quartz/
│   │           │                       ├── PigQuartzApplication.java
│   │           │                       ├── config/
│   │           │                       │   ├── AutowireCapableBeanJobFactory.java
│   │           │                       │   ├── PigInitQuartzJob.java
│   │           │                       │   ├── PigQuartzConfig.java
│   │           │                       │   ├── PigQuartzCustomizerConfig.java
│   │           │                       │   ├── PigQuartzFactory.java
│   │           │                       │   └── PigQuartzInvokeFactory.java
│   │           │                       ├── constants/
│   │           │                       │   ├── JobTypeQuartzEnum.java
│   │           │                       │   └── PigQuartzEnum.java
│   │           │                       ├── controller/
│   │           │                       │   ├── SysJobController.java
│   │           │                       │   └── SysJobLogController.java
│   │           │                       ├── entity/
│   │           │                       │   ├── SysJob.java
│   │           │                       │   └── SysJobLog.java
│   │           │                       ├── event/
│   │           │                       │   ├── SysJobEvent.java
│   │           │                       │   ├── SysJobListener.java
│   │           │                       │   ├── SysJobLogEvent.java
│   │           │                       │   └── SysJobLogListener.java
│   │           │                       ├── exception/
│   │           │                       │   └── TaskException.java
│   │           │                       ├── mapper/
│   │           │                       │   ├── SysJobLogMapper.java
│   │           │                       │   └── SysJobMapper.java
│   │           │                       ├── service/
│   │           │                       │   ├── SysJobLogService.java
│   │           │                       │   ├── SysJobService.java
│   │           │                       │   └── impl/
│   │           │                       │       ├── SysJobLogServiceImpl.java
│   │           │                       │       └── SysJobServiceImpl.java
│   │           │                       ├── task/
│   │           │                       │   ├── RestTaskDemo.java
│   │           │                       │   └── SpringBeanTaskDemo.java
│   │           │                       └── util/
│   │           │                           ├── ClassNameValidator.java
│   │           │                           ├── ITaskInvok.java
│   │           │                           ├── JarTaskInvok.java
│   │           │                           ├── JavaClassTaskInvok.java
│   │           │                           ├── RestTaskInvok.java
│   │           │                           ├── SpringBeanTaskInvok.java
│   │           │                           ├── TaskInvokFactory.java
│   │           │                           ├── TaskInvokUtil.java
│   │           │                           └── TaskUtil.java
│   │           └── resources/
│   │               ├── application.yml
│   │               ├── logback-spring.xml
│   │               └── quartz-config.yml
│   └── pom.xml
└── pom.xml

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
root = true

[*.{groovy,java,kt,xml}]
indent_style = tab
indent_size = 4
continuation_indent_size = 8


================================================
FILE: .gitee/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false # 不允许用户创建空白 Issue
contact_links:
  - name: 遇到问题先去看文档!谢谢! # 外部网站名称
    url: https://wiki.pig4cloud.com/ # 跳转的外部网站目标地址
    about: 文档可以解决你80%的疑惑 # 跳转外部网站的描述说明


================================================
FILE: .gitee/ISSUE_TEMPLATE/issue.yml
================================================
name: 问题咨询
description: "请尽可能详细的描述问题,提供足够的上下文,一分钟的描述不需要期望别人花半小时帮你排查"
body:
  - type: dropdown
    id: version
    attributes:
      label: PIG版本(提问先右上角 Star ♥️)
      options:
        - "不处理PIGX或其他魔改版本"
        - "3.9"
        - "3.8"
        - "3.7"
    validations:
      required: true
  - type: checkboxes
    validations:
      required: true
    attributes:
      label: 架构
      options:
        - label: 微服务架构
        - label: 单体架构
  - type: textarea
    id: desired-solution
    attributes:
      label: 问题描述,提供详细截图和报错
      description: 详细问题,提供相应截图和日志,一分钟的描述不需要期望别人花半小时帮你排查
    validations:
      required: true


================================================
FILE: .github/renovate.json
================================================
{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "baseBranches": [
    "jdk17-dev"
  ],
  "extends": [
    "config:recommended"
  ],
  "rangeStrategy": "bump",
  "packageRules": [
    {
      "matchPackagePatterns": [
        "^com.amazonaws:aws-java-sdk-s3$",
        "^tomcat$",
        "^io.springboot:knife4j-openapi3-ui$",
        "^com.alibaba:fastjson$",
        "^org.anyline:anyline.*$",
        "^org.apache.velocity:velocity-engine-core.*$"
      ],
      "enabled": false
    }
  ]
}


================================================
FILE: .github/workflows/github-release.yml
================================================
name: publish github release

on:
  workflow_dispatch:
    inputs:
      releaseversion:
        description: 'Release version'
        required: true
        default: '3.8.0'

jobs:
  publish-github-release:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Generate changelog
        id: changelog
        uses: metcalfc/changelog-generator@v4.5.0
        with:
          myToken: ${{ secrets.GH_TOKEN }}

      - name: Create GitHub Release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
        with:
          tag_name: ${{ github.event.inputs.releaseversion }}
          release_name: ${{ github.event.inputs.releaseversion }}
          body: |
            ### Things that changed in this release
            ${{ steps.changelog.outputs.changelog }}
          draft: false
          prerelease: ${{ contains(github.event.inputs.releaseversion, '-') }}


================================================
FILE: .github/workflows/image.yml
================================================
# This workflow will build a Java project with Maven
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven

name: Docker 镜像 构建

on:
  push:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        java-version: [ 17 ]
    steps:
      - uses: actions/checkout@v4
      - name: Set up JDK ${{ matrix.java-version }}
        uses: actions/setup-java@v4
        with:
          java-version: ${{ matrix.java-version }}
          distribution: 'zulu'

      - name: mvn clean install
        run: mvn clean install -Pcloud

      - name: Login to Docker Registry
        run: docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} registry.cn-hangzhou.aliyuncs.com

      - name: Build and push Docker images
        run: |
          docker compose build
          registry="registry.cn-hangzhou.aliyuncs.com/pigx/"
          for service in $(docker compose config --services); do
            if [ "$service" != "pig-redis" ]; then
              docker tag ${service}:latest ${registry}${service}:latest
              docker push ${registry}${service}:latest
            else
              echo "Skipping pig-redis service"
            fi
          done


================================================
FILE: .github/workflows/maven.yml
================================================
# This workflow will build a Java project with Maven
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven

name: maven 编译检查

on:
  push:
    branches: [ master,dev ]

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        java-version: [ 17,21,25 ]
    steps:
      - uses: actions/checkout@v4
      - name: Set up JDK ${{ matrix.java-version }}
        uses: actions/setup-java@v4
        with:
          java-version: ${{ matrix.java-version }}
          distribution: 'zulu'

      - name: mvn spring-javaformat:validate
        id: validate
        run: mvn spring-javaformat:validate -Dmaven.compiler.release=${{ matrix.java-version }}
        continue-on-error: true

      - name: Auto format code if validation fails
        if: steps.validate.outcome == 'failure'
        run: mvn spring-javaformat:apply -Dmaven.compiler.release=${{ matrix.java-version }}

      - name: Create Pull Request for formatting changes
        if: steps.validate.outcome == 'failure'
        uses: peter-evans/create-pull-request@v5
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          commit-message: 'Auto-format code with spring-javaformat'
          title: 'Auto-format: Fix code formatting issues'
          body: |
            This PR was automatically created because the spring-javaformat validation failed.
            
            The following changes have been applied:
            - Applied spring-javaformat:apply to fix formatting issues
            
            Please review and merge if the changes look correct.
          branch: auto-format-${{ github.run_number }}
          delete-branch: true

      - name: mvn clean install
        run: mvn clean install -Pboot -Dmaven.compiler.release=${{ matrix.java-version }}

      - name: mvn clean install
        run: mvn clean install -Dmaven.compiler.release=${{ matrix.java-version }}

      - name:  failure
        if: failure() && github.repository == 'pig-mesh/pig'
        uses: chf007/action-wechat-work@master
        env:
          WECHAT_WORK_BOT_WEBHOOK: ${{secrets.WECHAT_WORK_BOT_WEBHOOK}}
        with:
          msgtype: markdown
          content: |
            # 💤🤷‍♀️ failure 🙅‍♂️💣 [pig-mesh/pig](https://github.com/pig-mesh/pig)
            > Github Action: https://github.com/pig-mesh/pig failure
            > (⋟﹏⋞)   from github action message


================================================
FILE: .github/workflows/mirror.yml
================================================
name: 同步代码

on:
  push:
    branches: [ master,dev ]
  pull_request:
    branches: [ master,dev ]

jobs:
  gitee:
    runs-on: ubuntu-latest
    container:
      image: "centos:8"
    steps:
      - uses: wearerequired/git-mirror-action@master #同步至 gitee
        env:
          SSH_PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }}
        with:
          source-repo: "git@github.com:pig-mesh/pig.git"
          destination-repo: "git@gitee.com:log4j/pig.git"


================================================
FILE: .gitignore
================================================
### gradle ###
.gradle
/build/
!gradle/wrapper/gradle-wrapper.jar
.mvn/wrapper/maven-wrapper.jar

### STS ###
.settings/
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
bin/

### IntelliJ IDEA ###
!.idea/icon.png
.idea
*.iws
*.iml
*.ipr
rebel.xml

### NetBeans ###
nbproject/private/
build/
nbbuild/
nbdist/
.nb-gradle/

### maven ###
target/
*.war
*.ear
*.zip
*.tar
*.tar.gz
*.versionsBackup

### vscode ###
.vscode

### logs ###
/logs/
*.log

### temp ignore ###
*.cache
*.diff
*.patch
*.tmp
*.java~
*.properties~
*.xml~

### system ignore ###
.DS_Store
Thumbs.db
Servers
.metadata
.flattened-pom.xml


================================================
FILE: LICENSE
================================================

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: README.md
================================================
> **🚀 Spring Boot 4.0 版本来了**
>
> 分支 `boot4` 基于 Spring Boot 4.0 + Spring Cloud 2025.1 进行开发。

<p align="center">
 <img src="https://img.shields.io/badge/Pig-3.9-success.svg" alt="Build Status">
 <img src="https://img.shields.io/badge/Spring%20Cloud-2025-blue.svg" alt="Coverage Status">
 <img src="https://img.shields.io/badge/Spring%20Boot-3.5-blue.svg" alt="Downloads">
 <img src="https://img.shields.io/badge/Vue-3.5-blue.svg" alt="Downloads">
 <img src="https://img.shields.io/github/license/pig-mesh/pig"/>
 <img src="https://gitcode.com/pig-mesh/pig/star/badge.svg"/>
</p>

## 系统说明

- 基于 Spring Cloud 、Spring Boot、 OAuth2 的 RBAC **企业级快速开发平台**, 同时支持微服务架构和单体架构
- 提供 Spring Authorization Server 的生产级实践方案,支持多种安全授权模式
- 提供对常见容器化方案支持 Kubernetes、Rancher2 、KubeSphere、EDAS、SAE 支持

#### 使用文档

PIG 提供了详尽的部署文档 👉 [wiki.pig4cloud.com](https://wiki.pig4cloud.com),涵盖开发环境配置、服务端启动、前端运行等关键步骤。

重要的事情说三遍:

- 🔥 [ 配套文档 wiki.pig4cloud.com](https://wiki.pig4cloud.com)
- 🔥 [ 配套文档 wiki.pig4cloud.com](https://wiki.pig4cloud.com)
- 🔥 [ 配套文档 wiki.pig4cloud.com](https://wiki.pig4cloud.com)

#### 其他产品

- 👉🏻 [PIGX 在线体验](http://home.pig4cloud.com:38081)

- 👉🏻 [自研BPMN工作流引擎](http://home.pig4cloud.com:38082)

- 👉🏻 [大模型 RAG 知识库](http://home.pig4cloud.com:38083)

## 微信群 [禁广告]

<img src='https://minio.pigx.vip/oss/202412/1735262426.png' alt='1735262426'/>

## 快速开始

#### Docker 快速体验

```shell
# 可用内存大于4G
curl -o docker-compose.yaml https://try.pig4cloud.com
# 等待5分钟
docker compose up
```

### 核心依赖

| 依赖                         | 版本     |
|-----------------------------|--------|
| Spring Boot                 | 3.5.11 |
| Spring Cloud                | 2025   |
| Spring Cloud Alibaba        | 2025   |
| Spring Authorization Server | 1.5.2  |
| Mybatis Plus                | 3.5.15 |
| Vue                         | 3.5    |
| Element Plus                | 2.8    |

### 模块说明

```lua
pig-ui  -- https://gitee.com/log4j/pig-ui

pig
├── pig-boot -- 单体模式启动器[9999]
├── pig-auth -- 授权服务提供[3000]
└── pig-common -- 系统公共模块
     ├── pig-common-bom -- 全局依赖管理控制
     ├── pig-common-core -- 公共工具类核心包
     ├── pig-common-datasource -- 动态数据源包
     ├── pig-common-log -- 日志服务
     ├── pig-common-oss -- 文件上传工具类
     ├── pig-common-mybatis -- mybatis 扩展封装
     ├── pig-common-seata -- 分布式事务
     ├── pig-common-websocket -- websocket 封装
     ├── pig-common-security -- 安全工具类
     ├── pig-common-swagger -- 接口文档
     ├── pig-common-feign -- feign 扩展封装
     └── pig-common-xss -- xss 安全封装
├── pig-register -- Nacos Server[8848]
├── pig-gateway -- Spring Cloud Gateway网关[9999]
└── pig-upms -- 通用用户权限管理模块
     └── pig-upms-api -- 通用用户权限管理系统公共api模块
     └── pig-upms-biz -- 通用用户权限管理系统业务处理模块[4000]
└── pig-visual
     └── pig-monitor -- 服务监控 [5001]
     ├── pig-codegen -- 图形化代码生成 [5002]
     └── pig-quartz -- 定时任务管理台 [5007]
```

## 免费公开课

<table>
  <tr>
    <td><a href="https://www.bilibili.com/video/av45084065" target="_blank"><img src="https://foruda.gitee.com/images/1731647304254897555/88a9c2fa_441246.jpeg"></a></td>
    <td><a href="https://www.bilibili.com/video/av77344954" target="_blank"><img src="https://foruda.gitee.com/images/1731647324953921510/39689640_441246.jpeg"></a></td>
  </tr>
    <tr>
    <td><a href="https://www.bilibili.com/video/BV1J5411476V" target="_blank"><img src="https://foruda.gitee.com/images/1731647357502030768/7f31f392_441246.jpeg"></a></td>
    <td><a href="https://www.bilibili.com/video/BV14p4y197K5" target="_blank"><img src="https://foruda.gitee.com/images/1731647375444479120/2b8fd494_441246.jpeg"></a></td>
  </tr>
</table>

## 开源共建

### 开源协议

pig 开源软件遵循 [Apache 2.0 协议](https://www.apache.org/licenses/LICENSE-2.0.html)。
允许商业使用,但务必保留类作者、Copyright 信息。

![](https://foruda.gitee.com/images/1731647419204307063/91217172_441246.jpeg)

### 其他说明

1. 欢迎提交 [PR](https://dwz.cn/2KURd5Vf),注意对应提交对应 `dev` 分支
   代码规范 [spring-javaformat](https://github.com/spring-io/spring-javaformat)

   <details>
    <summary>代码规范说明</summary>

    1. 由于 <a href="https://github.com/spring-io/spring-javaformat" target="_blank">spring-javaformat</a>
       强制所有代码按照指定格式排版,未按此要求提交的代码将不能通过合并(打包)
    2. 如果使用 IntelliJ IDEA
       开发,请安装自动格式化软件 <a href="https://repo1.maven.org/maven2/io/spring/javaformat/spring-javaformat-intellij-idea-plugin/" target="_blank">
       spring-javaformat-intellij-idea-plugin</a>
    3. 其他开发工具,请参考 <a href="https://github.com/spring-io/spring-javaformat" target="_blank">
       spring-javaformat</a>
       说明,或`提交代码前`在项目根目录运行下列命令(需要开发者电脑支持`mvn`命令)进行代码格式化
       ```
       mvn spring-javaformat:apply
       ```
   </details>

2. 欢迎提交 [issue](https://gitee.com/log4j/pig/issues),请写清楚遇到问题的原因、开发环境、复显步骤。


================================================
FILE: db/Dockerfile
================================================
FROM registry.cn-hangzhou.aliyuncs.com/dockerhub_mirror/mysql-server:8.0.32

MAINTAINER lengleng(wangiegie@gmail.com)

ENV TZ=Asia/Shanghai

RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

COPY ./pig.sql /docker-entrypoint-initdb.d

COPY ./pig_config.sql /docker-entrypoint-initdb.d

EXPOSE 3306


================================================
FILE: db/pig.sql
================================================
DROP DATABASE IF EXISTS `pig`;

CREATE DATABASE  `pig` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

USE `pig`;


-- ----------------------------
-- Table structure for sys_dept
-- ----------------------------
DROP TABLE IF EXISTS `sys_dept`;
CREATE TABLE `sys_dept` (
  `dept_id` bigint NOT NULL COMMENT '部门ID',
  `name` varchar(50)  DEFAULT NULL COMMENT '部门名称',
  `sort_order` int NOT NULL DEFAULT '0' COMMENT '排序',
  `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(64) DEFAULT NULL COMMENT '修改人',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  `del_flag` char(1)  DEFAULT '0' COMMENT '删除标志',
  `parent_id` bigint DEFAULT NULL COMMENT '父级部门ID',
  PRIMARY KEY (`dept_id`) USING BTREE
) ENGINE=InnoDB  COMMENT='部门管理';

-- ----------------------------
-- Records of sys_dept
-- ----------------------------
BEGIN;
INSERT INTO `sys_dept` VALUES (1, '总裁办', 1, 'admin', 'admin', '2023-04-03 13:04:47', '2023-04-03 13:07:49', '0', 0);
INSERT INTO `sys_dept` VALUES (2, '技术部', 2, 'admin', 'admin', '2023-04-03 13:04:47', '2023-04-03 13:04:47', '0', 1);
INSERT INTO `sys_dept` VALUES (3, '市场部', 3, 'admin', 'admin', '2023-04-03 13:04:47', '2023-04-03 13:04:47', '0', 1);
INSERT INTO `sys_dept` VALUES (4, '销售部', 4, 'admin', 'admin', '2023-04-03 13:04:47', '2023-04-03 13:04:47', '0', 1);
INSERT INTO `sys_dept` VALUES (5, '财务部', 5, 'admin', 'admin', '2023-04-03 13:04:47', '2023-04-03 13:04:47', '0', 1);
INSERT INTO `sys_dept` VALUES (6, '人事行政部', 6, 'admin', 'admin', '2023-04-03 13:04:47', '2023-04-03 13:53:36', '1', 1);
INSERT INTO `sys_dept` VALUES (7, '研发部', 7, 'admin', 'admin', '2023-04-03 13:04:47', '2023-04-03 13:04:47', '0', 2);
INSERT INTO `sys_dept` VALUES (8, 'UI设计部', 11, 'admin', 'admin', '2023-04-03 13:04:47', '2023-04-03 13:04:47', '0', 7);
INSERT INTO `sys_dept` VALUES (9, '产品部', 12, 'admin', 'admin', '2023-04-03 13:04:47', '2023-04-03 13:04:47', '0', 2);
INSERT INTO `sys_dept` VALUES (10, '渠道部', 13, 'admin', 'admin', '2023-04-03 13:04:47', '2023-04-03 13:04:47', '0', 3);
INSERT INTO `sys_dept` VALUES (11, '推广部', 14, 'admin', 'admin', '2023-04-03 13:04:47', '2023-04-03 13:04:47', '0', 3);
INSERT INTO `sys_dept` VALUES (12, '客服部', 15, 'admin', 'admin', '2023-04-03 13:04:47', '2023-04-03 13:04:47', '0', 4);
INSERT INTO `sys_dept` VALUES (13, '财务会计部', 16, 'admin', 'admin', '2023-04-03 13:04:47', '2023-04-03 13:04:47', '0', 5);
INSERT INTO `sys_dept` VALUES (14, '审计风控部', 17, 'admin', 'admin', '2023-04-03 13:04:47', '2023-04-03 14:06:57', '0', 5);
COMMIT;

-- ----------------------------
-- Table structure for sys_dict
-- ----------------------------
DROP TABLE IF EXISTS `sys_dict`;
CREATE TABLE `sys_dict` (
  `id` bigint NOT NULL COMMENT '编号',
  `dict_type` varchar(100)  DEFAULT NULL COMMENT '字典类型',
  `description` varchar(100)  DEFAULT NULL COMMENT '描述',
  `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(64) DEFAULT NULL COMMENT '修改人',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remarks` varchar(255)  DEFAULT NULL COMMENT '备注信息',
  `system_flag` char(1)  DEFAULT '0' COMMENT '系统标志',
  `del_flag` char(1)  DEFAULT '0' COMMENT '删除标志',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `sys_dict_del_flag` (`del_flag`) USING BTREE
) ENGINE=InnoDB  COMMENT='字典表';

-- ----------------------------
-- Records of sys_dict
-- ----------------------------
BEGIN;
INSERT INTO `sys_dict` VALUES (1, 'log_type', '日志类型', ' ', ' ', '2019-03-19 11:06:44', '2019-03-19 11:06:44', '异常、正常', '1', '0');
INSERT INTO `sys_dict` VALUES (2, 'social_type', '社交登录', ' ', ' ', '2019-03-19 11:09:44', '2019-03-19 11:09:44', '微信、QQ', '1', '0');
INSERT INTO `sys_dict` VALUES (3, 'job_type', '定时任务类型', ' ', ' ', '2019-03-19 11:22:21', '2019-03-19 11:22:21', 'quartz', '1', '0');
INSERT INTO `sys_dict` VALUES (4, 'job_status', '定时任务状态', ' ', ' ', '2019-03-19 11:24:57', '2019-03-19 11:24:57', '发布状态、运行状态', '1', '0');
INSERT INTO `sys_dict` VALUES (5, 'job_execute_status', '定时任务执行状态', ' ', ' ', '2019-03-19 11:26:15', '2019-03-19 11:26:15', '正常、异常', '1', '0');
INSERT INTO `sys_dict` VALUES (6, 'misfire_policy', '定时任务错失执行策略', ' ', ' ', '2019-03-19 11:27:19', '2019-03-19 11:27:19', '周期', '1', '0');
INSERT INTO `sys_dict` VALUES (7, 'gender', '性别', ' ', ' ', '2019-03-27 13:44:06', '2019-03-27 13:44:06', '微信用户性别', '1', '0');
INSERT INTO `sys_dict` VALUES (8, 'subscribe', '订阅状态', ' ', ' ', '2019-03-27 13:48:33', '2019-03-27 13:48:33', '公众号订阅状态', '1', '0');
INSERT INTO `sys_dict` VALUES (9, 'response_type', '回复', ' ', ' ', '2019-03-28 21:29:21', '2019-03-28 21:29:21', '微信消息是否已回复', '1', '0');
INSERT INTO `sys_dict` VALUES (10, 'param_type', '参数配置', ' ', ' ', '2019-04-29 18:20:47', '2019-04-29 18:20:47', '检索、原文、报表、安全、文档、消息、其他', '1', '0');
INSERT INTO `sys_dict` VALUES (11, 'status_type', '租户状态', ' ', ' ', '2019-05-15 16:31:08', '2019-05-15 16:31:08', '租户状态', '1', '0');
INSERT INTO `sys_dict` VALUES (12, 'dict_type', '字典类型', ' ', ' ', '2019-05-16 14:16:20', '2019-05-16 14:20:16', '系统类不能修改', '1', '0');
INSERT INTO `sys_dict` VALUES (13, 'channel_type', '支付类型', ' ', ' ', '2019-05-16 14:16:20', '2019-05-16 14:20:16', '系统类不能修改', '1', '0');
INSERT INTO `sys_dict` VALUES (14, 'grant_types', '授权类型', ' ', ' ', '2019-08-13 07:34:10', '2019-08-13 07:34:10', NULL, '1', '0');
INSERT INTO `sys_dict` VALUES (15, 'style_type', '前端风格', ' ', ' ', '2020-02-07 03:49:28', '2020-02-07 03:50:40', '0-Avue 1-element', '1', '0');
INSERT INTO `sys_dict` VALUES (16, 'captcha_flag_types', '验证码开关', ' ', ' ', '2020-11-18 06:53:25', '2020-11-18 06:53:25', '是否校验验证码', '1', '0');
INSERT INTO `sys_dict` VALUES (17, 'enc_flag_types', '前端密码加密', ' ', ' ', '2020-11-18 06:54:44', '2020-11-18 06:54:44', '前端密码是否加密传输', '1', '0');
INSERT INTO `sys_dict` VALUES (18, 'lock_flag', '用户状态', 'admin', ' ', '2023-02-01 16:55:31', NULL, NULL, '1', '0');
INSERT INTO `sys_dict` VALUES (19, 'ds_config_type', '数据连接类型', 'admin', ' ', '2023-02-06 18:36:59', NULL, NULL, '1', '0');
INSERT INTO `sys_dict` VALUES (20, 'common_status', '通用状态', 'admin', ' ', '2023-02-09 11:02:08', NULL, NULL, '1', '0');
INSERT INTO `sys_dict` VALUES (21, 'app_social_type', 'app社交登录', 'admin', ' ', '2023-02-10 11:11:06', NULL, 'app社交登录', '1', '0');
INSERT INTO `sys_dict` VALUES (22, 'yes_no_type', '是否', 'admin', ' ', '2023-02-20 23:25:04', NULL, NULL, '1', '0');
INSERT INTO `sys_dict` VALUES (23, 'repType', '微信消息类型', 'admin', ' ', '2023-02-24 15:08:25', NULL, NULL, '0', '0');
INSERT INTO `sys_dict` VALUES (24, 'leave_status', '请假状态', 'admin', ' ', '2023-03-02 22:50:15', NULL, NULL, '0', '0');
INSERT INTO `sys_dict` VALUES (25, 'schedule_type', '日程类型', 'admin', ' ', '2023-03-06 14:49:18', NULL, NULL, '0', '0');
INSERT INTO `sys_dict` VALUES (26, 'schedule_status', '日程状态', 'admin', ' ', '2023-03-06 14:52:57', NULL, NULL, '0', '0');
INSERT INTO `sys_dict` VALUES (27, 'ds_type', '代码生成器支持的数据库类型', 'admin', ' ', '2023-03-12 09:57:59', NULL, NULL, '1', '0');
COMMIT;

-- ----------------------------
-- Table structure for sys_dict_item
-- ----------------------------
DROP TABLE IF EXISTS `sys_dict_item`;
CREATE TABLE `sys_dict_item` (
  `id` bigint NOT NULL COMMENT '编号',
  `dict_id` bigint NOT NULL COMMENT '字典ID',
  `item_value` varchar(100)  DEFAULT NULL COMMENT '字典项值',
  `label` varchar(100)  DEFAULT NULL COMMENT '字典项名称',
  `dict_type` varchar(100)  DEFAULT NULL COMMENT '字典类型',
  `description` varchar(100)  DEFAULT NULL COMMENT '字典项描述',
  `sort_order` int NOT NULL DEFAULT '0' COMMENT '排序(升序)',
  `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(64) DEFAULT NULL COMMENT '修改人',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remarks` varchar(255)  DEFAULT NULL COMMENT '备注信息',
  `del_flag` char(1)  DEFAULT '0' COMMENT '删除标志',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `sys_dict_value` (`item_value`) USING BTREE,
  KEY `sys_dict_label` (`label`) USING BTREE,
  KEY `sys_dict_item_del_flag` (`del_flag`) USING BTREE
) ENGINE=InnoDB  COMMENT='字典项';

-- ----------------------------
-- Records of sys_dict_item
-- ----------------------------
BEGIN;
INSERT INTO `sys_dict_item` VALUES (1, 1, '9', '异常', 'log_type', '日志异常', 1, ' ', ' ', '2019-03-19 11:08:59', '2019-03-25 12:49:13', '', '0');
INSERT INTO `sys_dict_item` VALUES (2, 1, '0', '正常', 'log_type', '日志正常', 0, ' ', ' ', '2019-03-19 11:09:17', '2019-03-25 12:49:18', '', '0');
INSERT INTO `sys_dict_item` VALUES (3, 2, 'WX', '微信', 'social_type', '微信登录', 0, ' ', ' ', '2019-03-19 11:10:02', '2019-03-25 12:49:36', '', '0');
INSERT INTO `sys_dict_item` VALUES (4, 2, 'QQ', 'QQ', 'social_type', 'QQ登录', 1, ' ', ' ', '2019-03-19 11:10:14', '2019-03-25 12:49:36', '', '0');
INSERT INTO `sys_dict_item` VALUES (5, 3, '1', 'java类', 'job_type', 'java类', 1, ' ', ' ', '2019-03-19 11:22:37', '2019-03-25 12:49:36', '', '0');
INSERT INTO `sys_dict_item` VALUES (6, 3, '2', 'spring bean', 'job_type', 'spring bean容器实例', 2, ' ', ' ', '2019-03-19 11:23:05', '2019-03-25 12:49:36', '', '0');
INSERT INTO `sys_dict_item` VALUES (7, 3, '9', '其他', 'job_type', '其他类型', 9, ' ', ' ', '2019-03-19 11:23:31', '2019-03-25 12:49:36', '', '0');
INSERT INTO `sys_dict_item` VALUES (8, 3, '3', 'Rest 调用', 'job_type', 'Rest 调用', 3, ' ', ' ', '2019-03-19 11:23:57', '2019-03-25 12:49:36', '', '0');
INSERT INTO `sys_dict_item` VALUES (9, 3, '4', 'jar', 'job_type', 'jar类型', 4, ' ', ' ', '2019-03-19 11:24:20', '2019-03-25 12:49:36', '', '0');
INSERT INTO `sys_dict_item` VALUES (10, 4, '1', '未发布', 'job_status', '未发布', 1, ' ', ' ', '2019-03-19 11:25:18', '2019-03-25 12:49:36', '', '0');
INSERT INTO `sys_dict_item` VALUES (11, 4, '2', '运行中', 'job_status', '运行中', 2, ' ', ' ', '2019-03-19 11:25:31', '2019-03-25 12:49:36', '', '0');
INSERT INTO `sys_dict_item` VALUES (12, 4, '3', '暂停', 'job_status', '暂停', 3, ' ', ' ', '2019-03-19 11:25:42', '2019-03-25 12:49:36', '', '0');
INSERT INTO `sys_dict_item` VALUES (13, 5, '0', '正常', 'job_execute_status', '正常', 0, ' ', ' ', '2019-03-19 11:26:27', '2019-03-25 12:49:36', '', '0');
INSERT INTO `sys_dict_item` VALUES (14, 5, '1', '异常', 'job_execute_status', '异常', 1, ' ', ' ', '2019-03-19 11:26:41', '2019-03-25 12:49:36', '', '0');
INSERT INTO `sys_dict_item` VALUES (15, 6, '1', '错失周期立即执行', 'misfire_policy', '错失周期立即执行', 1, ' ', ' ', '2019-03-19 11:27:45', '2019-03-25 12:49:36', '', '0');
INSERT INTO `sys_dict_item` VALUES (16, 6, '2', '错失周期执行一次', 'misfire_policy', '错失周期执行一次', 2, ' ', ' ', '2019-03-19 11:27:57', '2019-03-25 12:49:36', '', '0');
INSERT INTO `sys_dict_item` VALUES (17, 6, '3', '下周期执行', 'misfire_policy', '下周期执行', 3, ' ', ' ', '2019-03-19 11:28:08', '2019-03-25 12:49:36', '', '0');
INSERT INTO `sys_dict_item` VALUES (18, 7, '1', '男', 'gender', '微信-男', 0, ' ', ' ', '2019-03-27 13:45:13', '2019-03-27 13:45:13', '微信-男', '0');
INSERT INTO `sys_dict_item` VALUES (19, 7, '2', '女', 'gender', '女-微信', 1, ' ', ' ', '2019-03-27 13:45:34', '2019-03-27 13:45:34', '女-微信', '0');
INSERT INTO `sys_dict_item` VALUES (20, 7, '0', '未知', 'gender', 'x性别未知', 3, ' ', ' ', '2019-03-27 13:45:57', '2019-03-27 13:45:57', 'x性别未知', '0');
INSERT INTO `sys_dict_item` VALUES (21, 8, '0', '未关注', 'subscribe', '公众号-未关注', 0, ' ', ' ', '2019-03-27 13:49:07', '2019-03-27 13:49:07', '公众号-未关注', '0');
INSERT INTO `sys_dict_item` VALUES (22, 8, '1', '已关注', 'subscribe', '公众号-已关注', 1, ' ', ' ', '2019-03-27 13:49:26', '2019-03-27 13:49:26', '公众号-已关注', '0');
INSERT INTO `sys_dict_item` VALUES (23, 9, '0', '未回复', 'response_type', '微信消息-未回复', 0, ' ', ' ', '2019-03-28 21:29:47', '2019-03-28 21:29:47', '微信消息-未回复', '0');
INSERT INTO `sys_dict_item` VALUES (24, 9, '1', '已回复', 'response_type', '微信消息-已回复', 1, ' ', ' ', '2019-03-28 21:30:08', '2019-03-28 21:30:08', '微信消息-已回复', '0');
INSERT INTO `sys_dict_item` VALUES (25, 10, '1', '检索', 'param_type', '检索', 0, ' ', ' ', '2019-04-29 18:22:17', '2019-04-29 18:22:17', '检索', '0');
INSERT INTO `sys_dict_item` VALUES (26, 10, '2', '原文', 'param_type', '原文', 0, ' ', ' ', '2019-04-29 18:22:27', '2019-04-29 18:22:27', '原文', '0');
INSERT INTO `sys_dict_item` VALUES (27, 10, '3', '报表', 'param_type', '报表', 0, ' ', ' ', '2019-04-29 18:22:36', '2019-04-29 18:22:36', '报表', '0');
INSERT INTO `sys_dict_item` VALUES (28, 10, '4', '安全', 'param_type', '安全', 0, ' ', ' ', '2019-04-29 18:22:46', '2019-04-29 18:22:46', '安全', '0');
INSERT INTO `sys_dict_item` VALUES (29, 10, '5', '文档', 'param_type', '文档', 0, ' ', ' ', '2019-04-29 18:22:56', '2019-04-29 18:22:56', '文档', '0');
INSERT INTO `sys_dict_item` VALUES (30, 10, '6', '消息', 'param_type', '消息', 0, ' ', ' ', '2019-04-29 18:23:05', '2019-04-29 18:23:05', '消息', '0');
INSERT INTO `sys_dict_item` VALUES (31, 10, '9', '其他', 'param_type', '其他', 0, ' ', ' ', '2019-04-29 18:23:16', '2019-04-29 18:23:16', '其他', '0');
INSERT INTO `sys_dict_item` VALUES (32, 10, '0', '默认', 'param_type', '默认', 0, ' ', ' ', '2019-04-29 18:23:30', '2019-04-29 18:23:30', '默认', '0');
INSERT INTO `sys_dict_item` VALUES (33, 11, '0', '正常', 'status_type', '状态正常', 0, ' ', ' ', '2019-05-15 16:31:34', '2019-05-16 22:30:46', '状态正常', '0');
INSERT INTO `sys_dict_item` VALUES (34, 11, '9', '冻结', 'status_type', '状态冻结', 1, ' ', ' ', '2019-05-15 16:31:56', '2019-05-16 22:30:50', '状态冻结', '0');
INSERT INTO `sys_dict_item` VALUES (35, 12, '1', '系统类', 'dict_type', '系统类字典', 0, ' ', ' ', '2019-05-16 14:20:40', '2019-05-16 14:20:40', '不能修改删除', '0');
INSERT INTO `sys_dict_item` VALUES (36, 12, '0', '业务类', 'dict_type', '业务类字典', 0, ' ', ' ', '2019-05-16 14:20:59', '2019-05-16 14:20:59', '可以修改', '0');
INSERT INTO `sys_dict_item` VALUES (37, 2, 'GITEE', '码云', 'social_type', '码云', 2, ' ', ' ', '2019-06-28 09:59:12', '2019-06-28 09:59:12', '码云', '0');
INSERT INTO `sys_dict_item` VALUES (38, 2, 'OSC', '开源中国', 'social_type', '开源中国登录', 2, ' ', ' ', '2019-06-28 10:04:32', '2019-06-28 10:04:32', '', '0');
INSERT INTO `sys_dict_item` VALUES (39, 14, 'password', '密码模式', 'grant_types', '支持oauth密码模式', 0, ' ', ' ', '2019-08-13 07:35:28', '2019-08-13 07:35:28', NULL, '0');
INSERT INTO `sys_dict_item` VALUES (40, 14, 'authorization_code', '授权码模式', 'grant_types', 'oauth2 授权码模式', 1, ' ', ' ', '2019-08-13 07:36:07', '2019-08-13 07:36:07', NULL, '0');
INSERT INTO `sys_dict_item` VALUES (41, 14, 'client_credentials', '客户端模式', 'grant_types', 'oauth2 客户端模式', 2, ' ', ' ', '2019-08-13 07:36:30', '2019-08-13 07:36:30', NULL, '0');
INSERT INTO `sys_dict_item` VALUES (42, 14, 'refresh_token', '刷新模式', 'grant_types', 'oauth2 刷新token', 3, ' ', ' ', '2019-08-13 07:36:54', '2019-08-13 07:36:54', NULL, '0');
INSERT INTO `sys_dict_item` VALUES (43, 14, 'implicit', '简化模式', 'grant_types', 'oauth2 简化模式', 4, ' ', ' ', '2019-08-13 07:39:32', '2019-08-13 07:39:32', NULL, '0');
INSERT INTO `sys_dict_item` VALUES (44, 15, '0', 'Avue', 'style_type', 'Avue风格', 0, ' ', ' ', '2020-02-07 03:52:52', '2020-02-07 03:52:52', '', '0');
INSERT INTO `sys_dict_item` VALUES (45, 15, '1', 'element', 'style_type', 'element-ui', 1, ' ', ' ', '2020-02-07 03:53:12', '2020-02-07 03:53:12', '', '0');
INSERT INTO `sys_dict_item` VALUES (46, 16, '0', '关', 'captcha_flag_types', '不校验验证码', 0, ' ', ' ', '2020-11-18 06:53:58', '2020-11-18 06:53:58', '不校验验证码 -0', '0');
INSERT INTO `sys_dict_item` VALUES (47, 16, '1', '开', 'captcha_flag_types', '校验验证码', 1, ' ', ' ', '2020-11-18 06:54:15', '2020-11-18 06:54:15', '不校验验证码-1', '0');
INSERT INTO `sys_dict_item` VALUES (48, 17, '0', '否', 'enc_flag_types', '不加密', 0, ' ', ' ', '2020-11-18 06:55:31', '2020-11-18 06:55:31', '不加密-0', '0');
INSERT INTO `sys_dict_item` VALUES (49, 17, '1', '是', 'enc_flag_types', '加密', 1, ' ', ' ', '2020-11-18 06:55:51', '2020-11-18 06:55:51', '加密-1', '0');
INSERT INTO `sys_dict_item` VALUES (50, 13, 'MERGE_PAY', '聚合支付', 'channel_type', '聚合支付', 1, ' ', ' ', '2019-05-30 19:08:08', '2019-06-18 13:51:53', '聚合支付', '0');
INSERT INTO `sys_dict_item` VALUES (51, 2, 'CAS', 'CAS登录', 'social_type', 'CAS 单点登录系统', 3, ' ', ' ', '2022-02-18 13:56:25', '2022-02-18 13:56:28', NULL, '0');
INSERT INTO `sys_dict_item` VALUES (52, 2, 'DINGTALK', '钉钉', 'social_type', '钉钉', 3, ' ', ' ', '2022-02-18 13:56:25', '2022-02-18 13:56:28', NULL, '0');
INSERT INTO `sys_dict_item` VALUES (53, 2, 'WEIXIN_CP', '企业微信', 'social_type', '企业微信', 3, ' ', ' ', '2022-02-18 13:56:25', '2022-02-18 13:56:28', NULL, '0');
INSERT INTO `sys_dict_item` VALUES (54, 15, '2', 'APP', 'style_type', 'uview风格', 1, ' ', ' ', '2020-02-07 03:53:12', '2020-02-07 03:53:12', '', '0');
INSERT INTO `sys_dict_item` VALUES (55, 13, 'ALIPAY_WAP', '支付宝支付', 'channel_type', '支付宝支付', 1, ' ', ' ', '2019-05-30 19:08:08', '2019-06-18 13:51:53', '聚合支付', '0');
INSERT INTO `sys_dict_item` VALUES (56, 13, 'WEIXIN_MP', '微信支付', 'channel_type', '微信支付', 1, ' ', ' ', '2019-05-30 19:08:08', '2019-06-18 13:51:53', '聚合支付', '0');
INSERT INTO `sys_dict_item` VALUES (57, 14, 'mobile', 'mobile', 'grant_types', '移动端登录', 5, 'admin', ' ', '2023-01-29 17:21:42', NULL, NULL, '0');
INSERT INTO `sys_dict_item` VALUES (58, 18, '0', '有效', 'lock_flag', '有效', 0, 'admin', ' ', '2023-02-01 16:56:00', NULL, NULL, '0');
INSERT INTO `sys_dict_item` VALUES (59, 18, '9', '禁用', 'lock_flag', '禁用', 1, 'admin', ' ', '2023-02-01 16:56:09', NULL, NULL, '0');
INSERT INTO `sys_dict_item` VALUES (60, 15, '4', 'vue3', 'style_type', 'element-plus', 4, 'admin', ' ', '2023-02-06 13:52:43', NULL, NULL, '0');
INSERT INTO `sys_dict_item` VALUES (61, 19, '0', '主机', 'ds_config_type', '主机', 0, 'admin', ' ', '2023-02-06 18:37:23', NULL, NULL, '0');
INSERT INTO `sys_dict_item` VALUES (62, 19, '1', 'JDBC', 'ds_config_type', 'jdbc', 2, 'admin', ' ', '2023-02-06 18:37:34', NULL, NULL, '0');
INSERT INTO `sys_dict_item` VALUES (63, 20, 'false', '否', 'common_status', '否', 1, 'admin', ' ', '2023-02-09 11:02:39', NULL, NULL, '0');
INSERT INTO `sys_dict_item` VALUES (64, 20, 'true', '是', 'common_status', '是', 2, 'admin', ' ', '2023-02-09 11:02:52', NULL, NULL, '0');
INSERT INTO `sys_dict_item` VALUES (65, 21, 'MINI', '小程序', 'app_social_type', '小程序登录', 0, 'admin', ' ', '2023-02-10 11:11:41', NULL, NULL, '0');
INSERT INTO `sys_dict_item` VALUES (66, 22, '0', '否', 'yes_no_type', '0', 0, 'admin', ' ', '2023-02-20 23:35:23', NULL, '0', '0');
INSERT INTO `sys_dict_item` VALUES (67, 22, '1', '是', 'yes_no_type', '1', 0, 'admin', ' ', '2023-02-20 23:35:37', NULL, '1', '0');
INSERT INTO `sys_dict_item` VALUES (69, 23, 'text', '文本', 'repType', '文本', 0, 'admin', ' ', '2023-02-24 15:08:45', NULL, NULL, '0');
INSERT INTO `sys_dict_item` VALUES (70, 23, 'image', '图片', 'repType', '图片', 0, 'admin', ' ', '2023-02-24 15:08:56', NULL, NULL, '0');
INSERT INTO `sys_dict_item` VALUES (71, 23, 'voice', '语音', 'repType', '语音', 0, 'admin', ' ', '2023-02-24 15:09:08', NULL, NULL, '0');
INSERT INTO `sys_dict_item` VALUES (72, 23, 'video', '视频', 'repType', '视频', 0, 'admin', ' ', '2023-02-24 15:09:18', NULL, NULL, '0');
INSERT INTO `sys_dict_item` VALUES (73, 23, 'shortvideo', '小视频', 'repType', '小视频', 0, 'admin', ' ', '2023-02-24 15:09:29', NULL, NULL, '0');
INSERT INTO `sys_dict_item` VALUES (74, 23, 'location', '地理位置', 'repType', '地理位置', 0, 'admin', ' ', '2023-02-24 15:09:41', NULL, NULL, '0');
INSERT INTO `sys_dict_item` VALUES (75, 23, 'link', '链接消息', 'repType', '链接消息', 0, 'admin', ' ', '2023-02-24 15:09:49', NULL, NULL, '0');
INSERT INTO `sys_dict_item` VALUES (76, 23, 'event', '事件推送', 'repType', '事件推送', 0, 'admin', ' ', '2023-02-24 15:09:57', NULL, NULL, '0');
INSERT INTO `sys_dict_item` VALUES (77, 24, '0', '未提交', 'leave_status', '未提交', 0, 'admin', ' ', '2023-03-02 22:50:45', NULL, '未提交', '0');
INSERT INTO `sys_dict_item` VALUES (78, 24, '1', '审批中', 'leave_status', '审批中', 0, 'admin', ' ', '2023-03-02 22:50:57', NULL, '审批中', '0');
INSERT INTO `sys_dict_item` VALUES (79, 24, '2', '完成', 'leave_status', '完成', 0, 'admin', ' ', '2023-03-02 22:51:06', NULL, '完成', '0');
INSERT INTO `sys_dict_item` VALUES (80, 24, '9', '驳回', 'leave_status', '驳回', 0, 'admin', ' ', '2023-03-02 22:51:20', NULL, NULL, '0');
INSERT INTO `sys_dict_item` VALUES (81, 25, 'record', '日程记录', 'schedule_type', '日程记录', 0, 'admin', ' ', '2023-03-06 14:50:01', NULL, NULL, '0');
INSERT INTO `sys_dict_item` VALUES (82, 25, 'plan', '计划', 'schedule_type', '计划类型', 0, 'admin', ' ', '2023-03-06 14:50:29', NULL, NULL, '0');
INSERT INTO `sys_dict_item` VALUES (83, 26, '0', '计划中', 'schedule_status', '日程状态', 0, 'admin', ' ', '2023-03-06 14:53:18', NULL, NULL, '0');
INSERT INTO `sys_dict_item` VALUES (84, 26, '1', '已开始', 'schedule_status', '已开始', 0, 'admin', ' ', '2023-03-06 14:53:33', NULL, NULL, '0');
INSERT INTO `sys_dict_item` VALUES (85, 26, '3', '已结束', 'schedule_status', '已结束', 0, 'admin', ' ', '2023-03-06 14:53:41', NULL, NULL, '0');
INSERT INTO `sys_dict_item` VALUES (86, 27, 'mysql', 'mysql', 'ds_type', 'mysql', 0, 'admin', ' ', '2023-03-12 09:58:11', NULL, NULL, '0');
COMMIT;

-- ----------------------------
-- Table structure for sys_file
-- ----------------------------
DROP TABLE IF EXISTS `sys_file`;
CREATE TABLE `sys_file` (
  `id` bigint NOT NULL COMMENT '编号',
  `file_name` varchar(100)  DEFAULT NULL COMMENT '文件名',
  `bucket_name` varchar(200)  DEFAULT NULL COMMENT '文件存储桶名称',
  `original` varchar(100)  DEFAULT NULL COMMENT '原始文件名',
  `type` varchar(50)  DEFAULT NULL COMMENT '文件类型',
  `file_size` bigint DEFAULT NULL COMMENT '文件大小',
  `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(64) DEFAULT NULL COMMENT '修改人',
  `create_time` datetime DEFAULT NULL COMMENT '上传时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `del_flag` char(1)  DEFAULT '0' COMMENT '删除标志',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB  COMMENT='文件管理表';

-- ----------------------------
-- Records of sys_file
-- ----------------------------
BEGIN;
COMMIT;

-- ----------------------------
-- Table structure for sys_log
-- ----------------------------
DROP TABLE IF EXISTS `sys_log`;
CREATE TABLE `sys_log` (
  `id` bigint NOT NULL COMMENT '编号',
  `log_type` char(1)  DEFAULT '0' COMMENT '日志类型',
  `title` varchar(255)  DEFAULT NULL COMMENT '日志标题',
  `service_id` varchar(32)  DEFAULT NULL COMMENT '服务ID',
  `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(64) DEFAULT NULL COMMENT '修改人',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remote_addr` varchar(255)  DEFAULT NULL COMMENT '远程地址',
  `user_agent` varchar(1000)  DEFAULT NULL COMMENT '用户代理',
  `request_uri` varchar(255)  DEFAULT NULL COMMENT '请求URI',
  `method` varchar(10)  DEFAULT NULL COMMENT '请求方法',
  `params` text  COMMENT '请求参数',
  `time` bigint DEFAULT NULL COMMENT '执行时间',
  `del_flag` char(1)  DEFAULT '0' COMMENT '删除标志',
  `exception` text  COMMENT '异常信息',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `sys_log_request_uri` (`request_uri`) USING BTREE,
  KEY `sys_log_type` (`log_type`) USING BTREE,
  KEY `sys_log_create_date` (`create_time`) USING BTREE
) ENGINE=InnoDB  COMMENT='日志表';


-- ----------------------------
-- Table structure for sys_menu
-- ----------------------------
DROP TABLE IF EXISTS `sys_menu`;
CREATE TABLE `sys_menu` (
  `menu_id` bigint NOT NULL COMMENT '菜单ID',
  `name` varchar(32)  DEFAULT NULL COMMENT '菜单名称',
  `en_name` varchar(128)  DEFAULT NULL COMMENT '英文名称',
  `permission` varchar(32)  DEFAULT NULL COMMENT '权限标识',
  `path` varchar(128)  DEFAULT NULL COMMENT '路由路径',
  `parent_id` bigint DEFAULT NULL COMMENT '父菜单ID',
  `icon` varchar(64)  DEFAULT NULL COMMENT '菜单图标',
  `visible` char(1)  DEFAULT '1' COMMENT '是否可见,0隐藏,1显示',
  `sort_order` int DEFAULT '1' COMMENT '排序值,越小越靠前',
  `keep_alive` char(1)  DEFAULT '0' COMMENT '是否缓存,0否,1是',
  `embedded` char(1)  DEFAULT NULL COMMENT '是否内嵌,0否,1是',
  `menu_type` char(1)  DEFAULT '0' COMMENT '菜单类型,0目录,1菜单,2按钮',
  `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT NULL COMMENT '修改人',
  `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `del_flag` char(1)  DEFAULT '0' COMMENT '删除标志,0未删除,1已删除',
  PRIMARY KEY (`menu_id`) USING BTREE
) ENGINE=InnoDB  COMMENT='菜单权限表';

-- ----------------------------
-- Records of sys_menu
-- ----------------------------
BEGIN;
INSERT INTO `sys_menu` VALUES (1000, '权限管理', 'authorization', NULL, '/admin', -1, 'iconfont icon-icon-', '1', 0, '0', '0', '0', '', '2018-09-28 08:29:53', 'admin', '2023-03-12 22:32:52', '0');
INSERT INTO `sys_menu` VALUES (1100, '用户管理', 'user', NULL, '/admin/user/index', 1000, 'ele-User', '1', 1, '0', '0', '0', '', '2017-11-02 22:24:37', 'admin', '2023-07-05 10:28:22', '0');
INSERT INTO `sys_menu` VALUES (1101, '用户新增', NULL, 'sys_user_add', NULL, 1100, NULL, '1', 1, '0', NULL, '1', ' ', '2017-11-08 09:52:09', ' ', '2021-05-25 03:12:55', '0');
INSERT INTO `sys_menu` VALUES (1102, '用户修改', NULL, 'sys_user_edit', NULL, 1100, NULL, '1', 1, '0', NULL, '1', ' ', '2017-11-08 09:52:48', ' ', '2021-05-25 03:12:55', '0');
INSERT INTO `sys_menu` VALUES (1103, '用户删除', NULL, 'sys_user_del', NULL, 1100, NULL, '1', 1, '0', NULL, '1', ' ', '2017-11-08 09:54:01', ' ', '2021-05-25 03:12:55', '0');
INSERT INTO `sys_menu` VALUES (1104, '导入导出', NULL, 'sys_user_export', NULL, 1100, NULL, '1', 1, '0', NULL, '1', ' ', '2017-11-08 09:54:01', ' ', '2021-05-25 03:12:55', '0');
INSERT INTO `sys_menu` VALUES (1200, '菜单管理', 'menu', NULL, '/admin/menu/index', 1000, 'iconfont icon-caidan', '1', 2, '0', '0', '0', '', '2017-11-08 09:57:27', 'admin', '2023-07-05 10:28:17', '0');
INSERT INTO `sys_menu` VALUES (1201, '菜单新增', NULL, 'sys_menu_add', NULL, 1200, NULL, '1', 1, '0', NULL, '1', ' ', '2017-11-08 10:15:53', ' ', '2021-05-25 03:12:55', '0');
INSERT INTO `sys_menu` VALUES (1202, '菜单修改', NULL, 'sys_menu_edit', NULL, 1200, NULL, '1', 1, '0', NULL, '1', ' ', '2017-11-08 10:16:23', ' ', '2021-05-25 03:12:55', '0');
INSERT INTO `sys_menu` VALUES (1203, '菜单删除', NULL, 'sys_menu_del', NULL, 1200, NULL, '1', 1, '0', NULL, '1', ' ', '2017-11-08 10:16:43', ' ', '2021-05-25 03:12:55', '0');
INSERT INTO `sys_menu` VALUES (1300, '角色管理', 'role', NULL, '/admin/role/index', 1000, 'iconfont icon-gerenzhongxin', '1', 3, '0', NULL, '0', '', '2017-11-08 10:13:37', 'admin', '2023-07-05 10:28:13', '0');
INSERT INTO `sys_menu` VALUES (1301, '角色新增', NULL, 'sys_role_add', NULL, 1300, NULL, '1', 1, '0', NULL, '1', ' ', '2017-11-08 10:14:18', ' ', '2021-05-25 03:12:55', '0');
INSERT INTO `sys_menu` VALUES (1302, '角色修改', NULL, 'sys_role_edit', NULL, 1300, NULL, '1', 1, '0', NULL, '1', ' ', '2017-11-08 10:14:41', ' ', '2021-05-25 03:12:55', '0');
INSERT INTO `sys_menu` VALUES (1303, '角色删除', NULL, 'sys_role_del', NULL, 1300, NULL, '1', 1, '0', NULL, '1', ' ', '2017-11-08 10:14:59', ' ', '2021-05-25 03:12:55', '0');
INSERT INTO `sys_menu` VALUES (1304, '分配权限', NULL, 'sys_role_perm', NULL, 1300, NULL, '1', 1, '0', NULL, '1', ' ', '2018-04-20 07:22:55', ' ', '2021-05-25 03:12:55', '0');
INSERT INTO `sys_menu` VALUES (1305, '角色导入导出', NULL, 'sys_role_export', NULL, 1300, NULL, '1', 4, '0', NULL, '1', ' ', '2022-03-26 15:54:34', ' ', NULL, '0');
INSERT INTO `sys_menu` VALUES (1400, '部门管理', 'dept', NULL, '/admin/dept/index', 1000, 'iconfont icon-zidingyibuju', '1', 4, '0', NULL, '0', '', '2018-01-20 13:17:19', 'admin', '2023-07-05 10:28:07', '0');
INSERT INTO `sys_menu` VALUES (1401, '部门新增', NULL, 'sys_dept_add', NULL, 1400, NULL, '1', 1, '0', NULL, '1', ' ', '2018-01-20 14:56:16', ' ', '2021-05-25 03:12:55', '0');
INSERT INTO `sys_menu` VALUES (1402, '部门修改', NULL, 'sys_dept_edit', NULL, 1400, NULL, '1', 1, '0', NULL, '1', ' ', '2018-01-20 14:56:59', ' ', '2021-05-25 03:12:55', '0');
INSERT INTO `sys_menu` VALUES (1403, '部门删除', NULL, 'sys_dept_del', NULL, 1400, NULL, '1', 1, '0', NULL, '1', ' ', '2018-01-20 14:57:28', ' ', '2021-05-25 03:12:55', '0');
INSERT INTO `sys_menu` VALUES (1600, '岗位管理', 'post', NULL, '/admin/post/index', 1000, 'iconfont icon--chaifenhang', '1', 5, '1', '0', '0', '', '2022-03-26 13:04:14', 'admin', '2023-07-05 10:28:03', '0');
INSERT INTO `sys_menu` VALUES (1601, '岗位信息查看', NULL, 'sys_post_view', NULL, 1600, NULL, '1', 0, '0', NULL, '1', ' ', '2022-03-26 13:05:34', ' ', NULL, '0');
INSERT INTO `sys_menu` VALUES (1602, '岗位信息新增', NULL, 'sys_post_add', NULL, 1600, NULL, '1', 1, '0', NULL, '1', ' ', '2022-03-26 13:06:00', ' ', NULL, '0');
INSERT INTO `sys_menu` VALUES (1603, '岗位信息修改', NULL, 'sys_post_edit', NULL, 1600, NULL, '1', 2, '0', NULL, '1', ' ', '2022-03-26 13:06:31', ' ', '2022-03-26 13:06:38', '0');
INSERT INTO `sys_menu` VALUES (1604, '岗位信息删除', NULL, 'sys_post_del', NULL, 1600, NULL, '1', 3, '0', NULL, '1', ' ', '2022-03-26 13:06:31', ' ', NULL, '0');
INSERT INTO `sys_menu` VALUES (1605, '岗位导入导出', NULL, 'sys_post_export', NULL, 1600, NULL, '1', 4, '0', NULL, '1', ' ', '2022-03-26 13:06:31', ' ', '2022-03-26 06:32:02', '0');
INSERT INTO `sys_menu` VALUES (2000, '系统管理', 'system', NULL, '/system', -1, 'iconfont icon-quanjushezhi_o', '1', 1, '0', NULL, '0', '', '2017-11-07 20:56:00', 'admin', '2023-07-05 10:27:58', '0');
INSERT INTO `sys_menu` VALUES (2001, '日志管理', 'log', NULL, '/admin/logs', 2000, 'ele-Cloudy', '1', 0, '0', '0', '0', 'admin', '2023-03-02 12:26:42', 'admin', '2023-07-05 10:27:53', '0');
INSERT INTO `sys_menu` VALUES (2100, '操作日志', 'operation', NULL, '/admin/log/index', 2001, 'iconfont icon-jinridaiban', '1', 2, '0', '0', '0', '', '2017-11-20 14:06:22', 'admin', '2023-07-05 10:27:49', '0');
INSERT INTO `sys_menu` VALUES (2101, '日志删除', NULL, 'sys_log_del', NULL, 2100, NULL, '1', 1, '0', NULL, '1', ' ', '2017-11-20 20:37:37', ' ', '2021-05-25 03:12:55', '0');
INSERT INTO `sys_menu` VALUES (2102, '导入导出', NULL, 'sys_log_export', NULL, 2100, NULL, '1', 1, '0', NULL, '1', ' ', '2017-11-08 09:54:01', ' ', '2021-05-25 03:12:55', '0');
INSERT INTO `sys_menu` VALUES (2200, '字典管理', 'dict', NULL, '/admin/dict/index', 2000, 'iconfont icon-zhongduancanshuchaxun', '1', 6, '0', NULL, '0', '', '2017-11-29 11:30:52', 'admin', '2023-07-05 10:27:37', '0');
INSERT INTO `sys_menu` VALUES (2201, '字典删除', NULL, 'sys_dict_del', NULL, 2200, NULL, '1', 1, '0', NULL, '1', ' ', '2017-11-29 11:30:11', ' ', '2021-05-25 03:12:55', '0');
INSERT INTO `sys_menu` VALUES (2202, '字典新增', NULL, 'sys_dict_add', NULL, 2200, NULL, '1', 1, '0', NULL, '1', ' ', '2018-05-11 22:34:55', ' ', '2021-05-25 03:12:55', '0');
INSERT INTO `sys_menu` VALUES (2203, '字典修改', NULL, 'sys_dict_edit', NULL, 2200, NULL, '1', 1, '0', NULL, '1', ' ', '2018-05-11 22:36:03', ' ', '2021-05-25 03:12:55', '0');
INSERT INTO `sys_menu` VALUES (2210, '参数管理', 'parameter', NULL, '/admin/param/index', 2000, 'iconfont icon-wenducanshu-05', '1', 7, '1', NULL, '0', '', '2019-04-29 22:16:50', 'admin', '2023-02-16 15:24:51', '0');
INSERT INTO `sys_menu` VALUES (2211, '参数新增', NULL, 'sys_syspublicparam_add', NULL, 2210, NULL, '1', 1, '0', NULL, '1', ' ', '2019-04-29 22:17:36', ' ', '2020-03-24 08:57:11', '0');
INSERT INTO `sys_menu` VALUES (2212, '参数删除', NULL, 'sys_syspublicparam_del', NULL, 2210, NULL, '1', 1, '0', NULL, '1', ' ', '2019-04-29 22:17:55', ' ', '2020-03-24 08:57:12', '0');
INSERT INTO `sys_menu` VALUES (2213, '参数编辑', NULL, 'sys_syspublicparam_edit', NULL, 2210, NULL, '1', 1, '0', NULL, '1', ' ', '2019-04-29 22:18:14', ' ', '2020-03-24 08:57:13', '0');
INSERT INTO `sys_menu` VALUES (2300, '代码生成', 'code', NULL, '/gen/table/index', 9000, 'iconfont icon-zhongduancanshu', '1', 1, '0', '0', '0', '', '2018-01-20 13:17:19', 'admin', '2023-02-20 13:54:35', '0');
INSERT INTO `sys_menu` VALUES (2400, '终端管理', 'client', NULL, '/admin/client/index', 2000, 'iconfont icon-gongju', '1', 9, '1', NULL, '0', '', '2018-01-20 13:17:19', 'admin', '2023-02-16 15:25:28', '0');
INSERT INTO `sys_menu` VALUES (2401, '客户端新增', NULL, 'sys_client_add', NULL, 2400, '1', '1', 1, '0', NULL, '1', ' ', '2018-05-15 21:35:18', ' ', '2021-05-25 03:12:55', '0');
INSERT INTO `sys_menu` VALUES (2402, '客户端修改', NULL, 'sys_client_edit', NULL, 2400, NULL, '1', 1, '0', NULL, '1', ' ', '2018-05-15 21:37:06', ' ', '2021-05-25 03:12:55', '0');
INSERT INTO `sys_menu` VALUES (2403, '客户端删除', NULL, 'sys_client_del', NULL, 2400, NULL, '1', 1, '0', NULL, '1', ' ', '2018-05-15 21:39:16', ' ', '2021-05-25 03:12:55', '0');
INSERT INTO `sys_menu` VALUES (2600, '令牌管理', 'token', NULL, '/admin/token/index', 2000, 'ele-Key', '1', 11, '0', NULL, '0', '', '2018-09-04 05:58:41', 'admin', '2023-02-16 15:28:28', '0');
INSERT INTO `sys_menu` VALUES (2601, '令牌删除', NULL, 'sys_token_del', NULL, 2600, NULL, '1', 1, '0', NULL, '1', ' ', '2018-09-04 05:59:50', ' ', '2020-03-24 08:57:24', '0');
INSERT INTO `sys_menu` VALUES (2800, 'Quartz管理', 'quartz', NULL, '/daemon/job-manage/index', 2000, 'ele-AlarmClock', '1', 8, '0', NULL, '0', '', '2018-01-20 13:17:19', 'admin', '2023-02-16 15:25:06', '0');
INSERT INTO `sys_menu` VALUES (2810, '任务新增', NULL, 'job_sys_job_add', NULL, 2800, '1', '1', 0, '0', NULL, '1', ' ', '2018-05-15 21:35:18', ' ', '2020-03-24 08:57:26', '0');
INSERT INTO `sys_menu` VALUES (2820, '任务修改', NULL, 'job_sys_job_edit', NULL, 2800, '1', '1', 0, '0', NULL, '1', ' ', '2018-05-15 21:35:18', ' ', '2020-03-24 08:57:27', '0');
INSERT INTO `sys_menu` VALUES (2830, '任务删除', NULL, 'job_sys_job_del', NULL, 2800, '1', '1', 0, '0', NULL, '1', ' ', '2018-05-15 21:35:18', ' ', '2020-03-24 08:57:28', '0');
INSERT INTO `sys_menu` VALUES (2840, '任务暂停', NULL, 'job_sys_job_shutdown_job', NULL, 2800, '1', '1', 0, '0', NULL, '1', ' ', '2018-05-15 21:35:18', ' ', '2020-03-24 08:57:28', '0');
INSERT INTO `sys_menu` VALUES (2850, '任务开始', NULL, 'job_sys_job_start_job', NULL, 2800, '1', '1', 0, '0', NULL, '1', ' ', '2018-05-15 21:35:18', ' ', '2020-03-24 08:57:29', '0');
INSERT INTO `sys_menu` VALUES (2860, '任务刷新', NULL, 'job_sys_job_refresh_job', NULL, 2800, '1', '1', 0, '0', NULL, '1', ' ', '2018-05-15 21:35:18', ' ', '2020-03-24 08:57:30', '0');
INSERT INTO `sys_menu` VALUES (2870, '执行任务', NULL, 'job_sys_job_run_job', NULL, 2800, '1', '1', 0, '0', NULL, '1', ' ', '2019-08-08 15:35:18', ' ', '2020-03-24 08:57:31', '0');
INSERT INTO `sys_menu` VALUES (2871, '导出', NULL, 'job_sys_job_export', NULL, 2800, NULL, '1', 0, '0', '0', '1', 'admin', '2023-03-06 15:26:13', ' ', NULL, '0');
INSERT INTO `sys_menu` VALUES (2906, '文件管理', 'file', NULL, '/admin/file/index', 2000, 'ele-Files', '1', 6, '0', NULL, '0', '', '2019-06-25 12:44:46', 'admin', '2023-02-16 15:24:42', '0');
INSERT INTO `sys_menu` VALUES (2907, '删除文件', NULL, 'sys_file_del', NULL, 2906, NULL, '1', 1, '0', NULL, '1', ' ', '2019-06-25 13:41:41', ' ', '2020-03-24 08:58:42', '0');
INSERT INTO `sys_menu` VALUES (4000, '系统监控', 'monitor', NULL, '/daemon', -1, 'iconfont icon-shuju', '1', 3, '0', '0', '0', 'admin', '2023-02-06 20:20:47', 'admin', '2023-02-23 20:01:07', '0');
INSERT INTO `sys_menu` VALUES (4001, '文档扩展', 'doc', NULL, 'http://pig-gateway:9999/swagger-ui.html', 4000, 'iconfont icon-biaodan', '1', 2, '0', '1', '0', '', '2018-06-26 10:50:32', 'admin', '2023-02-23 20:01:29', '0');
INSERT INTO `sys_menu` VALUES (4002, '缓存监控', 'cache', NULL, '/ext/cache', 4000, 'iconfont icon-shuju', '1', 1, '0', '0', '0', 'admin', '2023-05-29 15:12:59', 'admin', '2023-06-06 11:58:41', '0');
INSERT INTO `sys_menu` VALUES (9000, '开发平台', 'develop', NULL, '/gen', -1, 'iconfont icon-shuxingtu', '1', 9, '0', '0', '0', '', '2019-08-12 09:35:16', 'admin', '2023-07-05 10:25:27', '0');
INSERT INTO `sys_menu` VALUES (9005, '数据源管理', 'datasource', NULL, '/gen/datasource/index', 9000, 'ele-Coin', '1', 0, '0', NULL, '0', '', '2019-08-12 09:42:11', 'admin', '2023-07-05 10:26:56', '0');
INSERT INTO `sys_menu` VALUES (9006, '表单设计', 'Form Design', NULL, '/gen/design/index', 9000, 'iconfont icon-AIshiyanshi', '0', 2, '0', '0', '0', '', '2019-08-16 10:08:56', 'admin', '2023-02-23 14:06:50', '0');
INSERT INTO `sys_menu` VALUES (9007, '生成页面', 'generation', NULL, '/gen/gener/index', 9000, 'iconfont icon-tongzhi4', '0', 0, '0', '0', '0', 'admin', '2023-02-20 09:58:23', 'admin', '2023-07-05 10:27:06', '0');
INSERT INTO `sys_menu` VALUES (9050, '元数据管理', 'metadata', NULL, '/gen/metadata', 9000, 'iconfont icon--chaifenhang', '1', 9, '0', '0', '0', '', '2018-07-27 01:13:21', 'admin', '2023-07-05 10:27:13', '0');
INSERT INTO `sys_menu` VALUES (9051, '模板管理', 'template', NULL, '/gen/template/index', 9050, 'iconfont icon--chaifenhang', '1', 5, '0', '0', '0', 'admin', '2023-02-21 11:22:54', 'admin', '2023-07-05 10:27:18', '0');
INSERT INTO `sys_menu` VALUES (9052, '查询', NULL, 'codegen_template_view', NULL, 9051, NULL, '0', 0, '0', '0', '1', 'admin', '2023-02-21 12:33:03', 'admin', '2023-02-21 13:50:54', '0');
INSERT INTO `sys_menu` VALUES (9053, '增加', NULL, 'codegen_template_add', NULL, 9051, NULL, '1', 0, '0', '0', '1', 'admin', '2023-02-21 13:34:10', 'admin', '2023-02-21 13:39:49', '0');
INSERT INTO `sys_menu` VALUES (9054, '新增', NULL, 'codegen_template_add', NULL, 9051, NULL, '0', 1, '0', '0', '1', 'admin', '2023-02-21 13:51:32', ' ', NULL, '0');
INSERT INTO `sys_menu` VALUES (9055, '导出', NULL, 'codegen_template_export', NULL, 9051, NULL, '0', 2, '0', '0', '1', 'admin', '2023-02-21 13:51:58', ' ', NULL, '0');
INSERT INTO `sys_menu` VALUES (9056, '删除', NULL, 'codegen_template_del', NULL, 9051, NULL, '0', 3, '0', '0', '1', 'admin', '2023-02-21 13:52:16', ' ', NULL, '0');
INSERT INTO `sys_menu` VALUES (9057, '编辑', NULL, 'codegen_template_edit', NULL, 9051, NULL, '0', 4, '0', '0', '1', 'admin', '2023-02-21 13:52:58', ' ', NULL, '0');
INSERT INTO `sys_menu` VALUES (9059, '模板分组', 'group', NULL, '/gen/group/index', 9050, 'iconfont icon-shuxingtu', '1', 6, '0', '0', '0', 'admin', '2023-02-21 15:06:50', 'admin', '2023-07-05 10:27:22', '0');
INSERT INTO `sys_menu` VALUES (9060, '查询', NULL, 'codegen_group_view', NULL, 9059, NULL, '0', 0, '0', '0', '1', 'admin', '2023-02-21 15:08:07', ' ', NULL, '0');
INSERT INTO `sys_menu` VALUES (9061, '新增', NULL, 'codegen_group_add', NULL, 9059, NULL, '0', 0, '0', '0', '1', 'admin', '2023-02-21 15:08:28', ' ', NULL, '0');
INSERT INTO `sys_menu` VALUES (9062, '修改', NULL, 'codegen_group_edit', NULL, 9059, NULL, '0', 0, '0', '0', '1', 'admin', '2023-02-21 15:08:43', ' ', NULL, '0');
INSERT INTO `sys_menu` VALUES (9063, '删除', NULL, 'codegen_group_del', NULL, 9059, NULL, '0', 0, '0', '0', '1', 'admin', '2023-02-21 15:09:02', ' ', NULL, '0');
INSERT INTO `sys_menu` VALUES (9064, '导出', NULL, 'codegen_group_export', NULL, 9059, NULL, '0', 0, '0', '0', '1', 'admin', '2023-02-21 15:09:22', ' ', NULL, '0');
INSERT INTO `sys_menu` VALUES (9065, '字段管理', 'field', NULL, '/gen/field-type/index', 9050, 'iconfont icon-fuwenben', '1', 0, '0', '0', '0', 'admin', '2023-02-23 20:05:09', 'admin', '2023-07-05 10:27:31', '0');
COMMIT;

-- ----------------------------
-- Table structure for sys_oauth_client_details
-- ----------------------------
DROP TABLE IF EXISTS `sys_oauth_client_details`;
CREATE TABLE `sys_oauth_client_details` (
  `id` bigint NOT NULL COMMENT 'ID',
  `client_id` varchar(32)  NOT NULL COMMENT '客户端ID',
  `resource_ids` varchar(256)  DEFAULT NULL COMMENT '资源ID集合',
  `client_secret` varchar(256)  DEFAULT NULL COMMENT '客户端秘钥',
  `scope` varchar(256)  DEFAULT NULL COMMENT '授权范围',
  `authorized_grant_types` varchar(256)  DEFAULT NULL COMMENT '授权类型',
  `web_server_redirect_uri` varchar(256)  DEFAULT NULL COMMENT '回调地址',
  `authorities` varchar(256)  DEFAULT NULL COMMENT '权限集合',
  `access_token_validity` int DEFAULT NULL COMMENT '访问令牌有效期(秒)',
  `refresh_token_validity` int DEFAULT NULL COMMENT '刷新令牌有效期(秒)',
  `additional_information` varchar(4096)  DEFAULT NULL COMMENT '附加信息',
  `autoapprove` varchar(256)  DEFAULT NULL COMMENT '自动授权',
  `del_flag` char(1)  DEFAULT '0' COMMENT '删除标记,0未删除,1已删除',
  `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(64) DEFAULT NULL COMMENT '修改人',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB  COMMENT='终端信息表';

-- ----------------------------
-- Records of sys_oauth_client_details
-- ----------------------------
BEGIN;
INSERT INTO `sys_oauth_client_details` VALUES (1, 'app', NULL, 'app', 'server', 'password,refresh_token,authorization_code,client_credentials,mobile', 'http://localhost:4040/sso1/login,http://localhost:4041/sso1/login,http://localhost:8080/renren-admin/sys/oauth2-sso,http://localhost:8090/sys/oauth2-sso', NULL, 43200, 2592001, '{\"enc_flag\":\"1\",\"captcha_flag\":\"1\",\"online_quantity\":\"1\"}', 'true', '0', '', 'admin', NULL, '2023-02-09 13:54:54');
INSERT INTO `sys_oauth_client_details` VALUES (2, 'daemon', NULL, 'daemon', 'server', 'password,refresh_token', NULL, NULL, 43200, 2592001, '{\"enc_flag\":\"1\",\"captcha_flag\":\"1\"}', 'true', '0', ' ', ' ', NULL, NULL);
INSERT INTO `sys_oauth_client_details` VALUES (3, 'gen', NULL, 'gen', 'server', 'password,refresh_token', NULL, NULL, 43200, 2592001, '{\"enc_flag\":\"1\",\"captcha_flag\":\"1\"}', 'true', '0', ' ', ' ', NULL, NULL);
INSERT INTO `sys_oauth_client_details` VALUES (4, 'mp', NULL, 'mp', 'server', 'password,refresh_token', NULL, NULL, 43200, 2592001, '{\"enc_flag\":\"1\",\"captcha_flag\":\"1\"}', 'true', '0', ' ', ' ', NULL, NULL);
INSERT INTO `sys_oauth_client_details` VALUES (5, 'pig', NULL, 'pig', 'server', 'password,refresh_token,authorization_code,client_credentials,mobile', 'http://localhost:4040/sso1/login,http://localhost:4041/sso1/login,http://localhost:8080/renren-admin/sys/oauth2-sso,http://localhost:8090/sys/oauth2-sso', NULL, 43200, 2592001, '{\"enc_flag\":\"1\",\"captcha_flag\":\"1\",\"online_quantity\":\"1\"}', 'false', '0', '', 'admin', NULL, '2023-03-08 11:32:41');
INSERT INTO `sys_oauth_client_details` VALUES (6, 'test', NULL, 'test', 'server', 'password,refresh_token', NULL, NULL, 43200, 2592001, '{ \"enc_flag\":\"1\",\"captcha_flag\":\"0\"}', 'true', '0', ' ', ' ', NULL, NULL);
INSERT INTO `sys_oauth_client_details` VALUES (7, 'social', NULL, 'social', 'server', 'password,refresh_token,mobile', NULL, NULL, 43200, 2592001, '{ \"enc_flag\":\"0\",\"captcha_flag\":\"0\"}', 'true', '0', ' ', ' ', NULL, NULL);
COMMIT;

-- ----------------------------
-- Table structure for sys_post
-- ----------------------------
DROP TABLE IF EXISTS `sys_post`;
CREATE TABLE `sys_post` (
  `post_id` bigint NOT NULL COMMENT '岗位ID',
  `post_code` varchar(64)  NOT NULL COMMENT '岗位编码',
  `post_name` varchar(50)  NOT NULL COMMENT '岗位名称',
  `post_sort` int NOT NULL COMMENT '岗位排序',
  `remark` varchar(500)  DEFAULT NULL COMMENT '岗位描述',
  `del_flag` char(1)  NOT NULL DEFAULT '0' COMMENT '是否删除  -1:已删除  0:正常',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
  PRIMARY KEY (`post_id`) USING BTREE
) ENGINE=InnoDB  COMMENT='岗位信息表';

-- ----------------------------
-- Records of sys_post
-- ----------------------------
BEGIN;
INSERT INTO `sys_post` VALUES (1, 'CTO', 'CTO', 0, 'CTOOO', '0', '2022-03-26 13:48:17', '', '2023-03-08 16:03:35', 'admin');
COMMIT;

-- ----------------------------
-- Table structure for sys_public_param
-- ----------------------------
DROP TABLE IF EXISTS `sys_public_param`;
CREATE TABLE `sys_public_param` (
  `public_id` bigint NOT NULL COMMENT '编号',
  `public_name` varchar(128)  DEFAULT NULL COMMENT '名称',
  `public_key` varchar(128)  DEFAULT NULL COMMENT '键',
  `public_value` varchar(128)  DEFAULT NULL COMMENT '值',
  `status` char(1)  DEFAULT '0' COMMENT '状态,0禁用,1启用',
  `validate_code` varchar(64)  DEFAULT NULL COMMENT '校验码',
  `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(64) DEFAULT NULL COMMENT '修改人',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `public_type` char(1)  DEFAULT '0' COMMENT '类型,0未知,1系统,2业务',
  `system_flag` char(1)  DEFAULT '0' COMMENT '系统标识,0非系统,1系统',
  `del_flag` char(1)  DEFAULT '0' COMMENT '删除标记,0未删除,1已删除',
  PRIMARY KEY (`public_id`) USING BTREE
) ENGINE=InnoDB  COMMENT='公共参数配置表';

-- ----------------------------
-- Records of sys_public_param
-- ----------------------------
BEGIN;
INSERT INTO `sys_public_param` VALUES (1, '租户默认来源', 'TENANT_DEFAULT_ID', '1', '0', '', ' ', ' ', '2020-05-12 04:03:46', '2020-06-20 08:56:30', '2', '0', '1');
INSERT INTO `sys_public_param` VALUES (2, '租户默认部门名称', 'TENANT_DEFAULT_DEPTNAME', '租户默认部门', '0', '', ' ', ' ', '2020-05-12 03:36:32', NULL, '2', '1', '0');
INSERT INTO `sys_public_param` VALUES (3, '租户默认账户', 'TENANT_DEFAULT_USERNAME', 'admin', '0', '', ' ', ' ', '2020-05-12 04:05:04', NULL, '2', '1', '0');
INSERT INTO `sys_public_param` VALUES (4, '租户默认密码', 'TENANT_DEFAULT_PASSWORD', '123456', '0', '', ' ', ' ', '2020-05-12 04:05:24', NULL, '2', '1', '0');
INSERT INTO `sys_public_param` VALUES (5, '租户默认角色编码', 'TENANT_DEFAULT_ROLECODE', 'ROLE_ADMIN', '0', '', ' ', ' ', '2020-05-12 04:05:57', NULL, '2', '1', '0');
INSERT INTO `sys_public_param` VALUES (6, '租户默认角色名称', 'TENANT_DEFAULT_ROLENAME', '租户默认角色', '0', '', ' ', ' ', '2020-05-12 04:06:19', NULL, '2', '1', '0');
INSERT INTO `sys_public_param` VALUES (7, '表前缀', 'GEN_TABLE_PREFIX', 'tb_', '0', '', ' ', ' ', '2020-05-12 04:23:04', NULL, '9', '1', '0');
INSERT INTO `sys_public_param` VALUES (8, '接口文档不显示的字段', 'GEN_HIDDEN_COLUMNS', 'tenant_id', '0', '', ' ', ' ', '2020-05-12 04:25:19', NULL, '9', '1', '0');
INSERT INTO `sys_public_param` VALUES (9, '注册用户默认角色', 'USER_DEFAULT_ROLE', 'GENERAL_USER', '0', NULL, ' ', ' ', '2022-03-31 16:52:24', NULL, '2', '1', '0');
COMMIT;

-- ----------------------------
-- Table structure for sys_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_role`;
CREATE TABLE `sys_role` (
  `role_id` bigint NOT NULL COMMENT '角色ID',
  `role_name` varchar(64)  DEFAULT NULL COMMENT '角色名称',
  `role_code` varchar(64)  DEFAULT NULL COMMENT '角色编码',
  `role_desc` varchar(255)  DEFAULT NULL COMMENT '角色描述',
  `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(64) DEFAULT NULL COMMENT '修改人',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `del_flag` char(1)  DEFAULT '0' COMMENT '删除标记,0未删除,1已删除',
  PRIMARY KEY (`role_id`) USING BTREE,
  KEY `role_idx1_role_code` (`role_code`) USING BTREE
) ENGINE=InnoDB  COMMENT='系统角色表';

-- ----------------------------
-- Records of sys_role
-- ----------------------------
BEGIN;
INSERT INTO `sys_role` VALUES (1, '管理员', 'ROLE_ADMIN', '管理员', '', 'admin', '2017-10-29 15:45:51', '2023-07-07 14:55:07', '0');
INSERT INTO `sys_role` VALUES (2, '普通用户', 'GENERAL_USER', '普通用户', '', 'admin', '2022-03-31 17:03:15', '2023-04-03 02:28:51', '0');
COMMIT;

-- ----------------------------
-- Table structure for sys_role_menu
-- ----------------------------
DROP TABLE IF EXISTS `sys_role_menu`;
CREATE TABLE `sys_role_menu` (
  `role_id` bigint NOT NULL COMMENT '角色ID',
  `menu_id` bigint NOT NULL COMMENT '菜单ID',
  PRIMARY KEY (`role_id`,`menu_id`) USING BTREE
) ENGINE=InnoDB  COMMENT='角色菜单表';

-- ----------------------------
-- Records of sys_role_menu
-- ----------------------------
BEGIN;
INSERT INTO `sys_role_menu` VALUES (1, 1000);
INSERT INTO `sys_role_menu` VALUES (1, 1100);
INSERT INTO `sys_role_menu` VALUES (1, 1101);
INSERT INTO `sys_role_menu` VALUES (1, 1102);
INSERT INTO `sys_role_menu` VALUES (1, 1103);
INSERT INTO `sys_role_menu` VALUES (1, 1104);
INSERT INTO `sys_role_menu` VALUES (1, 1200);
INSERT INTO `sys_role_menu` VALUES (1, 1201);
INSERT INTO `sys_role_menu` VALUES (1, 1202);
INSERT INTO `sys_role_menu` VALUES (1, 1203);
INSERT INTO `sys_role_menu` VALUES (1, 1300);
INSERT INTO `sys_role_menu` VALUES (1, 1301);
INSERT INTO `sys_role_menu` VALUES (1, 1302);
INSERT INTO `sys_role_menu` VALUES (1, 1303);
INSERT INTO `sys_role_menu` VALUES (1, 1304);
INSERT INTO `sys_role_menu` VALUES (1, 1305);
INSERT INTO `sys_role_menu` VALUES (1, 1400);
INSERT INTO `sys_role_menu` VALUES (1, 1401);
INSERT INTO `sys_role_menu` VALUES (1, 1402);
INSERT INTO `sys_role_menu` VALUES (1, 1403);
INSERT INTO `sys_role_menu` VALUES (1, 1600);
INSERT INTO `sys_role_menu` VALUES (1, 1601);
INSERT INTO `sys_role_menu` VALUES (1, 1602);
INSERT INTO `sys_role_menu` VALUES (1, 1603);
INSERT INTO `sys_role_menu` VALUES (1, 1604);
INSERT INTO `sys_role_menu` VALUES (1, 1605);
INSERT INTO `sys_role_menu` VALUES (1, 2000);
INSERT INTO `sys_role_menu` VALUES (1, 2001);
INSERT INTO `sys_role_menu` VALUES (1, 2100);
INSERT INTO `sys_role_menu` VALUES (1, 2101);
INSERT INTO `sys_role_menu` VALUES (1, 2102);
INSERT INTO `sys_role_menu` VALUES (1, 2200);
INSERT INTO `sys_role_menu` VALUES (1, 2201);
INSERT INTO `sys_role_menu` VALUES (1, 2202);
INSERT INTO `sys_role_menu` VALUES (1, 2203);
INSERT INTO `sys_role_menu` VALUES (1, 2210);
INSERT INTO `sys_role_menu` VALUES (1, 2211);
INSERT INTO `sys_role_menu` VALUES (1, 2212);
INSERT INTO `sys_role_menu` VALUES (1, 2213);
INSERT INTO `sys_role_menu` VALUES (1, 2300);
INSERT INTO `sys_role_menu` VALUES (1, 2400);
INSERT INTO `sys_role_menu` VALUES (1, 2401);
INSERT INTO `sys_role_menu` VALUES (1, 2402);
INSERT INTO `sys_role_menu` VALUES (1, 2403);
INSERT INTO `sys_role_menu` VALUES (1, 2600);
INSERT INTO `sys_role_menu` VALUES (1, 2601);
INSERT INTO `sys_role_menu` VALUES (1, 2800);
INSERT INTO `sys_role_menu` VALUES (1, 2810);
INSERT INTO `sys_role_menu` VALUES (1, 2820);
INSERT INTO `sys_role_menu` VALUES (1, 2830);
INSERT INTO `sys_role_menu` VALUES (1, 2840);
INSERT INTO `sys_role_menu` VALUES (1, 2850);
INSERT INTO `sys_role_menu` VALUES (1, 2860);
INSERT INTO `sys_role_menu` VALUES (1, 2870);
INSERT INTO `sys_role_menu` VALUES (1, 2871);
INSERT INTO `sys_role_menu` VALUES (1, 2906);
INSERT INTO `sys_role_menu` VALUES (1, 2907);
INSERT INTO `sys_role_menu` VALUES (1, 4000);
INSERT INTO `sys_role_menu` VALUES (1, 4001);
INSERT INTO `sys_role_menu` VALUES (1, 4002);
INSERT INTO `sys_role_menu` VALUES (1, 9000);
INSERT INTO `sys_role_menu` VALUES (1, 9005);
INSERT INTO `sys_role_menu` VALUES (1, 9006);
INSERT INTO `sys_role_menu` VALUES (1, 9007);
INSERT INTO `sys_role_menu` VALUES (1, 9050);
INSERT INTO `sys_role_menu` VALUES (1, 9051);
INSERT INTO `sys_role_menu` VALUES (1, 9052);
INSERT INTO `sys_role_menu` VALUES (1, 9053);
INSERT INTO `sys_role_menu` VALUES (1, 9054);
INSERT INTO `sys_role_menu` VALUES (1, 9055);
INSERT INTO `sys_role_menu` VALUES (1, 9056);
INSERT INTO `sys_role_menu` VALUES (1, 9057);
INSERT INTO `sys_role_menu` VALUES (1, 9059);
INSERT INTO `sys_role_menu` VALUES (1, 9060);
INSERT INTO `sys_role_menu` VALUES (1, 9061);
INSERT INTO `sys_role_menu` VALUES (1, 9062);
INSERT INTO `sys_role_menu` VALUES (1, 9063);
INSERT INTO `sys_role_menu` VALUES (1, 9064);
INSERT INTO `sys_role_menu` VALUES (1, 9065);
INSERT INTO `sys_role_menu` VALUES (2, 4000);
INSERT INTO `sys_role_menu` VALUES (2, 4001);
INSERT INTO `sys_role_menu` VALUES (2, 4002);
COMMIT;

-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
  `user_id` bigint NOT NULL COMMENT '用户ID',
  `username` varchar(64)  DEFAULT NULL COMMENT '用户名',
  `password` varchar(255)  DEFAULT NULL COMMENT '密码',
  `salt` varchar(255)  DEFAULT NULL COMMENT '盐值',
  `phone` varchar(20)  DEFAULT NULL COMMENT '电话号码',
  `avatar` varchar(255)  DEFAULT NULL COMMENT '头像',
  `nickname` varchar(64)  DEFAULT NULL COMMENT '昵称',
  `name` varchar(64)  DEFAULT NULL COMMENT '姓名',
  `email` varchar(128)  DEFAULT NULL COMMENT '邮箱地址',
  `dept_id` bigint DEFAULT NULL COMMENT '所属部门ID',
  `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(64) DEFAULT NULL COMMENT '修改人',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `lock_flag` char(1)  DEFAULT '0' COMMENT '锁定标记,0未锁定,9已锁定',
  `del_flag` char(1)  DEFAULT '0' COMMENT '删除标记,0未删除,1已删除',
  `wx_openid` varchar(32)  DEFAULT NULL COMMENT '微信登录openId',
  `mini_openid` varchar(32)  DEFAULT NULL COMMENT '小程序openId',
  `qq_openid` varchar(32)  DEFAULT NULL COMMENT 'QQ openId',
  `gitee_login` varchar(100)  DEFAULT NULL COMMENT '码云标识',
  `osc_id` varchar(100)  DEFAULT NULL COMMENT '开源中国标识',
  PRIMARY KEY (`user_id`) USING BTREE,
  KEY `user_wx_openid` (`wx_openid`) USING BTREE,
  KEY `user_qq_openid` (`qq_openid`) USING BTREE,
  KEY `user_idx1_username` (`username`) USING BTREE
) ENGINE=InnoDB  COMMENT='用户表';

-- ----------------------------
-- Records of sys_user
-- ----------------------------
BEGIN;
INSERT INTO `sys_user` VALUES (1, 'admin', '$2a$10$c/Ae0pRjJtMZg3BnvVpO.eIK6WYWVbKTzqgdy3afR7w.vd.xi3Mgy', '', '17034642999', '/admin/sys-file/s3demo/7ff4ca6b7bf446f3a5a13ac016dc21af.png', '管理员', '管理员', 'pig4cloud@qq.com', 4, ' ', 'admin', '2018-04-20 07:15:18', '2023-07-07 14:55:40', '0', '0', NULL, 'oBxPy5E-v82xWGsfzZVzkD3wEX64', NULL, 'log4j', NULL);
COMMIT;

-- ----------------------------
-- Table structure for sys_user_post
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_post`;
CREATE TABLE `sys_user_post` (
  `user_id` bigint NOT NULL COMMENT '用户ID',
  `post_id` bigint NOT NULL COMMENT '岗位ID',
  PRIMARY KEY (`user_id`,`post_id`) USING BTREE
) ENGINE=InnoDB  ROW_FORMAT=DYNAMIC COMMENT='用户与岗位关联表';

-- ----------------------------
-- Records of sys_user_post
-- ----------------------------
BEGIN;
INSERT INTO `sys_user_post` VALUES (1, 1);
COMMIT;

-- ----------------------------
-- Table structure for sys_user_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_role`;
CREATE TABLE `sys_user_role` (
  `user_id` bigint NOT NULL COMMENT '用户ID',
  `role_id` bigint NOT NULL COMMENT '角色ID',
  PRIMARY KEY (`user_id`,`role_id`) USING BTREE
) ENGINE=InnoDB  COMMENT='用户角色表';

-- ----------------------------
-- Records of sys_user_role
-- ----------------------------
BEGIN;
INSERT INTO `sys_user_role` VALUES (1, 1);
INSERT INTO `sys_user_role` VALUES (1676492190299299842, 2);
COMMIT;

-- ----------------------------
-- Table structure for sys_job
-- ----------------------------
DROP TABLE IF EXISTS `sys_job`;
CREATE TABLE `sys_job` (
                           `job_id` bigint NOT NULL COMMENT '任务id',
                           `job_name` varchar(64) NOT NULL COMMENT '任务名称',
                           `job_group` varchar(64) NOT NULL COMMENT '任务组名',
                           `job_order` char(1) DEFAULT '1' COMMENT '组内执行顺利,值越大执行优先级越高,最大值9,最小值1',
                           `job_type` char(1) NOT NULL DEFAULT '1' COMMENT '1、java类;2、spring bean名称;3、rest调用;4、jar调用;9其他',
                           `execute_path` varchar(500) DEFAULT NULL COMMENT 'job_type=3时,rest调用地址,仅支持rest get协议,需要增加String返回值,0成功,1失败;job_type=4时,jar路径;其它值为空',
                           `class_name` varchar(500) DEFAULT NULL COMMENT 'job_type=1时,类完整路径;job_type=2时,spring bean名称;其它值为空',
                           `method_name` varchar(500) DEFAULT NULL COMMENT '任务方法',
                           `method_params_value` varchar(2000) DEFAULT NULL COMMENT '参数值',
                           `cron_expression` varchar(255) DEFAULT NULL COMMENT 'cron执行表达式',
                           `misfire_policy` varchar(20) DEFAULT '3' COMMENT '错失执行策略(1错失周期立即执行 2错失周期执行一次 3下周期执行)',
                           `job_tenant_type` char(1) DEFAULT '1' COMMENT '1、多租户任务;2、非多租户任务',
                           `job_status` char(1) DEFAULT '0' COMMENT '状态(1、未发布;2、运行中;3、暂停;4、删除;)',
                           `job_execute_status` char(1) DEFAULT '0' COMMENT '状态(0正常 1异常)',
                           `create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
                           `create_time` datetime DEFAULT NULL COMMENT '创建时间',
                           `update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
                           `update_time` datetime DEFAULT NULL COMMENT '更新时间',
                           `start_time` timestamp NULL DEFAULT NULL COMMENT '初次执行时间',
                           `previous_time` timestamp NULL DEFAULT NULL COMMENT '上次执行时间',
                           `next_time` timestamp NULL DEFAULT NULL COMMENT '下次执行时间',
                           `remark` varchar(500) DEFAULT '' COMMENT '备注信息',
                           PRIMARY KEY (`job_id`) USING BTREE,
                           UNIQUE KEY `job_name_group_idx` (`job_name`,`job_group`) USING BTREE
) ENGINE=InnoDB  COMMENT='定时任务调度表';

-- ----------------------------
DROP TABLE IF EXISTS `sys_job_log`;
CREATE TABLE `sys_job_log` (
                               `job_log_id` bigint NOT NULL COMMENT '任务日志ID',
                               `job_id` bigint NOT NULL COMMENT '任务id',
                               `job_name` varchar(64)  DEFAULT NULL COMMENT '任务名称',
                               `job_group` varchar(64)  DEFAULT NULL COMMENT '任务组名',
                               `job_order` char(1)  DEFAULT NULL COMMENT '组内执行顺利,值越大执行优先级越高,最大值9,最小值1',
                               `job_type` char(1)  NOT NULL DEFAULT '1' COMMENT '1、java类;2、spring bean名称;3、rest调用;4、jar调用;9其他',
                               `execute_path` varchar(500)  DEFAULT NULL COMMENT 'job_type=3时,rest调用地址,仅支持post协议;job_type=4时,jar路径;其它值为空',
                               `class_name` varchar(500)  DEFAULT NULL COMMENT 'job_type=1时,类完整路径;job_type=2时,spring bean名称;其它值为空',
                               `method_name` varchar(500)  DEFAULT NULL COMMENT '任务方法',
                               `method_params_value` varchar(2000)  DEFAULT NULL COMMENT '参数值',
                               `cron_expression` varchar(255)  DEFAULT NULL COMMENT 'cron执行表达式',
                               `job_message` varchar(500)  DEFAULT NULL COMMENT '日志信息',
                               `job_log_status` char(1)  DEFAULT '0' COMMENT '执行状态(0正常 1失败)',
                               `execute_time` varchar(30)  DEFAULT NULL COMMENT '执行时间',
                               `exception_info` varchar(2000)  DEFAULT '' COMMENT '异常信息',
                               `create_time` datetime DEFAULT NULL COMMENT '创建时间',
                               PRIMARY KEY (`job_log_id`) USING BTREE
) ENGINE=InnoDB  COMMENT='定时任务执行日志表';


#
# Quartz seems to work best with the driver mm.mysql-2.0.7-bin.jar
#
# PLEASE consider using mysql with innodb tables to avoid locking issues
#
# In your Quartz properties file, you'll need to set
# org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
#

DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;
DROP TABLE IF EXISTS QRTZ_LOCKS;
DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;
DROP TABLE IF EXISTS QRTZ_CALENDARS;


CREATE TABLE QRTZ_JOB_DETAILS
  (
    SCHED_NAME VARCHAR(120) NOT NULL,
    JOB_NAME  VARCHAR(200) NOT NULL,
    JOB_GROUP VARCHAR(200) NOT NULL,
    DESCRIPTION VARCHAR(250) NULL,
    JOB_CLASS_NAME   VARCHAR(250) NOT NULL,
    IS_DURABLE VARCHAR(1) NOT NULL,
    IS_NONCONCURRENT VARCHAR(1) NOT NULL,
    IS_UPDATE_DATA VARCHAR(1) NOT NULL,
    REQUESTS_RECOVERY VARCHAR(1) NOT NULL,
    JOB_DATA BLOB NULL,
    PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
);

CREATE TABLE QRTZ_TRIGGERS
  (
    SCHED_NAME VARCHAR(120) NOT NULL,
    TRIGGER_NAME VARCHAR(200) NOT NULL,
    TRIGGER_GROUP VARCHAR(200) NOT NULL,
    JOB_NAME  VARCHAR(200) NOT NULL,
    JOB_GROUP VARCHAR(200) NOT NULL,
    DESCRIPTION VARCHAR(250) NULL,
    NEXT_FIRE_TIME BIGINT(13) NULL,
    PREV_FIRE_TIME BIGINT(13) NULL,
    PRIORITY INTEGER NULL,
    TRIGGER_STATE VARCHAR(16) NOT NULL,
    TRIGGER_TYPE VARCHAR(8) NOT NULL,
    START_TIME BIGINT(13) NOT NULL,
    END_TIME BIGINT(13) NULL,
    CALENDAR_NAME VARCHAR(200) NULL,
    MISFIRE_INSTR SMALLINT(2) NULL,
    JOB_DATA BLOB NULL,
    PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
    FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
        REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP)
);

CREATE TABLE QRTZ_SIMPLE_TRIGGERS
  (
    SCHED_NAME VARCHAR(120) NOT NULL,
    TRIGGER_NAME VARCHAR(200) NOT NULL,
    TRIGGER_GROUP VARCHAR(200) NOT NULL,
    REPEAT_COUNT BIGINT(7) NOT NULL,
    REPEAT_INTERVAL BIGINT(12) NOT NULL,
    TIMES_TRIGGERED BIGINT(10) NOT NULL,
    PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
    FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
        REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);

CREATE TABLE QRTZ_CRON_TRIGGERS
  (
    SCHED_NAME VARCHAR(120) NOT NULL,
    TRIGGER_NAME VARCHAR(200) NOT NULL,
    TRIGGER_GROUP VARCHAR(200) NOT NULL,
    CRON_EXPRESSION VARCHAR(200) NOT NULL,
    TIME_ZONE_ID VARCHAR(80),
    PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
    FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
        REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);

CREATE TABLE QRTZ_SIMPROP_TRIGGERS
  (
    SCHED_NAME VARCHAR(120) NOT NULL,
    TRIGGER_NAME VARCHAR(200) NOT NULL,
    TRIGGER_GROUP VARCHAR(200) NOT NULL,
    STR_PROP_1 VARCHAR(512) NULL,
    STR_PROP_2 VARCHAR(512) NULL,
    STR_PROP_3 VARCHAR(512) NULL,
    INT_PROP_1 INT NULL,
    INT_PROP_2 INT NULL,
    LONG_PROP_1 BIGINT NULL,
    LONG_PROP_2 BIGINT NULL,
    DEC_PROP_1 NUMERIC(13,4) NULL,
    DEC_PROP_2 NUMERIC(13,4) NULL,
    BOOL_PROP_1 VARCHAR(1) NULL,
    BOOL_PROP_2 VARCHAR(1) NULL,
    PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
    FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
    REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);

CREATE TABLE QRTZ_BLOB_TRIGGERS
  (
    SCHED_NAME VARCHAR(120) NOT NULL,
    TRIGGER_NAME VARCHAR(200) NOT NULL,
    TRIGGER_GROUP VARCHAR(200) NOT NULL,
    BLOB_DATA BLOB NULL,
    PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
    FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
        REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);

CREATE TABLE QRTZ_CALENDARS
  (
    SCHED_NAME VARCHAR(120) NOT NULL,
    CALENDAR_NAME  VARCHAR(200) NOT NULL,
    CALENDAR BLOB NOT NULL,
    PRIMARY KEY (SCHED_NAME,CALENDAR_NAME)
);

CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS
  (
    SCHED_NAME VARCHAR(120) NOT NULL,
    TRIGGER_GROUP  VARCHAR(200) NOT NULL,
    PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)
);

CREATE TABLE QRTZ_FIRED_TRIGGERS
  (
    SCHED_NAME VARCHAR(120) NOT NULL,
    ENTRY_ID VARCHAR(95) NOT NULL,
    TRIGGER_NAME VARCHAR(200) NOT NULL,
    TRIGGER_GROUP VARCHAR(200) NOT NULL,
    INSTANCE_NAME VARCHAR(200) NOT NULL,
    FIRED_TIME BIGINT(13) NOT NULL,
    SCHED_TIME BIGINT(13) NOT NULL,
    PRIORITY INTEGER NOT NULL,
    STATE VARCHAR(16) NOT NULL,
    JOB_NAME VARCHAR(200) NULL,
    JOB_GROUP VARCHAR(200) NULL,
    IS_NONCONCURRENT VARCHAR(1) NULL,
    REQUESTS_RECOVERY VARCHAR(1) NULL,
    PRIMARY KEY (SCHED_NAME,ENTRY_ID)
);

CREATE TABLE QRTZ_SCHEDULER_STATE
  (
    SCHED_NAME VARCHAR(120) NOT NULL,
    INSTANCE_NAME VARCHAR(200) NOT NULL,
    LAST_CHECKIN_TIME BIGINT(13) NOT NULL,
    CHECKIN_INTERVAL BIGINT(13) NOT NULL,
    PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)
);

CREATE TABLE QRTZ_LOCKS
  (
    SCHED_NAME VARCHAR(120) NOT NULL,
    LOCK_NAME  VARCHAR(40) NOT NULL,
    PRIMARY KEY (SCHED_NAME,LOCK_NAME)
);

-- ----------------------------
-- Table structure for gen_datasource_conf
-- ----------------------------
DROP TABLE IF EXISTS `gen_datasource_conf`;
CREATE TABLE `gen_datasource_conf` (
  `id` bigint NOT NULL COMMENT '主键',
  `name` varchar(64)  DEFAULT NULL COMMENT '别名',
  `url` varchar(255)  DEFAULT NULL COMMENT 'jdbcurl',
  `username` varchar(64)  DEFAULT NULL COMMENT '用户名',
  `password` varchar(64)  DEFAULT NULL COMMENT '密码',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新',
  `del_flag` char(1)  DEFAULT '0' COMMENT '删除标记',
  `ds_type` varchar(64)  DEFAULT NULL COMMENT '数据库类型',
  `conf_type` char(1)  DEFAULT NULL COMMENT '配置类型',
  `ds_name` varchar(64)  DEFAULT NULL COMMENT '数据库名称',
  `instance` varchar(64)  DEFAULT NULL COMMENT '实例',
  `port` int DEFAULT NULL COMMENT '端口',
  `host` varchar(128)  DEFAULT NULL COMMENT '主机',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB  COMMENT='数据源表';

-- ----------------------------
-- Records of gen_datasource_conf
-- ----------------------------
BEGIN;
COMMIT;

-- ----------------------------
-- Table structure for gen_field_type
-- ----------------------------
DROP TABLE IF EXISTS `gen_field_type`;
CREATE TABLE `gen_field_type` (
  `id` bigint NOT NULL COMMENT '主键',
  `column_type` varchar(200)  DEFAULT NULL COMMENT '字段类型',
  `attr_type` varchar(200)  DEFAULT NULL COMMENT '属性类型',
  `package_name` varchar(200)  DEFAULT NULL COMMENT '属性包名',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `create_by` varchar(64)  DEFAULT NULL COMMENT '创建人',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  `update_by` varchar(64)  DEFAULT NULL COMMENT '修改人',
  `del_flag` char(1)  DEFAULT '0' COMMENT '删除标记',
  PRIMARY KEY (`id`),
  UNIQUE KEY `column_type` (`column_type`)
) ENGINE=InnoDB AUTO_INCREMENT=1634915190321451010  COMMENT='字段类型管理';

-- ----------------------------
-- Records of gen_field_type
-- ----------------------------
BEGIN;
INSERT INTO `gen_field_type` VALUES (1, 'datetime', 'LocalDateTime', 'java.time.LocalDateTime', '2023-02-06 08:45:10', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (2, 'date', 'LocalDate', 'java.time.LocalDate', '2023-02-06 08:45:10', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (3, 'tinyint', 'Integer', NULL, '2023-02-06 08:45:11', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (4, 'smallint', 'Integer', NULL, '2023-02-06 08:45:11', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (5, 'mediumint', 'Integer', NULL, '2023-02-06 08:45:11', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (6, 'int', 'Integer', NULL, '2023-02-06 08:45:11', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (7, 'integer', 'Integer', NULL, '2023-02-06 08:45:11', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (8, 'bigint', 'Long', NULL, '2023-02-06 08:45:11', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (9, 'float', 'Float', NULL, '2023-02-06 08:45:11', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (10, 'double', 'Double', NULL, '2023-02-06 08:45:11', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (11, 'decimal', 'BigDecimal', 'java.math.BigDecimal', '2023-02-06 08:45:11', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (12, 'bit', 'Boolean', NULL, '2023-02-06 08:45:11', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (13, 'char', 'String', NULL, '2023-02-06 08:45:11', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (14, 'varchar', 'String', NULL, '2023-02-06 08:45:11', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (15, 'tinytext', 'String', NULL, '2023-02-06 08:45:11', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (16, 'text', 'String', NULL, '2023-02-06 08:45:11', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (17, 'mediumtext', 'String', NULL, '2023-02-06 08:45:11', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (18, 'longtext', 'String', NULL, '2023-02-06 08:45:11', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (19, 'timestamp', 'LocalDateTime', 'java.time.LocalDateTime', '2023-02-06 08:45:11', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (20, 'NUMBER', 'Integer', NULL, '2023-02-06 08:45:11', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (21, 'BINARY_INTEGER', 'Integer', NULL, '2023-02-06 08:45:12', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (22, 'BINARY_FLOAT', 'Float', NULL, '2023-02-06 08:45:12', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (23, 'BINARY_DOUBLE', 'Double', NULL, '2023-02-06 08:45:12', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (24, 'VARCHAR2', 'String', NULL, '2023-02-06 08:45:12', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (25, 'NVARCHAR', 'String', NULL, '2023-02-06 08:45:12', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (26, 'NVARCHAR2', 'String', NULL, '2023-02-06 08:45:12', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (27, 'CLOB', 'String', NULL, '2023-02-06 08:45:12', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (28, 'int8', 'Long', NULL, '2023-02-06 08:45:12', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (29, 'int4', 'Integer', NULL, '2023-02-06 08:45:12', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (30, 'int2', 'Integer', NULL, '2023-02-06 08:45:12', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (31, 'numeric', 'BigDecimal', 'java.math.BigDecimal', '2023-02-06 08:45:12', NULL, NULL, NULL, '0');
INSERT INTO `gen_field_type` VALUES (32, 'json', 'String', NULL, '2023-02-06 08:45:12', NULL, NULL, NULL, '0');
COMMIT;

-- ----------------------------
-- Table structure for gen_group
-- ----------------------------
DROP TABLE IF EXISTS `gen_group`;
CREATE TABLE `gen_group` (
  `id` bigint NOT NULL,
  `group_name` varchar(255)  DEFAULT NULL COMMENT '分组名称',
  `group_desc` varchar(255)  DEFAULT NULL COMMENT '分组描述',
  `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(64) DEFAULT NULL COMMENT '修改人',
  `create_time` datetime DEFAULT NULL COMMENT '创建人',
  `update_time` datetime DEFAULT NULL COMMENT '修改人',
  `del_flag` char(1)  DEFAULT '0' COMMENT '删除标记',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  COMMENT='模板分组';


-- ----------------------------
-- Table structure for gen_table
-- ----------------------------
DROP TABLE IF EXISTS `gen_table`;
CREATE TABLE `gen_table` (
  `id` bigint NOT NULL,
  `table_name` varchar(200)  DEFAULT NULL COMMENT '表名',
  `class_name` varchar(200)  DEFAULT NULL COMMENT '类名',
  `db_type` varchar(200)  DEFAULT NULL COMMENT '数据库类型',
  `table_comment` varchar(200)  DEFAULT NULL COMMENT '说明',
  `author` varchar(200)  DEFAULT NULL COMMENT '作者',
  `email` varchar(200)  DEFAULT NULL COMMENT '邮箱',
  `package_name` varchar(200)  DEFAULT NULL COMMENT '项目包名',
  `version` varchar(200)  DEFAULT NULL COMMENT '项目版本号',
  `i18n` char(1)  DEFAULT '0' COMMENT '是否生成带有i18n 0 不带有 1带有',
  `style`  bigint DEFAULT NULL COMMENT '代码风格',
  `child_table_name` varchar(200)  DEFAULT NULL COMMENT '子表名称',
  `main_field` varchar(200)  DEFAULT NULL COMMENT '主表关联键',
  `child_field` varchar(200)  DEFAULT NULL COMMENT '子表关联键',
  `generator_type` char(1)  DEFAULT '0' COMMENT '生成方式  0:zip压缩包   1:自定义目录',
  `backend_path` varchar(500)  DEFAULT NULL COMMENT '后端生成路径',
  `frontend_path` varchar(500)  DEFAULT NULL COMMENT '前端生成路径',
  `module_name` varchar(200)  DEFAULT NULL COMMENT '模块名',
  `function_name` varchar(200)  DEFAULT NULL COMMENT '功能名',
  `form_layout` tinyint DEFAULT NULL COMMENT '表单布局  1:一列   2:两列',
  `ds_name` varchar(200)  DEFAULT NULL COMMENT '数据源ID',
  `baseclass_id` bigint DEFAULT NULL COMMENT '基类ID',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `table_name` (`table_name`,`ds_name`) USING BTREE
) ENGINE=InnoDB  COMMENT='代码生成表';

-- ----------------------------
-- Records of gen_table
-- ----------------------------
BEGIN;
COMMIT;

-- ----------------------------
-- Table structure for gen_table_column
-- ----------------------------
DROP TABLE IF EXISTS `gen_table_column`;
CREATE TABLE `gen_table_column` (
  `id` bigint NOT NULL,
  `ds_name` varchar(200)  DEFAULT NULL COMMENT '数据源名称',
  `table_name` varchar(200)  DEFAULT NULL COMMENT '表名称',
  `field_name` varchar(200)  DEFAULT NULL COMMENT '字段名称',
  `field_type` varchar(200)  DEFAULT NULL COMMENT '字段类型',
  `field_comment` varchar(200)  DEFAULT NULL COMMENT '字段说明',
  `attr_name` varchar(200)  DEFAULT NULL COMMENT '属性名',
  `attr_type` varchar(200)  DEFAULT NULL COMMENT '属性类型',
  `package_name` varchar(200)  DEFAULT NULL COMMENT '属性包名',
  `sort` int DEFAULT NULL COMMENT '排序',
  `auto_fill` varchar(20)  DEFAULT NULL COMMENT '自动填充  DEFAULT、INSERT、UPDATE、INSERT_UPDATE',
  `primary_pk` char(1)  DEFAULT '0' COMMENT '主键 0:否  1:是',
  `base_field` char(1)  DEFAULT '0' COMMENT '基类字段 0:否  1:是',
  `form_item` char(1)  DEFAULT '0' COMMENT '表单项 0:否  1:是',
  `form_required` char(1)  DEFAULT '0' COMMENT '表单必填 0:否  1:是',
  `form_type` varchar(200)  DEFAULT NULL COMMENT '表单类型',
  `form_validator` varchar(200)  DEFAULT NULL COMMENT '表单效验',
  `grid_item` char(1)  DEFAULT '0' COMMENT '列表项 0:否  1:是',
  `grid_sort` char(1)  DEFAULT '0' COMMENT '列表排序 0:否  1:是',
  `query_item` char(1)  DEFAULT '0' COMMENT '查询项 0:否  1:是',
  `query_type` varchar(200)  DEFAULT NULL COMMENT '查询方式',
  `query_form_type` varchar(200)  DEFAULT NULL COMMENT '查询表单类型',
  `field_dict` varchar(200)  DEFAULT NULL COMMENT '字典类型',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  COMMENT='代码生成表字段';

-- ----------------------------
-- Records of gen_table_column
-- ----------------------------
BEGIN;
COMMIT;

-- ----------------------------
-- Table structure for gen_template
-- ----------------------------
DROP TABLE IF EXISTS `gen_template`;
CREATE TABLE `gen_template` (
  `id` bigint NOT NULL COMMENT '主键',
  `template_name` varchar(255)  NOT NULL COMMENT '模板名称',
  `generator_path` varchar(255)  NOT NULL COMMENT '模板路径',
  `template_desc` varchar(255)  NOT NULL COMMENT '模板描述',
  `template_code` text  NOT NULL COMMENT '模板代码',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新',
  `del_flag` char(1)  NOT NULL DEFAULT '0' COMMENT '删除标记',
  `create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
  `update_by` varchar(64) DEFAULT NULL COMMENT '修改人',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  COMMENT='模板';


-- ----------------------------
-- Table structure for gen_template_group
-- ----------------------------
DROP TABLE IF EXISTS `gen_template_group`;
CREATE TABLE `gen_template_group` (
  `group_id` bigint NOT NULL COMMENT '分组id',
  `template_id` bigint NOT NULL COMMENT '模板id',
  PRIMARY KEY (`group_id`,`template_id`)
) ENGINE=InnoDB  COMMENT='模板分组关联表';

SET FOREIGN_KEY_CHECKS = 1;


================================================
FILE: db/pig_config.sql
================================================
DROP DATABASE IF EXISTS `pig_config`;

CREATE DATABASE  `pig_config` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

USE pig_config;

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for config_info
-- ----------------------------
DROP TABLE IF EXISTS `config_info`;
CREATE TABLE `config_info` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT 'group_id',
  `content` longtext COLLATE utf8_bin NOT NULL COMMENT 'content',
  `md5` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COLLATE utf8_bin COMMENT 'source user',
  `src_ip` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT 'source ip',
  `app_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT 'app_name',
  `tenant_id` varchar(128) COLLATE utf8_bin DEFAULT '' COMMENT '租户字段',
  `c_desc` varchar(256) COLLATE utf8_bin DEFAULT NULL COMMENT 'configuration description',
  `c_use` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT 'configuration usage',
  `effect` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '配置生效的描述',
  `type` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT '配置的类型',
  `c_schema` text COLLATE utf8_bin COMMENT '配置的模式',
  `encrypted_data_key` varchar(1024) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '密钥',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
-- ----------------------------
-- Records of his_config_info
-- ----------------------------
BEGIN;
INSERT INTO `config_info` (`id`, `data_id`, `group_id`, `content`, `md5`, `gmt_create`, `gmt_modified`, `src_user`, `src_ip`, `app_name`, `tenant_id`, `c_desc`, `c_use`, `effect`, `type`, `c_schema`, `encrypted_data_key`) VALUES (1, 'application-dev.yml', 'DEFAULT_GROUP', '# 配置文件加密根密码\njasypt:\n  encryptor:\n    password: pig\n    algorithm: PBEWithMD5AndDES\n    iv-generator-classname: org.jasypt.iv.NoIvGenerator\n    \n# Spring 相关\nspring:\n  cache:\n    type: redis\n  data:\n    redis:\n      host: ${REDIS_HOST:127.0.0.1}\n      password: ${REDIS_PASSWORD:}\n      port: ${REDIS_PORT:6379}\n      database: ${REDIS_DATABASE:0}\n  cloud:\n    sentinel:\n      eager: true\n      transport:\n        dashboard: pig-sentinel:5003\n    openfeign:\n      sentinel:\n        enabled: true\n      okhttp:\n        enabled: true\n      httpclient:\n        enabled: false\n      compression:\n        request:\n          enabled: true\n        response:\n          enabled: true\n\n# 暴露监控端点\nmanagement:\n  endpoints:\n    web:\n      exposure:\n        include: \"*\"  \n  endpoint:\n    health:\n      show-details: ALWAYS\n\n# mybaits-plus配置\nmybatis-plus:\n  mapper-locations: classpath:/mapper/*Mapper.xml\n  global-config:\n    banner: false\n    db-config:\n      id-type: auto\n      table-underline: true\n      logic-delete-value: 1\n      logic-not-delete-value: 0\n  type-handlers-package: com.pig4cloud.pig.common.mybatis.handler\n  configuration:\n    map-underscore-to-camel-case: true\n    shrink-whitespaces-in-sql: true\n\n# 短信插件配置:https://www.yuque.com/vxixfq/pig/zw8udk\nsms:\n  is-print: false # 是否打印日志\n  config-type: yaml # 配置类型,yaml', '670b60f71ed234ee2c2d363721a1e2c9', '2025-05-16 12:48:39', '2025-10-29 09:01:23', 'nacos', '10.25.25.1', '', 'public', '', NULL, NULL, 'yaml', NULL, '');
INSERT INTO `config_info` (`id`, `data_id`, `group_id`, `content`, `md5`, `gmt_create`, `gmt_modified`, `src_user`, `src_ip`, `app_name`, `tenant_id`, `c_desc`, `c_use`, `effect`, `type`, `c_schema`, `encrypted_data_key`) VALUES (2, 'pig-auth-dev.yml', 'DEFAULT_GROUP', '# 数据源\nspring:\n  freemarker:\n    allow-request-override: false\n    allow-session-override: false\n    cache: true\n    charset: UTF-8\n    check-template-location: true\n    content-type: text/html\n    enabled: true\n    request-context-attribute: request\n    expose-request-attributes: false\n    expose-session-attributes: false\n    expose-spring-macro-helpers: true\n    prefer-file-system-access: true\n    suffix: .ftl\n    template-loader-path: classpath:/templates/\n\n\nsecurity:\n  encode-key: \'thanks,pig4cloud\'\n  ignore-clients:\n    - test\n    - client\n    - open\n    - app', 'b4a660ece61e8180b4940a0770eddfee', '2025-01-30 16:50:04', '2025-01-30 16:50:04', 'nacos', '127.0.0.1', '', 'public', NULL, NULL, NULL, 'yaml', NULL, '');
INSERT INTO `config_info` (`id`, `data_id`, `group_id`, `content`, `md5`, `gmt_create`, `gmt_modified`, `src_user`, `src_ip`, `app_name`, `tenant_id`, `c_desc`, `c_use`, `effect`, `type`, `c_schema`, `encrypted_data_key`) VALUES (3, 'pig-codegen-dev.yml', 'DEFAULT_GROUP', '# 数据源配置\nspring:\n  datasource:\n    type: com.zaxxer.hikari.HikariDataSource\n    driver-class-name: com.mysql.cj.jdbc.Driver\n    username: ${MYSQL_USERNAME:root}\n    password: ${MYSQL_PASSWORD:root}\n    url: jdbc:mysql://${MYSQL_HOST:127.0.0.1}:${MYSQL_PORT:3306}/${MYSQL_DB:pig}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true\n  resources:\n    static-locations: classpath:/static/,classpath:/views/\n', 'a1e1ae7127517eae96a2df8b15d94fe3', '2025-10-29 11:39:40', '2025-10-29 11:39:40', 'nacos', '10.25.25.2', '', 'public', '', NULL, NULL, 'yaml', NULL, '');
INSERT INTO `config_info` (`id`, `data_id`, `group_id`, `content`, `md5`, `gmt_create`, `gmt_modified`, `src_user`, `src_ip`, `app_name`, `tenant_id`, `c_desc`, `c_use`, `effect`, `type`, `c_schema`, `encrypted_data_key`) VALUES (4, 'pig-gateway-dev.yml', 'DEFAULT_GROUP', 'spring:\n  cloud:\n    gateway:\n      server:\n        webflux:\n          routes:\n            # 认证中心\n            - id: pig-auth\n              uri: lb://pig-auth\n              predicates:\n                - Path=/auth/**\n            #UPMS 模块\n            - id: pig-upms-biz\n              uri: lb://pig-upms-biz\n              predicates:\n                - Path=/admin/**\n              filters:\n                # 限流配置\n                - name: RequestRateLimiter\n                  args:\n                    key-resolver: \'#{@remoteAddrKeyResolver}\'\n                    redis-rate-limiter.replenishRate: 100\n                    redis-rate-limiter.burstCapacity: 200\n            # 代码生成模块\n            - id: pig-codegen\n              uri: lb://pig-codegen\n              predicates:\n                - Path=/gen/**\n            # 代码生成模块\n            - id: pig-quartz\n              uri: lb://pig-quartz\n              predicates:\n                - Path=/job/**\n            # 固定路由转发配置 无修改\n            - id: openapi\n              uri: lb://pig-gateway\n              predicates:\n                - Path=/v3/api-docs/**\n              filters:\n                - RewritePath=/v3/api-docs/(?<path>.*), /$\\{path}/$\\{path}/v3/api-docs', '53ace4035d810f07e3767d94e1e68379', '2025-01-30 16:50:04', '2025-05-30 08:36:27', 'nacos_namespace_migrate', '0:0:0:0:0:0:0:1', '', 'public', '', NULL, NULL, 'yaml', NULL, '');
INSERT INTO `config_info` (`id`, `data_id`, `group_id`, `content`, `md5`, `gmt_create`, `gmt_modified`, `src_user`, `src_ip`, `app_name`, `tenant_id`, `c_desc`, `c_use`, `effect`, `type`, `c_schema`, `encrypted_data_key`) VALUES (5, 'pig-monitor-dev.yml', 'DEFAULT_GROUP', 'spring:\n  autoconfigure:\n    exclude: com.pig4cloud.pig.common.core.config.JacksonConfiguration\n  # 安全配置\n  security:\n    user:\n      name: ENC(8Hk2ILNJM8UTOuW/Xi75qg==)     # pig\n      password: ENC(o6cuPFfUevmTbkmBnE67Ow====) # pig\n', '650bdfa15f60f3faa84dfe6e6878b8cf', '2025-01-30 16:50:04', '2025-01-30 16:50:04', 'nacos', '127.0.0.1', '', 'public', NULL, NULL, NULL, 'yaml', NULL, '');
INSERT INTO `config_info` (`id`, `data_id`, `group_id`, `content`, `md5`, `gmt_create`, `gmt_modified`, `src_user`, `src_ip`, `app_name`, `tenant_id`, `c_desc`, `c_use`, `effect`, `type`, `c_schema`, `encrypted_data_key`) VALUES (6, 'pig-upms-biz-dev.yml', 'DEFAULT_GROUP', '# 数据源\nspring:\n  datasource:\n    type: com.zaxxer.hikari.HikariDataSource\n    driver-class-name: com.mysql.cj.jdbc.Driver\n    username: ${MYSQL_USERNAME:root}\n    password: ${MYSQL_PASSWORD:root}\n    url: jdbc:mysql://${MYSQL_HOST:127.0.0.1}:${MYSQL_PORT:3306}/${MYSQL_DB:pig}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true\n\n# 文件上传相关 支持阿里云、华为云、腾讯、minio\nfile:\n  bucketName: s3demo \n  local:\n    enable: true\n    base-path: /Users/lengleng/Downloads/img', '80cf3a9b7b490e32b03550c429dea33e', '2025-10-29 11:39:40', '2025-10-29 11:39:40', 'nacos', '10.25.25.2', '', 'public', '', NULL, NULL, 'yaml', NULL, '');
INSERT INTO `config_info` (`id`, `data_id`, `group_id`, `content`, `md5`, `gmt_create`, `gmt_modified`, `src_user`, `src_ip`, `app_name`, `tenant_id`, `c_desc`, `c_use`, `effect`, `type`, `c_schema`, `encrypted_data_key`) VALUES (7, 'pig-quartz-dev.yml', 'DEFAULT_GROUP', 'spring:\n  datasource:\n    type: com.zaxxer.hikari.HikariDataSource\n    driver-class-name: com.mysql.cj.jdbc.Driver\n    username: ${MYSQL_USERNAME:root}\n    password: ${MYSQL_PASSWORD:root}\n    url: jdbc:mysql://${MYSQL_HOST:127.0.0.1}:${MYSQL_PORT:3306}/${MYSQL_DB:pig}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true\n', 'e0c9ce980fd14fd28f955852061970ca', '2025-10-29 11:39:40', '2025-10-29 11:39:40', 'nacos', '10.25.25.2', '', 'public', '', NULL, NULL, 'yaml', NULL, '');
COMMIT;


-- ----------------------------
-- Table structure for config_info_beta
-- ----------------------------
DROP TABLE IF EXISTS `config_info_beta`;
CREATE TABLE `config_info_beta` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) COLLATE utf8_bin NOT NULL COMMENT 'group_id',
  `app_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT 'app_name',
  `content` longtext COLLATE utf8_bin NOT NULL COMMENT 'content',
  `beta_ips` varchar(1024) COLLATE utf8_bin DEFAULT NULL COMMENT 'betaIps',
  `md5` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COLLATE utf8_bin COMMENT 'source user',
  `src_ip` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT 'source ip',
  `tenant_id` varchar(128) COLLATE utf8_bin DEFAULT '' COMMENT '租户字段',
  `encrypted_data_key` varchar(1024) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '密钥',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';

-- ----------------------------
-- Records of config_info_beta
-- ----------------------------
BEGIN;
COMMIT;

-- ----------------------------
-- Table structure for config_info_gray
-- ----------------------------
DROP TABLE IF EXISTS `config_info_gray`;
CREATE TABLE `config_info_gray` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `src_user` text COMMENT 'src_user',
  `src_ip` varchar(100) DEFAULT NULL COMMENT 'src_ip',
  `gmt_create` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'gmt_create',
  `gmt_modified` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT 'gmt_modified',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `gray_name` varchar(128) NOT NULL COMMENT 'gray_name',
  `gray_rule` text NOT NULL COMMENT 'gray_rule',
  `encrypted_data_key` varchar(256) NOT NULL DEFAULT '' COMMENT 'encrypted_data_key',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfogray_datagrouptenantgray` (`data_id`,`group_id`,`tenant_id`,`gray_name`),
  KEY `idx_dataid_gmt_modified` (`data_id`,`gmt_modified`),
  KEY `idx_gmt_modified` (`gmt_modified`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='config_info_gray';

-- ----------------------------
-- Records of config_info_gray
-- ----------------------------
BEGIN;
COMMIT;

-- ----------------------------
-- Table structure for config_info_tag
-- ----------------------------
DROP TABLE IF EXISTS `config_info_tag`;
CREATE TABLE `config_info_tag` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) COLLATE utf8_bin NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) COLLATE utf8_bin DEFAULT '' COMMENT 'tenant_id',
  `tag_id` varchar(128) COLLATE utf8_bin NOT NULL COMMENT 'tag_id',
  `app_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT 'app_name',
  `content` longtext COLLATE utf8_bin NOT NULL COMMENT 'content',
  `md5` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COLLATE utf8_bin COMMENT 'source user',
  `src_ip` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT 'source ip',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';

-- ----------------------------
-- Records of config_info_tag
-- ----------------------------
BEGIN;
COMMIT;

-- ----------------------------
-- Table structure for config_tags_relation
-- ----------------------------
DROP TABLE IF EXISTS `config_tags_relation`;
CREATE TABLE `config_tags_relation` (
  `id` bigint NOT NULL COMMENT 'id',
  `tag_name` varchar(128) COLLATE utf8_bin NOT NULL COMMENT 'tag_name',
  `tag_type` varchar(64) COLLATE utf8_bin DEFAULT NULL COMMENT 'tag_type',
  `data_id` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) COLLATE utf8_bin NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) COLLATE utf8_bin DEFAULT '' COMMENT 'tenant_id',
  `nid` bigint NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增长标识',
  PRIMARY KEY (`nid`),
  UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';

-- ----------------------------
-- Records of config_tags_relation
-- ----------------------------
BEGIN;
COMMIT;

-- ----------------------------
-- Table structure for group_capacity
-- ----------------------------
DROP TABLE IF EXISTS `group_capacity`;
CREATE TABLE `group_capacity` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `group_id` varchar(128) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
  `quota` int unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
  `max_aggr_size` int unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';

-- ----------------------------
-- Records of group_capacity
-- ----------------------------
BEGIN;
COMMIT;

-- ----------------------------
-- Table structure for his_config_info
-- ----------------------------
DROP TABLE IF EXISTS `his_config_info`;
CREATE TABLE `his_config_info` (
  `id` bigint unsigned NOT NULL COMMENT 'id',
  `nid` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增标识',
  `data_id` varchar(255) COLLATE utf8_bin NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) COLLATE utf8_bin NOT NULL COMMENT 'group_id',
  `app_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT 'app_name',
  `content` longtext COLLATE utf8_bin NOT NULL COMMENT 'content',
  `md5` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COLLATE utf8_bin COMMENT 'source user',
  `src_ip` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT 'source ip',
  `op_type` char(10) COLLATE utf8_bin DEFAULT NULL COMMENT 'operation type',
  `tenant_id` varchar(128) COLLATE utf8_bin DEFAULT '' COMMENT '租户字段',
  `encrypted_data_key` varchar(1024) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '密钥',
  `publish_type` varchar(50) COLLATE utf8_bin DEFAULT 'formal' COMMENT 'publish type gray or formal',
  `gray_name` varchar(50) COLLATE utf8_bin DEFAULT NULL COMMENT 'gray name',
  `ext_info` longtext COLLATE utf8_bin COMMENT 'ext info',
  PRIMARY KEY (`nid`),
  KEY `idx_gmt_create` (`gmt_create`),
  KEY `idx_gmt_modified` (`gmt_modified`),
  KEY `idx_did` (`data_id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';


-- ----------------------------
-- Table structure for permissions
-- ----------------------------
DROP TABLE IF EXISTS `permissions`;
CREATE TABLE `permissions` (
  `role` varchar(50) NOT NULL COMMENT 'role',
  `resource` varchar(128) NOT NULL COMMENT 'resource',
  `action` varchar(8) NOT NULL COMMENT 'action',
  UNIQUE KEY `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of permissions
-- ----------------------------
BEGIN;
COMMIT;

-- ----------------------------
-- Table structure for roles
-- ----------------------------
DROP TABLE IF EXISTS `roles`;
CREATE TABLE `roles` (
  `username` varchar(50) NOT NULL COMMENT 'username',
  `role` varchar(50) NOT NULL COMMENT 'role',
  UNIQUE KEY `idx_user_role` (`username`,`role`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of roles
-- ----------------------------
BEGIN;
INSERT INTO `roles` (`username`, `role`) VALUES ('nacos', 'ROLE_ADMIN');
COMMIT;

-- ----------------------------
-- Table structure for tenant_capacity
-- ----------------------------
DROP TABLE IF EXISTS `tenant_capacity`;
CREATE TABLE `tenant_capacity` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `tenant_id` varchar(128) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'Tenant ID',
  `quota` int unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
  `max_aggr_size` int unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';

-- ----------------------------
-- Records of tenant_capacity
-- ----------------------------
BEGIN;
COMMIT;

-- ----------------------------
-- Table structure for tenant_info
-- ----------------------------
DROP TABLE IF EXISTS `tenant_info`;
CREATE TABLE `tenant_info` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
  `kp` varchar(128) COLLATE utf8_bin NOT NULL COMMENT 'kp',
  `tenant_id` varchar(128) COLLATE utf8_bin DEFAULT '' COMMENT 'tenant_id',
  `tenant_name` varchar(128) COLLATE utf8_bin DEFAULT '' COMMENT 'tenant_name',
  `tenant_desc` varchar(256) COLLATE utf8_bin DEFAULT NULL COMMENT 'tenant_desc',
  `create_source` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT 'create_source',
  `gmt_create` bigint NOT NULL COMMENT '创建时间',
  `gmt_modified` bigint NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';

-- ----------------------------
-- Records of tenant_info
-- ----------------------------
BEGIN;
COMMIT;

-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `username` varchar(50) NOT NULL COMMENT 'username',
  `password` varchar(500) NOT NULL COMMENT 'password',
  `enabled` tinyint(1) NOT NULL COMMENT 'enabled',
  PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of users
-- ----------------------------
BEGIN;
INSERT INTO `users` (`username`, `password`, `enabled`) VALUES ('nacos', '$2a$10$W6PKgRTzXUp6R/NY853Kn.nRaIcX3whIMTZ/WWkNqo2MTOeSBjKJq', 1);
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;


================================================
FILE: docker-compose.yml
================================================
services:
  pig-mysql:
    build:
      context: ./db
    environment:
      MYSQL_ROOT_HOST: "%"
      MYSQL_ROOT_PASSWORD: root
    restart: always
    container_name: pig-mysql
    image: pig-mysql
    ports:
      - 33306:3306
    networks:
      - spring_cloud_default

  pig-redis:
    image: registry.cn-hangzhou.aliyuncs.com/dockerhub_mirror/redis
    ports:
      - 36379:6379
    restart: always
    container_name: pig-redis
    hostname: pig-redis
    networks:
      - spring_cloud_default

  pig-register:
    build:
      context: ./pig-register
    restart: always
    ports:
      - 8848:8848
      - 9848:9848
      - 8080:8080
    environment:
      MYSQL_HOST: pig-mysql
      REDIS_HOST: pig-redis
    container_name: pig-register
    hostname: pig-register
    image: pig-register
    networks:
      - spring_cloud_default

  pig-gateway:
    build:
      context: ./pig-gateway
    restart: always
    ports:
      - 9999:9999
    container_name: pig-gateway
    hostname: pig-gateway
    image: pig-gateway
    environment:
      REDIS_HOST: pig-redis
      NACOS_HOST: pig-register
    networks:
      - spring_cloud_default

  pig-auth:
    build:
      context: ./pig-auth
    restart: always
    container_name: pig-auth
    hostname: pig-auth
    image: pig-auth
    environment:
      REDIS_HOST: pig-redis
      NACOS_HOST: pig-register
    networks:
      - spring_cloud_default

  pig-upms:
    build:
      context: ./pig-upms/pig-upms-biz
    restart: always
    container_name: pig-upms
    hostname: pig-upms
    image: pig-upms
    environment:
      MYSQL_HOST: pig-mysql
      REDIS_HOST: pig-redis
      NACOS_HOST: pig-register
    networks:
      - spring_cloud_default

  pig-monitor:
    build:
      context: ./pig-visual/pig-monitor
    restart: always
    ports:
      - 5001:5001
    container_name: pig-monitor
    hostname: pig-monitor
    image: pig-monitor
    environment:
      NACOS_HOST: pig-register
    networks:
      - spring_cloud_default

  pig-codegen:
    build:
      context: ./pig-visual/pig-codegen
    restart: always
    container_name: pig-codegen
    hostname: pig-codegen
    image: pig-codegen
    environment:
      MYSQL_HOST: pig-mysql
      REDIS_HOST: pig-redis
      NACOS_HOST: pig-register
    networks:
      - spring_cloud_default

  pig-quartz:
    build:
      context: ./pig-visual/pig-quartz
    restart: always
    image: pig-quartz
    container_name: pig-quartz
    environment:
      MYSQL_HOST: pig-mysql
      REDIS_HOST: pig-redis
      NACOS_HOST: pig-register
    networks:
      - spring_cloud_default

networks:
  spring_cloud_default:
    name:  spring_cloud_default
    driver: bridge


================================================
FILE: pig-auth/Dockerfile
================================================
FROM registry.cn-hangzhou.aliyuncs.com/dockerhub_mirror/java:21-anolis

WORKDIR /pig-auth

ARG JAR_FILE=target/pig-auth.jar

COPY ${JAR_FILE} app.jar

EXPOSE 3000

ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"

CMD sleep 60; java $JAVA_OPTS -jar app.jar


================================================
FILE: pig-auth/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~     http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->

<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.pig4cloud</groupId>
        <artifactId>pig</artifactId>
        <version>${revision}</version>
    </parent>

    <artifactId>pig-auth</artifactId>
    <packaging>jar</packaging>

    <description>pig 认证授权中心,基于 spring security oAuth2</description>

    <dependencies>
        <!--注册中心客户端-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--配置中心客户端-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--断路器依赖-->
        <dependency>
            <groupId>com.pig4cloud</groupId>
            <artifactId>pig-common-feign</artifactId>
        </dependency>
        <!--upms api、model 模块-->
        <dependency>
            <groupId>com.pig4cloud</groupId>
            <artifactId>pig-upms-api</artifactId>
        </dependency>
        <dependency>
            <groupId>com.pig4cloud</groupId>
            <artifactId>pig-common-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <!--freemarker 授权码模式渲染-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <!--undertow容器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>
        <!-- log -->
        <dependency>
            <groupId>com.pig4cloud</groupId>
            <artifactId>pig-common-log</artifactId>
        </dependency>
        <!-- 调用验证码核心模块 -->
        <dependency>
            <groupId>com.pig4cloud.plugin</groupId>
            <artifactId>captcha-core</artifactId>
        </dependency>
        <!-- 加解密依赖 -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-crypto</artifactId>
        </dependency>
    </dependencies>

    <profiles>
        <profile>
            <id>boot</id>
        </profile>
        <profile>
            <id>cloud</id>
            <activation>
                <!-- 默认环境 -->
                <activeByDefault>true</activeByDefault>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                    </plugin>
                    <plugin>
                        <groupId>io.fabric8</groupId>
                        <artifactId>docker-maven-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

</project>


================================================
FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/PigAuthApplication.java
================================================
/*
 * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.pig4cloud.pig.auth;

import com.pig4cloud.pig.common.feign.annotation.EnablePigFeignClients;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * 认证授权中心应用启动类
 *
 * @author lengleng
 * @date 2025/05/30
 */
@EnablePigFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class PigAuthApplication {

	public static void main(String[] args) {
		SpringApplication.run(PigAuthApplication.class, args);
	}

}


================================================
FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/config/AuthorizationServerConfiguration.java
================================================
/*
 * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.pig4cloud.pig.auth.config;

import com.pig4cloud.pig.auth.support.CustomeOAuth2AccessTokenGenerator;
import com.pig4cloud.pig.auth.support.core.CustomeOAuth2TokenCustomizer;
import com.pig4cloud.pig.auth.support.core.FormIdentityLoginConfigurer;
import com.pig4cloud.pig.auth.support.core.PigDaoAuthenticationProvider;
import com.pig4cloud.pig.auth.support.filter.PasswordDecoderFilter;
import com.pig4cloud.pig.auth.support.filter.ValidateCodeFilter;
import com.pig4cloud.pig.auth.support.handler.PigAuthenticationFailureEventHandler;
import com.pig4cloud.pig.auth.support.handler.PigAuthenticationSuccessEventHandler;
import com.pig4cloud.pig.auth.support.password.OAuth2ResourceOwnerPasswordAuthenticationConverter;
import com.pig4cloud.pig.auth.support.password.OAuth2ResourceOwnerPasswordAuthenticationProvider;
import com.pig4cloud.pig.auth.support.sms.OAuth2ResourceOwnerSmsAuthenticationConverter;
import com.pig4cloud.pig.auth.support.sms.OAuth2ResourceOwnerSmsAuthenticationProvider;
import com.pig4cloud.pig.common.core.constant.SecurityConstants;
import com.pig4cloud.pig.common.security.component.PigBootCorsProperties;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService;
import org.springframework.security.oauth2.server.authorization.config.annotation.web.configurers.OAuth2AuthorizationServerConfigurer;
import org.springframework.security.oauth2.server.authorization.settings.AuthorizationServerSettings;
import org.springframework.security.oauth2.server.authorization.token.DelegatingOAuth2TokenGenerator;
import org.springframework.security.oauth2.server.authorization.token.OAuth2RefreshTokenGenerator;
import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenGenerator;
import org.springframework.security.oauth2.server.authorization.web.authentication.OAuth2AuthorizationCodeAuthenticationConverter;
import org.springframework.security.oauth2.server.authorization.web.authentication.OAuth2AuthorizationCodeRequestAuthenticationConverter;
import org.springframework.security.oauth2.server.authorization.web.authentication.OAuth2ClientCredentialsAuthenticationConverter;
import org.springframework.security.oauth2.server.authorization.web.authentication.OAuth2RefreshTokenAuthenticationConverter;
import org.springframework.security.web.DefaultSecurityFilterChain;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.AuthenticationConverter;
import org.springframework.security.web.authentication.DelegatingAuthenticationConverter;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;

import java.util.Arrays;

/**
 * 认证服务器配置类
 *
 * @author lengleng
 * @date 2025/05/30
 */
@Configuration
@RequiredArgsConstructor
public class AuthorizationServerConfiguration {

	private final OAuth2AuthorizationService authorizationService;

	private final PasswordDecoderFilter passwordDecoderFilter;

	private final ValidateCodeFilter validateCodeFilter;

	private final PigBootCorsProperties pigBootCorsProperties;

	/**
	 * Authorization Server 配置,仅对 /oauth2/** 的请求有效
	 * @param http http
	 * @return {@link SecurityFilterChain }
	 * @throws Exception 异常
	 */
	@Bean
	@Order(Ordered.HIGHEST_PRECEDENCE)
	public SecurityFilterChain authorizationServer(HttpSecurity http) throws Exception {
		// 配置授权服务器的安全策略,只有/oauth2/**的请求才会走如下的配置
		http.securityMatcher("/oauth2/**");
		OAuth2AuthorizationServerConfigurer authorizationServerConfigurer = new OAuth2AuthorizationServerConfigurer();

		// 增加验证码过滤器
		http.addFilterBefore(validateCodeFilter, UsernamePasswordAuthenticationFilter.class);
		// 增加密码解密过滤器
		http.addFilterBefore(passwordDecoderFilter, UsernamePasswordAuthenticationFilter.class);

		http.with(authorizationServerConfigurer.tokenEndpoint((tokenEndpoint) -> {// 个性化认证授权端点
			tokenEndpoint.accessTokenRequestConverter(accessTokenRequestConverter()) // 注入自定义的授权认证Converter
				.accessTokenResponseHandler(new PigAuthenticationSuccessEventHandler()) // 登录成功处理器
				.errorResponseHandler(new PigAuthenticationFailureEventHandler());// 登录失败处理器
		}).clientAuthentication(oAuth2ClientAuthenticationConfigurer -> // 个性化客户端认证
		oAuth2ClientAuthenticationConfigurer.errorResponseHandler(new PigAuthenticationFailureEventHandler()))// 处理客户端认证异常
			.authorizationEndpoint(authorizationEndpoint -> authorizationEndpoint// 授权码端点个性化confirm页面
				.consentPage(SecurityConstants.CUSTOM_CONSENT_PAGE_URI)), Customizer.withDefaults())
			.authorizeHttpRequests(authorizeRequests -> authorizeRequests.anyRequest().authenticated());

		// 设置 Token 存储的策略
		http.with(authorizationServerConfigurer.authorizationService(authorizationService)// redis存储token的实现
			.authorizationServerSettings(
					AuthorizationServerSettings.builder().issuer(SecurityConstants.PROJECT_LICENSE).build()),
				Customizer.withDefaults());

		// 设置授权码模式登录页面
		http.with(new FormIdentityLoginConfigurer(), Customizer.withDefaults());

		// 配置 CORS 跨域资源共享
		if (Boolean.TRUE.equals(pigBootCorsProperties.getEnabled())) {
			http.cors(cors -> cors.configurationSource(corsConfigurationSource()));
		}

		DefaultSecurityFilterChain securityFilterChain = http.build();

		// 注入自定义授权模式实现
		addCustomOAuth2GrantAuthenticationProvider(http);

		return securityFilterChain;
	}

	/**
	 * 令牌生成规则实现 </br>
	 * client:username:uuid
	 * @return OAuth2TokenGenerator
	 */
	@Bean
	public OAuth2TokenGenerator oAuth2TokenGenerator() {
		CustomeOAuth2AccessTokenGenerator accessTokenGenerator = new CustomeOAuth2AccessTokenGenerator();
		// 注入Token 增加关联用户信息
		accessTokenGenerator.setAccessTokenCustomizer(new CustomeOAuth2TokenCustomizer());
		return new DelegatingOAuth2TokenGenerator(accessTokenGenerator, new OAuth2RefreshTokenGenerator());
	}

	/**
	 * request -> xToken 注入请求转换器
	 * @return DelegatingAuthenticationConverter
	 */
	@Bean
	public AuthenticationConverter accessTokenRequestConverter() {
		return new DelegatingAuthenticationConverter(Arrays.asList(
				new OAuth2ResourceOwnerPasswordAuthenticationConverter(),
				new OAuth2ResourceOwnerSmsAuthenticationConverter(), new OAuth2RefreshTokenAuthenticationConverter(),
				new OAuth2ClientCredentialsAuthenticationConverter(),
				new OAuth2AuthorizationCodeAuthenticationConverter(),
				new OAuth2AuthorizationCodeRequestAuthenticationConverter()));
	}

	/**
	 * 注入授权模式实现提供方
	 * <p>
	 * 1. 密码模式 </br>
	 * 2. 短信登录 </br>
	 */
	private void addCustomOAuth2GrantAuthenticationProvider(HttpSecurity http) {
		AuthenticationManager authenticationManager = http.getSharedObject(AuthenticationManager.class);
		OAuth2AuthorizationService authorizationService = http.getSharedObject(OAuth2AuthorizationService.class);

		OAuth2ResourceOwnerPasswordAuthenticationProvider resourceOwnerPasswordAuthenticationProvider = new OAuth2ResourceOwnerPasswordAuthenticationProvider(
				authenticationManager, authorizationService, oAuth2TokenGenerator());

		OAuth2ResourceOwnerSmsAuthenticationProvider resourceOwnerSmsAuthenticationProvider = new OAuth2ResourceOwnerSmsAuthenticationProvider(
				authenticationManager, authorizationService, oAuth2TokenGenerator());

		// 处理 UsernamePasswordAuthenticationToken
		http.authenticationProvider(new PigDaoAuthenticationProvider());
		// 处理 OAuth2ResourceOwnerPasswordAuthenticationToken
		http.authenticationProvider(resourceOwnerPasswordAuthenticationProvider);
		// 处理 OAuth2ResourceOwnerSmsAuthenticationToken
		http.authenticationProvider(resourceOwnerSmsAuthenticationProvider);
	}

	/**
	 * 配置 CORS 跨域资源共享
	 * @return UrlBasedCorsConfigurationSource CORS配置源
	 */
	private UrlBasedCorsConfigurationSource corsConfigurationSource() {
		UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
		CorsConfiguration corsConfiguration = new CorsConfiguration();

		// 从配置文件读取允许的源模式
		pigBootCorsProperties.getAllowedOriginPatterns().forEach(corsConfiguration::addAllowedOriginPattern);
		// 从配置文件读取允许的请求头
		pigBootCorsProperties.getAllowedHeaders().forEach(corsConfiguration::addAllowedHeader);
		// 从配置文件读取允许的HTTP方法
		pigBootCorsProperties.getAllowedMethods().forEach(corsConfiguration::addAllowedMethod);
		// 从配置文件读取是否允许携带凭证
		corsConfiguration.setAllowCredentials(pigBootCorsProperties.getAllowCredentials());

		// 注册CORS配置到指定路径
		source.registerCorsConfiguration(pigBootCorsProperties.getPathPattern(), corsConfiguration);

		return source;
	}

}


================================================
FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/endpoint/ImageCodeEndpoint.java
================================================
package com.pig4cloud.pig.auth.endpoint;

import cn.hutool.core.lang.Validator;
import com.pig4cloud.captcha.ArithmeticCaptcha;
import com.pig4cloud.pig.common.core.constant.CacheConstants;
import com.pig4cloud.pig.common.core.constant.SecurityConstants;
import com.pig4cloud.pig.common.core.util.RedisUtils;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.TimeUnit;

/**
 * 验证码相关的接口
 *
 * @author lengleng
 * @date 2022/6/27
 */
@RestController
@RequestMapping("/code")
@RequiredArgsConstructor
@Tag(description = "code", name = "验证码控制器管理模块")
public class ImageCodeEndpoint {

	private static final Integer DEFAULT_IMAGE_WIDTH = 100;

	private static final Integer DEFAULT_IMAGE_HEIGHT = 40;

	/**
	 * 创建图形验证码并输出到响应流
	 * @param randomStr 随机字符串,用于缓存验证码
	 * @param response HTTP响应对象,用于输出验证码图片
	 */
	@SneakyThrows
	@GetMapping("/image")
	@Operation(summary = "创建图形验证码并输出到响应流", description = "创建图形验证码并输出到响应流")
	public void image(String randomStr, HttpServletResponse response) {
		ArithmeticCaptcha captcha = new ArithmeticCaptcha(DEFAULT_IMAGE_WIDTH, DEFAULT_IMAGE_HEIGHT);

		if (Validator.isMobile(randomStr)) {
			return;
		}

		String result = captcha.text();
		RedisUtils.set(CacheConstants.DEFAULT_CODE_KEY + randomStr, result, SecurityConstants.CODE_TIME,
				TimeUnit.SECONDS);
		// 转换流信息写出
		captcha.out(response.getOutputStream());
	}

}


================================================
FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/endpoint/PigTokenEndpoint.java
================================================
/*
 * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.pig4cloud.pig.auth.endpoint;

import java.security.Principal;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.cache.CacheManager;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServletServerHttpResponse;
import org.springframework.security.authentication.event.LogoutSuccessEvent;
import org.springframework.security.oauth2.core.OAuth2AccessToken;
import org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse;
import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
import org.springframework.security.oauth2.core.http.converter.OAuth2AccessTokenResponseHttpMessageConverter;
import org.springframework.security.oauth2.server.authorization.OAuth2Authorization;
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService;
import org.springframework.security.oauth2.server.authorization.OAuth2TokenType;
import org.springframework.security.oauth2.server.resource.InvalidBearerTokenException;
import org.springframework.security.web.authentication.AuthenticationFailureHandler;
import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pig4cloud.pig.admin.api.entity.SysOauthClientDetails;
import com.pig4cloud.pig.admin.api.feign.RemoteClientDetailsService;
import com.pig4cloud.pig.admin.api.vo.TokenVo;
import com.pig4cloud.pig.auth.support.handler.PigAuthenticationFailureEventHandler;
import com.pig4cloud.pig.common.core.constant.CacheConstants;
import com.pig4cloud.pig.common.core.constant.CommonConstants;
import com.pig4cloud.pig.common.core.constant.SecurityConstants;
import com.pig4cloud.pig.common.core.util.R;
import com.pig4cloud.pig.common.core.util.RedisUtils;
import com.pig4cloud.pig.common.core.util.RetOps;
import com.pig4cloud.pig.common.core.util.SpringContextHolder;
import com.pig4cloud.pig.common.security.annotation.Inner;
import com.pig4cloud.pig.common.security.util.OAuth2EndpointUtils;
import com.pig4cloud.pig.common.security.util.OAuth2ErrorCodesExpand;
import com.pig4cloud.pig.common.security.util.OAuthClientException;

import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.TemporalAccessorUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;

/**
 * OAuth2 令牌端点控制器,提供令牌相关操作
 *
 * @author lengleng
 * @date 2025/05/30
 */
@RestController
@RequestMapping
@RequiredArgsConstructor
@Tag(description = "oauth", name = "OAuth2 令牌端点控制器管理模块")
public class PigTokenEndpoint {

	private final HttpMessageConverter<OAuth2AccessTokenResponse> accessTokenHttpResponseConverter = new OAuth2AccessTokenResponseHttpMessageConverter();

	private final AuthenticationFailureHandler authenticationFailureHandler = new PigAuthenticationFailureEventHandler();

	private final OAuth2AuthorizationService authorizationService;

	private final RemoteClientDetailsService clientDetailsService;

	private final CacheManager cacheManager;

	/**
	 * 授权码模式:认证页面
	 * @param modelAndView 视图模型对象
	 * @param error 表单登录失败处理回调的错误信息
	 * @return 包含登录页面视图和错误信息的ModelAndView对象
	 */
	@GetMapping("/token/login")
	@Operation(summary = "授权码模式:认证页面", description = "授权码模式:认证页面")
	public ModelAndView require(ModelAndView modelAndView, @RequestParam(required = false) String error) {
		modelAndView.setViewName("ftl/login");
		modelAndView.addObject("error", error);
		return modelAndView;
	}

	/**
	 * 授权码模式:确认页面
	 * @param principal 用户主体信息
	 * @param modelAndView 模型和视图对象
	 * @param clientId 客户端ID
	 * @param scope 请求的权限范围
	 * @param state 状态参数
	 * @return 包含确认页面信息的ModelAndView对象
	 */
	@GetMapping("/oauth2/confirm_access")
	@Operation(summary = "授权码模式:确认页面", description = "授权码模式:确认页面")
	public ModelAndView confirm(Principal principal, ModelAndView modelAndView,
			@RequestParam(OAuth2ParameterNames.CLIENT_ID) String clientId,
			@RequestParam(OAuth2ParameterNames.SCOPE) String scope,
			@RequestParam(OAuth2ParameterNames.STATE) String state) {
		SysOauthClientDetails clientDetails = RetOps.of(clientDetailsService.getClientDetailsById(clientId))
			.getData()
			.orElseThrow(() -> new OAuthClientException("clientId 不合法"));

		Set<String> authorizedScopes = StringUtils.commaDelimitedListToSet(clientDetails.getScope());
		modelAndView.addObject("clientId", clientId);
		modelAndView.addObject("state", state);
		modelAndView.addObject("scopeList", authorizedScopes);
		modelAndView.addObject("principalName", principal.getName());
		modelAndView.setViewName("ftl/confirm");
		return modelAndView;
	}

	/**
	 * 注销并删除令牌
	 * @param authHeader 认证头信息,包含Bearer token
	 * @return 返回操作结果,包含布尔值表示是否成功
	 */
	@DeleteMapping("/token/logout")
	@Operation(summary = "注销并删除令牌", description = "注销并删除令牌")
	public R<Boolean> logout(@RequestHeader(value = HttpHeaders.AUTHORIZATION, required = false) String authHeader) {
		if (StrUtil.isBlank(authHeader)) {
			return R.ok();
		}

		String tokenValue = authHeader.replace(OAuth2AccessToken.TokenType.BEARER.getValue(), StrUtil.EMPTY).trim();
		return removeToken(tokenValue);
	}

	/**
	 * 检查令牌有效性
	 * @param token 待验证的令牌
	 * @param response HTTP响应对象
	 * @param request HTTP请求对象
	 * @throws InvalidBearerTokenException 令牌无效或缺失时抛出异常
	 */
	@SneakyThrows
	@GetMapping("/token/check_token")
	@Operation(summary = "检查令牌有效性", description = "检查令牌有效性")
	public void checkToken(String token, HttpServletResponse response, HttpServletRequest request) {
		ServletServerHttpResponse httpResponse = new ServletServerHttpResponse(response);

		if (StrUtil.isBlank(token)) {
			httpResponse.setStatusCode(HttpStatus.UNAUTHORIZED);
			this.authenticationFailureHandler.onAuthenticationFailure(request, response,
					new InvalidBearerTokenException(OAuth2ErrorCodesExpand.TOKEN_MISSING));
			return;
		}
		OAuth2Authorization authorization = authorizationService.findByToken(token, OAuth2TokenType.ACCESS_TOKEN);

		// 如果令牌不存在 返回401
		if (authorization == null || authorization.getAccessToken() == null) {
			this.authenticationFailureHandler.onAuthenticationFailure(request, response,
					new InvalidBearerTokenException(OAuth2ErrorCodesExpand.INVALID_BEARER_TOKEN));
			return;
		}

		Map<String, Object> claims = authorization.getAccessToken().getClaims();
		OAuth2AccessTokenResponse sendAccessTokenResponse = OAuth2EndpointUtils.sendAccessTokenResponse(authorization,
				claims);
		this.accessTokenHttpResponseConverter.write(sendAccessTokenResponse, MediaType.APPLICATION_JSON, httpResponse);
	}

	/**
	 * 删除令牌
	 * @param token 令牌
	 * @return 删除结果
	 */
	@Inner
	@DeleteMapping("/token/remove/{token}")
	@Operation(summary = "删除令牌", description = "删除令牌")
	public R<Boolean> removeToken(@PathVariable("token") String token) {
		OAuth2Authorization authorization = authorizationService.findByToken(token, OAuth2TokenType.ACCESS_TOKEN);
		if (authorization == null) {
			return R.ok();
		}

		OAuth2Authorization.Token<OAuth2AccessToken> accessToken = authorization.getAccessToken();
		if (accessToken == null || StrUtil.isBlank(accessToken.getToken().getTokenValue())) {
			return R.ok();
		}
		// 清空用户信息(立即删除)
		cacheManager.getCache(CacheConstants.USER_DETAILS).evictIfPresent(authorization.getPrincipalName());
		// 清空access token
		authorizationService.remove(authorization);
		// 处理自定义退出事件,保存相关日志
		SpringContextHolder.publishEvent(new LogoutSuccessEvent(new PreAuthenticatedAuthenticationToken(
				authorization.getPrincipalName(), authorization.getRegisteredClientId())));
		return R.ok();
	}

	/**
	 * 分页查询令牌列表
	 * @param params 请求参数,包含分页参数current和size
	 * @return 分页结果,包含令牌信息列表
	 */
	@Inner
	@PostMapping("/token/page")
	@Operation(summary = "分页查询令牌列表", description = "分页查询令牌列表")
	public R<Page> tokenList(@RequestBody Map<String, Object> params) {
		// 根据分页参数获取对应数据
		String username = MapUtil.getStr(params, SecurityConstants.USERNAME);
		String pattern = String.format("%s::*", CacheConstants.PROJECT_OAUTH_ACCESS);
		int current = MapUtil.getInt(params, CommonConstants.CURRENT);
		int size = MapUtil.getInt(params, CommonConstants.SIZE);
		Page result = new Page(current, size);

		// 获取总数
		List<String> allKeys = RedisUtils.scan(pattern);
		result.setTotal(allKeys.size());

		List<String> pageKeys = RedisUtils.findKeysForPage(pattern, current - 1, size);
		List<OAuth2Authorization> pagedAuthorizations = RedisUtils.multiGet(pageKeys);

		// 转换为TokenVo
		List<TokenVo> tokenVoList = pagedAuthorizations.stream()
			.filter(Objects::nonNull)
			.map(this::convertToTokenVo)
			.filter(tokenVo -> {
				if (StrUtil.isBlank(username)) {
					return true;
				}
				return StrUtil.startWithAnyIgnoreCase(tokenVo.getUsername(), username);
			})
			.toList();

		if (StrUtil.isNotBlank(username)) {
			result.setTotal(tokenVoList.size());
		}

		result.setRecords(tokenVoList);
		return R.ok(result);
	}

	/**
	 * 将OAuth2Authorization转换为TokenVo
	 * @param authorization OAuth2授权对象
	 * @return TokenVo对象
	 */
	private TokenVo convertToTokenVo(OAuth2Authorization authorization) {
		TokenVo tokenVo = new TokenVo();
		tokenVo.setClientId(authorization.getRegisteredClientId());
		tokenVo.setId(authorization.getId());
		tokenVo.setUsername(authorization.getPrincipalName());
		OAuth2Authorization.Token<OAuth2AccessToken> accessToken = authorization.getAccessToken();
		tokenVo.setAccessToken(accessToken.getToken().getTokenValue());

		String expiresAt = TemporalAccessorUtil.format(accessToken.getToken().getExpiresAt(),
				DatePattern.NORM_DATETIME_PATTERN);
		tokenVo.setExpiresAt(expiresAt);

		String issuedAt = TemporalAccessorUtil.format(accessToken.getToken().getIssuedAt(),
				DatePattern.NORM_DATETIME_PATTERN);
		tokenVo.setIssuedAt(issuedAt);
		return tokenVo;
	}

}


================================================
FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/CustomeOAuth2AccessTokenGenerator.java
================================================
package com.pig4cloud.pig.auth.support;

import org.springframework.lang.Nullable;
import org.springframework.security.crypto.keygen.Base64StringKeyGenerator;
import org.springframework.security.crypto.keygen.StringKeyGenerator;
import org.springframework.security.oauth2.core.ClaimAccessor;
import org.springframework.security.oauth2.core.OAuth2AccessToken;
import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
import org.springframework.security.oauth2.server.authorization.OAuth2TokenType;
import org.springframework.security.oauth2.server.authorization.client.RegisteredClient;
import org.springframework.security.oauth2.server.authorization.settings.OAuth2TokenFormat;
import org.springframework.security.oauth2.server.authorization.token.*;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;

import java.io.Serial;
import java.time.Instant;
import java.util.*;

/**
 * 自定义OAuth2访问令牌生成器
 *
 * @author lengleng
 * @date 2025/05/30
 */
public class CustomeOAuth2AccessTokenGenerator implements OAuth2TokenGenerator<OAuth2AccessToken> {

	private OAuth2TokenCustomizer<OAuth2TokenClaimsContext> accessTokenCustomizer;

	private final StringKeyGenerator accessTokenGenerator = new Base64StringKeyGenerator(
			Base64.getUrlEncoder().withoutPadding(), 96);

	/**
	 * 生成OAuth2访问令牌
	 * @param context OAuth2令牌上下文
	 * @return 生成的访问令牌,如果令牌类型不是ACCESS_TOKEN或格式不是REFERENCE则返回null
	 * @see OAuth2TokenContext
	 * @see OAuth2AccessToken
	 */
	@Nullable
	@Override
	public OAuth2AccessToken generate(OAuth2TokenContext context) {
		if (!OAuth2TokenType.ACCESS_TOKEN.equals(context.getTokenType()) || !OAuth2TokenFormat.REFERENCE
			.equals(context.getRegisteredClient().getTokenSettings().getAccessTokenFormat())) {
			return null;
		}

		String issuer = null;
		if (context.getAuthorizationServerContext() != null) {
			issuer = context.getAuthorizationServerContext().getIssuer();
		}
		RegisteredClient registeredClient = context.getRegisteredClient();

		Instant issuedAt = Instant.now();
		Instant expiresAt = issuedAt.plus(registeredClient.getTokenSettings().getAccessTokenTimeToLive());

		// @formatter:off
        OAuth2TokenClaimsSet.Builder claimsBuilder = OAuth2TokenClaimsSet.builder();
        if (StringUtils.hasText(issuer)) {
            claimsBuilder.issuer(issuer);
        }
        claimsBuilder
                .subject(context.getPrincipal().getName())
                .audience(Collections.singletonList(registeredClient.getClientId()))
                .issuedAt(issuedAt)
                .expiresAt(expiresAt)
                .notBefore(issuedAt)
                .id(UUID.randomUUID().toString());
        if (!CollectionUtils.isEmpty(context.getAuthorizedScopes())) {
            claimsBuilder.claim(OAuth2ParameterNames.SCOPE, context.getAuthorizedScopes());
        }
        // @formatter:on

		if (this.accessTokenCustomizer != null) {
			// @formatter:off
            OAuth2TokenClaimsContext.Builder accessTokenContextBuilder = OAuth2TokenClaimsContext.with(claimsBuilder)
                    .registeredClient(context.getRegisteredClient())
                    .principal(context.getPrincipal())
                    .authorizationServerContext(context.getAuthorizationServerContext())
                    .authorizedScopes(context.getAuthorizedScopes())
                    .tokenType(context.getTokenType())
                    .authorizationGrantType(context.getAuthorizationGrantType());
            if (context.getAuthorization() != null) {
                accessTokenContextBuilder.authorization(context.getAuthorization());
            }
            if (context.getAuthorizationGrant() != null) {
                accessTokenContextBuilder.authorizationGrant(context.getAuthorizationGrant());
            }
            // @formatter:on

			OAuth2TokenClaimsContext accessTokenContext = accessTokenContextBuilder.build();
			this.accessTokenCustomizer.customize(accessTokenContext);
		}

		OAuth2TokenClaimsSet accessTokenClaimsSet = claimsBuilder.build();
		return new CustomeOAuth2AccessTokenGenerator.OAuth2AccessTokenClaims(OAuth2AccessToken.TokenType.BEARER,
				this.accessTokenGenerator.generateKey(), accessTokenClaimsSet.getIssuedAt(),
				accessTokenClaimsSet.getExpiresAt(), context.getAuthorizedScopes(), accessTokenClaimsSet.getClaims());
	}

	/**
	 * 设置用于定制{@link OAuth2AccessToken}的{@link OAuth2TokenClaimsContext#getClaims()}的{@link OAuth2TokenCustomizer}
	 * @param accessTokenCustomizer
	 * 用于定制{@code OAuth2AccessToken}声明的{@link OAuth2TokenCustomizer}
	 * @throws IllegalArgumentException 当accessTokenCustomizer为null时抛出
	 */
	public void setAccessTokenCustomizer(OAuth2TokenCustomizer<OAuth2TokenClaimsContext> accessTokenCustomizer) {
		Assert.notNull(accessTokenCustomizer, "accessTokenCustomizer cannot be null");
		this.accessTokenCustomizer = accessTokenCustomizer;
	}

	/**
	 * OAuth2访问令牌声明类,继承自OAuth2AccessToken并实现ClaimAccessor接口
	 *
	 * @author lengleng
	 * @date 2025/05/30
	 */
	private static final class OAuth2AccessTokenClaims extends OAuth2AccessToken implements ClaimAccessor {

		@Serial
		private static final long serialVersionUID = 1L;

		private final Map<String, Object> claims;

		/**
		 * 构造OAuth2访问令牌声明
		 * @param tokenType 令牌类型
		 * @param tokenValue 令牌值
		 * @param issuedAt 颁发时间
		 * @param expiresAt 过期时间
		 * @param scopes 权限范围集合
		 * @param claims 声明信息映射
		 */
		private OAuth2AccessTokenClaims(TokenType tokenType, String tokenValue, Instant issuedAt, Instant expiresAt,
				Set<String> scopes, Map<String, Object> claims) {
			super(tokenType, tokenValue, issuedAt, expiresAt, scopes);
			this.claims = claims;
		}

		/**
		 * 获取claims集合
		 * @return claims键值对集合
		 */
		@Override
		public Map<String, Object> getClaims() {
			return this.claims;
		}

	}

}


================================================
FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/base/OAuth2ResourceOwnerBaseAuthenticationConverter.java
================================================
package com.pig4cloud.pig.auth.support.base;

import com.pig4cloud.pig.common.security.util.OAuth2EndpointUtils;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.oauth2.core.OAuth2ErrorCodes;
import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
import org.springframework.security.web.authentication.AuthenticationConverter;
import org.springframework.util.MultiValueMap;
import org.springframework.util.StringUtils;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * OAuth2资源所有者基础认证转换器抽象类
 *
 * @param <T> 继承自OAuth2ResourceOwnerBaseAuthenticationToken的泛型类型
 * @author lengleng
 * @date 2025/05/30
 */
public abstract class OAuth2ResourceOwnerBaseAuthenticationConverter<T extends OAuth2ResourceOwnerBaseAuthenticationToken>
		implements AuthenticationConverter {

	/**
	 * 是否支持此convert
	 * @param grantType 授权类型
	 * @return
	 */
	public abstract boolean support(String grantType);

	/**
	 * 校验参数
	 * @param request 请求
	 */
	public void checkParams(HttpServletRequest request) {

	}

	/**
	 * 构建具体类型的token
	 * @param clientPrincipal 客户端认证信息
	 * @param requestedScopes 请求的作用域集合
	 * @param additionalParameters 附加参数映射
	 * @return 构建完成的token对象
	 */
	public abstract T buildToken(Authentication clientPrincipal, Set<String> requestedScopes,
			Map<String, Object> additionalParameters);

	/**
	 * 将HttpServletRequest转换为Authentication对象
	 * @param request HTTP请求对象
	 * @return 认证信息对象
	 * @throws OAuth2AuthenticationException 当请求参数不合法或客户端未认证时抛出异常
	 */
	@Override
	public Authentication convert(HttpServletRequest request) {

		// grant_type (REQUIRED)
		String grantType = request.getParameter(OAuth2ParameterNames.GRANT_TYPE);
		if (!support(grantType)) {
			return null;
		}

		MultiValueMap<String, String> parameters = OAuth2EndpointUtils.getParameters(request);
		// scope (OPTIONAL)
		String scope = parameters.getFirst(OAuth2ParameterNames.SCOPE);
		if (StringUtils.hasText(scope) && parameters.get(OAuth2ParameterNames.SCOPE).size() != 1) {
			OAuth2EndpointUtils.throwError(OAuth2ErrorCodes.INVALID_REQUEST, OAuth2ParameterNames.SCOPE,
					OAuth2EndpointUtils.ACCESS_TOKEN_REQUEST_ERROR_URI);
		}

		Set<String> requestedScopes = null;
		if (StringUtils.hasText(scope)) {
			requestedScopes = new HashSet<>(Arrays.asList(StringUtils.delimitedListToStringArray(scope, " ")));
		}

		// 校验个性化参数
		checkParams(request);

		// 获取当前已经认证的客户端信息
		Authentication clientPrincipal = SecurityContextHolder.getContext().getAuthentication();
		if (clientPrincipal == null) {
			OAuth2EndpointUtils.throwError(OAuth2ErrorCodes.INVALID_REQUEST, OAuth2ErrorCodes.INVALID_CLIENT,
					OAuth2EndpointUtils.ACCESS_TOKEN_REQUEST_ERROR_URI);
		}

		// 扩展信息
		Map<String, Object> additionalParameters = parameters.entrySet()
			.stream()
			.filter(e -> !e.getKey().equals(OAuth2ParameterNames.GRANT_TYPE)
					&& !e.getKey().equals(OAuth2ParameterNames.SCOPE))
			.collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().get(0)));

		// 创建token
		return buildToken(clientPrincipal, requestedScopes, additionalParameters);

	}

}


================================================
FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/base/OAuth2ResourceOwnerBaseAuthenticationProvider.java
================================================
package com.pig4cloud.pig.auth.support.base;

import cn.hutool.extra.spring.SpringUtil;
import com.pig4cloud.pig.common.security.util.OAuth2ErrorCodesExpand;
import com.pig4cloud.pig.common.security.util.ScopeException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.context.support.MessageSourceAccessor;
import org.springframework.security.authentication.*;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.oauth2.core.*;
import org.springframework.security.oauth2.server.authorization.OAuth2Authorization;
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService;
import org.springframework.security.oauth2.server.authorization.OAuth2TokenType;
import org.springframework.security.oauth2.server.authorization.authentication.OAuth2AccessTokenAuthenticationToken;
import org.springframework.security.oauth2.server.authorization.authentication.OAuth2ClientAuthenticationToken;
import org.springframework.security.oauth2.server.authorization.client.RegisteredClient;
import org.springframework.security.oauth2.server.authorization.context.AuthorizationServerContextHolder;
import org.springframework.security.oauth2.server.authorization.token.DefaultOAuth2TokenContext;
import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenContext;
import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenGenerator;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;

import java.security.Principal;
import java.time.Instant;
import java.util.*;
import java.util.function.Supplier;

/**
 * OAuth2资源所有者基础认证提供者抽象类,用于处理资源所有者密码凭证授权流程
 *
 * @param <T> OAuth2资源所有者基础认证令牌类型
 * @author lengleng
 * @date 2025/05/30
 */
public abstract class OAuth2ResourceOwnerBaseAuthenticationProvider<T extends OAuth2ResourceOwnerBaseAuthenticationToken>
		implements AuthenticationProvider {

	private static final Logger LOGGER = LogManager.getLogger(OAuth2ResourceOwnerBaseAuthenticationProvider.class);

	private static final String ERROR_URI = "https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.2.1";

	private final OAuth2AuthorizationService authorizationService;

	private final OAuth2TokenGenerator<? extends OAuth2Token> tokenGenerator;

	private final AuthenticationManager authenticationManager;

	private final MessageSourceAccessor messages;

	@Deprecated
	private Supplier<String> refreshTokenGenerator;

	/**
	 * 构造一个基于资源所有者密码模式的OAuth2认证提供者
	 * @param authenticationManager 认证管理器
	 * @param authorizationService 授权服务
	 * @param tokenGenerator token生成器
	 * @throws IllegalArgumentException 当authorizationService或tokenGenerator为null时抛出
	 * @since 0.2.3
	 */
	public OAuth2ResourceOwnerBaseAuthenticationProvider(AuthenticationManager authenticationManager,
			OAuth2AuthorizationService authorizationService,
			OAuth2TokenGenerator<? extends OAuth2Token> tokenGenerator) {
		Assert.notNull(authorizationService, "authorizationService cannot be null");
		Assert.notNull(tokenGenerator, "tokenGenerator cannot be null");
		this.authenticationManager = authenticationManager;
		this.authorizationService = authorizationService;
		this.tokenGenerator = tokenGenerator;

		// 国际化配置
		this.messages = new MessageSourceAccessor(SpringUtil.getBean("securityMessageSource"), Locale.CHINA);
	}

	/**
	 * 设置刷新令牌生成器
	 * @param refreshTokenGenerator 刷新令牌生成器,不能为null
	 * @deprecated 该方法已废弃
	 */
	@Deprecated
	public void setRefreshTokenGenerator(Supplier<String> refreshTokenGenerator) {
		Assert.notNull(refreshTokenGenerator, "refreshTokenGenerator cannot be null");
		this.refreshTokenGenerator = refreshTokenGenerator;
	}

	/**
	 * 构建用户名密码认证令牌
	 * @param reqParameters 请求参数映射
	 * @return 用户名密码认证令牌
	 */
	public abstract UsernamePasswordAuthenticationToken buildToken(Map<String, Object> reqParameters);

	/**
	 * 当前provider是否支持此令牌类型
	 * @param authentication
	 * @return
	 */
	@Override
	public abstract boolean supports(Class<?> authentication);

	/**
	 * 当前的请求客户端是否支持此模式
	 * @param registeredClient
	 */
	public abstract void checkClient(RegisteredClient registeredClient);

	/**
	 * 执行认证操作,遵循与{@link AuthenticationManager#authenticate(Authentication)}相同的契约
	 * @param authentication 认证请求对象
	 * @return 包含凭证的完整认证对象,如果当前认证提供者无法处理传入的认证对象可能返回null
	 * @throws AuthenticationException 认证失败时抛出
	 * @throws OAuth2AuthenticationException 当scope无效或token生成失败时抛出
	 */
	@Override
	public Authentication authenticate(Authentication authentication) throws AuthenticationException {

		T resouceOwnerBaseAuthentication = (T) authentication;

		OAuth2ClientAuthenticationToken clientPrincipal = getAuthenticatedClientElseThrowInvalidClient(
				resouceOwnerBaseAuthentication);

		RegisteredClient registeredClient = clientPrincipal.getRegisteredClient();
		checkClient(registeredClient);

		Set<String> authorizedScopes;
		// Default to configured scopes
		if (!CollectionUtils.isEmpty(resouceOwnerBaseAuthentication.getScopes())) {
			for (String requestedScope : resouceOwnerBaseAuthentication.getScopes()) {
				if (!registeredClient.getScopes().contains(requestedScope)) {
					throw new OAuth2AuthenticationException(OAuth2ErrorCodes.INVALID_SCOPE);
				}
			}
			authorizedScopes = new LinkedHashSet<>(resouceOwnerBaseAuthentication.getScopes());
		}
		else {
			authorizedScopes = new LinkedHashSet<>();
		}

		Map<String, Object> reqParameters = resouceOwnerBaseAuthentication.getAdditionalParameters();
		try {

			UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken = buildToken(reqParameters);

			LOGGER.debug("got usernamePasswordAuthenticationToken=" + usernamePasswordAuthenticationToken);

			Authentication usernamePasswordAuthentication = authenticationManager
				.authenticate(usernamePasswordAuthenticationToken);

			// @formatter:off
			DefaultOAuth2TokenContext.Builder tokenContextBuilder = DefaultOAuth2TokenContext.builder()
					.registeredClient(registeredClient)
					.principal(usernamePasswordAuthentication)
					.authorizationServerContext(AuthorizationServerContextHolder.getContext())
					.authorizedScopes(authorizedScopes)
					.authorizationGrantType(resouceOwnerBaseAuthentication.getAuthorizationGrantType())
					.authorizationGrant(resouceOwnerBaseAuthentication);
			// @formatter:on

			OAuth2Authorization.Builder authorizationBuilder = OAuth2Authorization
				.withRegisteredClient(registeredClient)
				.principalName(usernamePasswordAuthentication.getName())
				.authorizationGrantType(resouceOwnerBaseAuthentication.getAuthorizationGrantType())
				// 0.4.0 新增的方法
				.authorizedScopes(authorizedScopes);

			// ----- Access token -----
			OAuth2TokenContext tokenContext = tokenContextBuilder.tokenType(OAuth2TokenType.ACCESS_TOKEN).build();
			OAuth2Token generatedAccessToken = this.tokenGenerator.generate(tokenContext);
			if (generatedAccessToken == null) {
				OAuth2Error error = new OAuth2Error(OAuth2ErrorCodes.SERVER_ERROR,
						"The token generator failed to generate the access token.", ERROR_URI);
				throw new OAuth2AuthenticationException(error);
			}
			OAuth2AccessToken accessToken = new OAuth2AccessToken(OAuth2AccessToken.TokenType.BEARER,
					generatedAccessToken.getTokenValue(), generatedAccessToken.getIssuedAt(),
					generatedAccessToken.getExpiresAt(), tokenContext.getAuthorizedScopes());
			if (generatedAccessToken instanceof ClaimAccessor) {
				authorizationBuilder.id(accessToken.getTokenValue())
					.token(accessToken,
							(metadata) -> metadata.put(OAuth2Authorization.Token.CLAIMS_METADATA_NAME,
									((ClaimAccessor) generatedAccessToken).getClaims()))
					// 0.4.0 新增的方法
					.authorizedScopes(authorizedScopes)
					.attribute(Principal.class.getName(), usernamePasswordAuthentication);
			}
			else {
				authorizationBuilder.id(accessToken.getTokenValue()).accessToken(accessToken);
			}

			// ----- Refresh token -----
			OAuth2RefreshToken refreshToken = null;
			if (registeredClient.getAuthorizationGrantTypes().contains(AuthorizationGrantType.REFRESH_TOKEN) &&
			// Do not issue refresh token to public client
					!clientPrincipal.getClientAuthenticationMethod().equals(ClientAuthenticationMethod.NONE)) {

				if (this.refreshTokenGenerator != null) {
					Instant issuedAt = Instant.now();
					Instant expiresAt = issuedAt.plus(registeredClient.getTokenSettings().getRefreshTokenTimeToLive());
					refreshToken = new OAuth2RefreshToken(this.refreshTokenGenerator.get(), issuedAt, expiresAt);
				}
				else {
					tokenContext = tokenContextBuilder.tokenType(OAuth2TokenType.REFRESH_TOKEN).build();
					OAuth2Token generatedRefreshToken = this.tokenGenerator.generate(tokenContext);
					if (!(generatedRefreshToken instanceof OAuth2RefreshToken)) {
						OAuth2Error error = new OAuth2Error(OAuth2ErrorCodes.SERVER_ERROR,
								"The token generator failed to generate the refresh token.", ERROR_URI);
						throw new OAuth2AuthenticationException(error);
					}
					refreshToken = (OAuth2RefreshToken) generatedRefreshToken;
				}
				authorizationBuilder.refreshToken(refreshToken);
			}

			OAuth2Authorization authorization = authorizationBuilder.build();

			this.authorizationService.save(authorization);

			LOGGER.debug("returning OAuth2AccessTokenAuthenticationToken");

			return new OAuth2AccessTokenAuthenticationToken(registeredClient, clientPrincipal, accessToken,
					refreshToken, Objects.requireNonNull(authorization.getAccessToken().getClaims()));

		}
		catch (Exception ex) {
			LOGGER.error("problem in authenticate", ex);
			throw oAuth2AuthenticationException(authentication, (AuthenticationException) ex);
		}

	}

	/**
	 * 登录异常转换为oauth2异常
	 * @param authentication 身份验证
	 * @param authenticationException 身份验证异常
	 * @return {@link OAuth2AuthenticationException}
	 */
	private OAuth2AuthenticationException oAuth2AuthenticationException(Authentication authentication,
			AuthenticationException authenticationException) {
		if (authenticationException instanceof UsernameNotFoundException) {
			return new OAuth2AuthenticationException(new OAuth2Error(OAuth2ErrorCodesExpand.USERNAME_NOT_FOUND,
					this.messages.getMessage("JdbcDaoImpl.notFound", new Object[] { authentication.getName() },
							"Username {0} not found"),
					""));
		}
		if (authenticationException instanceof BadCredentialsException) {
			return new OAuth2AuthenticationException(
					new OAuth2Error(OAuth2ErrorCodesExpand.BAD_CREDENTIALS, this.messages.getMessage(
							"AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials"), ""));
		}
		if (authenticationException instanceof LockedException) {
			return new OAuth2AuthenticationException(new OAuth2Error(OAuth2ErrorCodesExpand.USER_LOCKED, this.messages
				.getMessage("AbstractUserDetailsAuthenticationProvider.locked", "User account is locked"), ""));
		}
		if (authenticationException instanceof DisabledException) {
			return new OAuth2AuthenticationException(new OAuth2Error(OAuth2ErrorCodesExpand.USER_DISABLE,
					this.messages.getMessage("AbstractUserDetailsAuthenticationProvider.disabled", "User is disabled"),
					""));
		}
		if (authenticationException instanceof AccountExpiredException) {
			return new OAuth2AuthenticationException(new OAuth2Error(OAuth2ErrorCodesExpand.USER_EXPIRED, this.messages
				.getMessage("AbstractUserDetailsAuthenticationProvider.expired", "User account has expired"), ""));
		}
		if (authenticationException instanceof CredentialsExpiredException) {
			return new OAuth2AuthenticationException(new OAuth2Error(OAuth2ErrorCodesExpand.CREDENTIALS_EXPIRED,
					this.messages.getMessage("AbstractUserDetailsAuthenticationProvider.credentialsExpired",
							"User credentials have expired"),
					""));
		}
		if (authenticationException instanceof ScopeException) {
			return new OAuth2AuthenticationException(new OAuth2Error(OAuth2ErrorCodes.INVALID_SCOPE,
					this.messages.getMessage("AbstractAccessDecisionManager.accessDenied", "invalid_scope"), ""));
		}
		return new OAuth2AuthenticationException(OAuth2ErrorCodesExpand.UN_KNOW_LOGIN_ERROR);
	}

	/**
	 * 获取已认证的客户端主体,否则抛出无效客户端异常
	 * @param authentication 认证信息
	 * @return 已认证的客户端主体
	 * @throws OAuth2AuthenticationException 客户端未认证时抛出异常
	 */
	private OAuth2ClientAuthenticationToken getAuthenticatedClientElseThrowInvalidClient(
			Authentication authentication) {

		OAuth2ClientAuthenticationToken clientPrincipal = null;

		if (OAuth2ClientAuthenticationToken.class.isAssignableFrom(authentication.getPrincipal().getClass())) {
			clientPrincipal = (OAuth2ClientAuthenticationToken) authentication.getPrincipal();
		}

		if (clientPrincipal != null && clientPrincipal.isAuthenticated()) {
			return clientPrincipal;
		}

		throw new OAuth2AuthenticationException(OAuth2ErrorCodes.INVALID_CLIENT);
	}

}


================================================
FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/base/OAuth2ResourceOwnerBaseAuthenticationToken.java
================================================
package com.pig4cloud.pig.auth.support.base;

import lombok.Getter;
import org.springframework.lang.Nullable;
import org.springframework.security.authentication.AbstractAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.oauth2.core.AuthorizationGrantType;
import org.springframework.util.Assert;

import java.io.Serial;
import java.util.*;

/**
 * OAuth2资源所有者基础认证令牌抽象类
 *
 * @author lengleng
 * @date 2025/05/30
 */
public abstract class OAuth2ResourceOwnerBaseAuthenticationToken extends AbstractAuthenticationToken {

	@Serial
	private static final long serialVersionUID = 1L;

	@Getter
	private final AuthorizationGrantType authorizationGrantType;

	@Getter
	private final Authentication clientPrincipal;

	@Getter
	private final Set<String> scopes;

	@Getter
	private final Map<String, Object> additionalParameters;

	public OAuth2ResourceOwnerBaseAuthenticationToken(AuthorizationGrantType authorizationGrantType,
			Authentication clientPrincipal, @Nullable Set<String> scopes,
			@Nullable Map<String, Object> additionalParameters) {
		super(Collections.emptyList());
		Assert.notNull(authorizationGrantType, "authorizationGrantType cannot be null");
		Assert.notNull(clientPrincipal, "clientPrincipal cannot be null");
		this.authorizationGrantType = authorizationGrantType;
		this.clientPrincipal = clientPrincipal;
		this.scopes = Collections.unmodifiableSet(scopes != null ? new HashSet<>(scopes) : Collections.emptySet());
		this.additionalParameters = Collections.unmodifiableMap(
				additionalParameters != null ? new HashMap<>(additionalParameters) : Collections.emptyMap());
	}

	/**
	 * 扩展模式一般不需要密码
	 */
	@Override
	public Object getCredentials() {
		return "";
	}

	/**
	 * 获取用户名
	 */
	@Override
	public Object getPrincipal() {
		return this.clientPrincipal;
	}

}


================================================
FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/base/package-info.java
================================================
/**
 * 自定义认证模式接入的抽象实现
 */
package com.pig4cloud.pig.auth.support.base;


================================================
FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/core/CustomeOAuth2TokenCustomizer.java
================================================
package com.pig4cloud.pig.auth.support.core;

import com.pig4cloud.pig.common.core.constant.SecurityConstants;
import com.pig4cloud.pig.common.security.service.PigUser;
import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenClaimsContext;
import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenClaimsSet;
import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenCustomizer;

/**
 * OAuth2 Token 自定义增强实现类
 *
 * @author lengleng
 * @date 2025/05/30
 */
public class CustomeOAuth2TokenCustomizer implements OAuth2TokenCustomizer<OAuth2TokenClaimsContext> {

	/**
	 * 自定义OAuth 2.0 Token属性
	 * @param context 包含OAuth 2.0 Token属性的上下文
	 */
	@Override
	public void customize(OAuth2TokenClaimsContext context) {
		OAuth2TokenClaimsSet.Builder claims = context.getClaims();
		claims.claim(SecurityConstants.DETAILS_LICENSE, SecurityConstants.PROJECT_LICENSE);
		String clientId = context.getAuthorizationGrant().getName();
		claims.claim(SecurityConstants.CLIENT_ID, clientId);
		// 客户端模式不返回具体用户信息
		if (SecurityConstants.CLIENT_CREDENTIALS.equals(context.getAuthorizationGrantType().getValue())) {
			return;
		}

		PigUser pigUser = (PigUser) context.getPrincipal().getPrincipal();
		claims.claim(SecurityConstants.DETAILS_USER, pigUser);
		claims.claim(SecurityConstants.DETAILS_USER_ID, pigUser.getId());
		claims.claim(SecurityConstants.USERNAME, pigUser.getUsername());
	}

}


================================================
FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/core/FormIdentityLoginConfigurer.java
================================================
package com.pig4cloud.pig.auth.support.core;

import com.pig4cloud.pig.auth.support.handler.FormAuthenticationFailureHandler;
import com.pig4cloud.pig.auth.support.handler.SsoLogoutSuccessHandler;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;

/**
 * 基于授权码模式的统一认证登录配置类,适用于Spring Security和SAS
 *
 * @author lengleng
 * @date 2025/05/30
 */
public final class FormIdentityLoginConfigurer
		extends AbstractHttpConfigurer<FormIdentityLoginConfigurer, HttpSecurity> {

	@Override
	public void init(HttpSecurity http) throws Exception {
		http.formLogin(formLogin -> {
			formLogin.loginPage("/token/login");
			formLogin.loginProcessingUrl("/oauth2/form");
			formLogin.failureHandler(new FormAuthenticationFailureHandler());

		})
			.logout(logout -> logout.logoutUrl("/oauth2/logout")
				.logoutSuccessHandler(new SsoLogoutSuccessHandler())
				.deleteCookies("JSESSIONID")
				.invalidateHttpSession(true)) // SSO登出成功处理

			.csrf(AbstractHttpConfigurer::disable);
	}

}


================================================
FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/core/PigDaoAuthenticationProvider.java
================================================
package com.pig4cloud.pig.auth.support.core;

import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.pig4cloud.pig.common.core.util.WebUtils;
import com.pig4cloud.pig.common.security.service.PigUserDetailsService;
import jakarta.servlet.http.HttpServletRequest;
import lombok.SneakyThrows;
import org.springframework.core.Ordered;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.InternalAuthenticationServiceException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsPasswordService;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
import org.springframework.security.web.authentication.www.BasicAuthenticationConverter;
import org.springframework.util.Assert;

import java.util.Comparator;
import java.util.Map;
import java.util.Optional;
import java.util.function.Supplier;

import static com.pig4cloud.pig.common.core.constant.SecurityConstants.PASSWORD;

/**
 * 基于DAO的认证提供者实现,用于处理用户名密码认证
 *
 * @author lengleng
 * @date 2025/05/30
 */
public class PigDaoAuthenticationProvider extends AbstractUserDetailsAuthenticationProvider {

	/**
	 * 用户未找到时用于PasswordEncoder#matches(CharSequence, String)的明文密码,避免SEC-2056问题
	 */
	private static final String USER_NOT_FOUND_PASSWORD = "userNotFoundPassword";

	private final static BasicAuthenticationConverter basicConvert = new BasicAuthenticationConverter();

	/**
	 * 密码编码器
	 */
	private PasswordEncoder passwordEncoder;

	/**
	 * 用户未找到时的加密密码,用于避免SEC-2056问题,某些密码编码器在密码格式无效时会短路处理
	 */
	private volatile String userNotFoundEncodedPassword;

	private UserDetailsService userDetailsService;

	private UserDetailsPasswordService userDetailsPasswordService;

	public PigDaoAuthenticationProvider() {
		setMessageSource(SpringUtil.getBean("securityMessageSource"));
		setPasswordEncoder(PasswordEncoderFactories.createDelegatingPasswordEncoder());
	}

	/**
	 * 执行额外的身份验证检查
	 * @param userDetails 用户详细信息
	 * @param authentication 身份验证令牌
	 * @throws AuthenticationException 身份验证失败时抛出异常
	 */
	@Override
	protected void additionalAuthenticationChecks(UserDetails userDetails,
			UsernamePasswordAuthenticationToken authentication) throws AuthenticationException {

		// 只有密码模式需要校验密码
		String grantType = WebUtils.getRequest().get().getParameter(OAuth2ParameterNames.GRANT_TYPE);
		if (!StrUtil.equals(PASSWORD, grantType)) {
			return;
		}

		if (authentication.getCredentials() == null) {
			this.logger.debug("Failed to authenticate since no credentials provided");
			throw new BadCredentialsException(this.messages
				.getMessage("AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials"));
		}
		String presentedPassword = authentication.getCredentials().toString();
		if (!this.passwordEncoder.matches(presentedPassword, userDetails.getPassword())) {
			this.logger.debug("Failed to authenticate since password does not match stored value");
			throw new BadCredentialsException(this.messages
				.getMessage("AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials"));
		}
	}

	/**
	 * 根据用户名检索用户详情
	 * @param username 用户名
	 * @param authentication 认证令牌
	 * @return 用户详情信息
	 * @throws InternalAuthenticationServiceException
	 * 当无法获取请求、未注册UserDetailsService或加载用户失败时抛出
	 * @throws UsernameNotFoundException 当用户名不存在时抛出
	 */
	@SneakyThrows
	@Override
	protected final UserDetails retrieveUser(String username, UsernamePasswordAuthenticationToken authentication) {
		prepareTimingAttackProtection();
		HttpServletRequest request = WebUtils.getRequest()
			.orElseThrow(
					(Supplier<Throwable>) () -> new InternalAuthenticationServiceException("web request is empty"));

		String grantType = WebUtils.getRequest().get().getParameter(OAuth2ParameterNames.GRANT_TYPE);
		String clientId = WebUtils.getRequest().get().getParameter(OAuth2ParameterNames.CLIENT_ID);

		if (StrUtil.isBlank(clientId)) {
			clientId = Optional.ofNullable(basicConvert.convert(request))
				.map(UsernamePasswordAuthenticationToken::getName)
				.orElse(null);
		}

		Map<String, PigUserDetailsService> userDetailsServiceMap = SpringUtil
			.getBeansOfType(PigUserDetailsService.class);

		String finalClientId = clientId;
		Optional<PigUserDetailsService> optional = userDetailsServiceMap.values()
			.stream()
			.filter(service -> service.support(finalClientId, grantType))
			.max(Comparator.comparingInt(Ordered::getOrder));

		if (optional.isEmpty()) {
			throw new InternalAuthenticationServiceException("UserDetailsService error , not register");
		}

		try {
			UserDetails loadedUser = optional.get().loadUserByUsername(username);
			if (loadedUser == null) {
				throw new InternalAuthenticationServiceException(
						"UserDetailsService returned null, which is an interface contract violation");
			}
			return loadedUser;
		}
		catch (UsernameNotFoundException ex) {
			mitigateAgainstTimingAttack(authentication);
			throw ex;
		}
		catch (InternalAuthenticationServiceException ex) {
			throw ex;
		}
		catch (Exception ex) {
			throw new InternalAuthenticationServiceException(ex.getMessage(), ex);
		}
	}

	/**
	 * 创建认证成功后的Authentication对象
	 * @param principal 认证主体
	 * @param authentication 认证信息
	 * @param user 用户详情
	 * @return 认证成功后的Authentication对象
	 */
	@Override
	protected Authentication createSuccessAuthentication(Object principal, Authentication authentication,
			UserDetails user) {
		boolean upgradeEncoding = this.userDetailsPasswordService != null
				&& this.passwordEncoder.upgradeEncoding(user.getPassword());
		if (upgradeEncoding) {
			String presentedPassword = authentication.getCredentials().toString();
			String newPassword = this.passwordEncoder.encode(presentedPassword);
			user = this.userDetailsPasswordService.updatePassword(user, newPassword);
		}
		return super.createSuccessAuthentication(principal, authentication, user);
	}

	/**
	 * 准备定时攻击保护,如果未找到用户编码密码为空则进行编码
	 */
	private void prepareTimingAttackProtection() {
		if (this.userNotFoundEncodedPassword == null) {
			this.userNotFoundEncodedPassword = this.passwordEncoder.encode(USER_NOT_FOUND_PASSWORD);
		}
	}

	/**
	 * 防止时序攻击的缓解措施
	 * @param authentication 用户名密码认证令牌
	 */
	private void mitigateAgainstTimingAttack(UsernamePasswordAuthenticationToken authentication) {
		if (authentication.getCredentials() != null) {
			String presentedPassword = authentication.getCredentials().toString();
			this.passwordEncoder.matches(presentedPassword, this.userNotFoundEncodedPassword);
		}
	}

	/**
	 * 设置用于编码和验证密码的PasswordEncoder实例
	 * @param passwordEncoder 密码编码器实例,不能为null
	 */
	public void setPasswordEncoder(PasswordEncoder passwordEncoder) {
		Assert.notNull(passwordEncoder, "passwordEncoder cannot be null");
		this.passwordEncoder = passwordEncoder;
		this.userNotFoundEncodedPassword = null;
	}

	protected PasswordEncoder getPasswordEncoder() {
		return this.passwordEncoder;
	}

	/**
	 * 设置用户详情服务
	 * @param userDetailsService 用户详情服务
	 */
	public void setUserDetailsService(UserDetailsService userDetailsService) {
		this.userDetailsService = userDetailsService;
	}

	protected UserDetailsService getUserDetailsService() {
		return this.userDetailsService;
	}

	/**
	 * 设置用户详情密码服务
	 * @param userDetailsPasswordService 用户详情密码服务
	 */
	public void setUserDetailsPasswordService(UserDetailsPasswordService userDetailsPasswordService) {
		this.userDetailsPasswordService = userDetailsPasswordService;
	}

}


================================================
FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/filter/AuthSecurityConfigProperties.java
================================================
package com.pig4cloud.pig.auth.support.filter;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 安全认证配置属性类
 *
 * <p>
 * 用于配置网关安全相关属性
 * </p>
 *
 * @author lengleng
 * @date 2025/05/30
 * @since 2020/10/4
 */
@Data
@Component
@RefreshScope
@ConfigurationProperties("security")
public class AuthSecurityConfigProperties {

	/**
	 * 是否是微服务架构
	 */
	private boolean isMicro;

	/**
	 * 网关解密登录前端密码 秘钥
	 */
	private String encodeKey;

	/**
	 * 网关不需要校验验证码的客户端
	 */
	private List<String> ignoreClients;

}


================================================
FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/filter/PasswordDecoderFilter.java
================================================
/*
 * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.pig4cloud.pig.auth.support.filter;

import java.io.IOException;
import java.util.Map;

import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;

import com.pig4cloud.pig.common.core.constant.SecurityConstants;
import com.pig4cloud.pig.common.core.servlet.RepeatBodyRequestWrapper;

import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.AES;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;

/**
 * 密码解密过滤器:用于处理登录请求中的密码解密
 *
 * @author lengleng
 * @date 2025/05/30
 */
@Component
@RequiredArgsConstructor
public class PasswordDecoderFilter extends OncePerRequestFilter {

	private final AuthSecurityConfigProperties authSecurityConfigProperties;

	private static final String PASSWORD = "password";

	private static final String KEY_ALGORITHM = "AES";

	static {
		// 关闭hutool 强制关闭Bouncy Castle库的依赖
		SecureUtil.disableBouncyCastle();
	}

	/**
	 * 过滤器内部处理逻辑,用于处理登录请求中的密码解密
	 * @param request HTTP请求对象
	 * @param response HTTP响应对象
	 * @param chain 过滤器链
	 * @throws ServletException 如果发生servlet相关异常
	 * @throws IOException 如果发生I/O异常
	 */
	@Override
	protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
			throws ServletException, IOException {
		// 不是登录请求,直接向下执行
		if (!StrUtil.containsAnyIgnoreCase(request.getRequestURI(), SecurityConstants.OAUTH_TOKEN_URL)) {
			chain.doFilter(request, response);
			return;
		}

		// 将请求流转换为可多次读取的请求流
		RepeatBodyRequestWrapper requestWrapper = new RepeatBodyRequestWrapper(request);
		Map<String, String[]> parameterMap = requestWrapper.getParameterMap();

		// 构建前端对应解密AES 因子
		AES aes = new AES(Mode.CFB, Padding.NoPadding,
				new SecretKeySpec(authSecurityConfigProperties.getEncodeKey().getBytes(), KEY_ALGORITHM),
				new IvParameterSpec(authSecurityConfigProperties.getEncodeKey().getBytes()));

		parameterMap.forEach((k, v) -> {
			String[] values = parameterMap.get(k);
			if (!PASSWORD.equals(k) || ArrayUtil.isEmpty(values)) {
				return;
			}

			// 解密密码
			String decryptPassword = aes.decryptStr(values[0]);
			parameterMap.put(k, new String[] { decryptPassword });
		});
		chain.doFilter(requestWrapper, response);
	}

}


================================================
FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/filter/ValidateCodeFilter.java
================================================
package com.pig4cloud.pig.auth.support.filter;

import java.io.IOException;
import java.util.Optional;

import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;

import com.pig4cloud.pig.common.core.constant.CacheConstants;
import com.pig4cloud.pig.common.core.constant.SecurityConstants;
import com.pig4cloud.pig.common.core.exception.ValidateCodeException;
import com.pig4cloud.pig.common.core.util.RedisUtils;
import com.pig4cloud.pig.common.core.util.WebUtils;

/**
 * 登录前处理器
 *
 * @author lengleng
 * @date 2024/4/3
 */

import cn.hutool.core.util.StrUtil;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;

/**
 * 验证码过滤器:用于处理登录请求中的验证码校验
 *
 * @author lengleng
 * @date 2025/05/30
 */
@Component
@RequiredArgsConstructor
public class ValidateCodeFilter extends OncePerRequestFilter {

	private final AuthSecurityConfigProperties authSecurityConfigProperties;

	/**
	 * 过滤器内部处理逻辑,用于验证码校验
	 * @param request HTTP请求
	 * @param response HTTP响应
	 * @param filterChain 过滤器链
	 * @throws ServletException Servlet异常
	 * @throws IOException IO异常
	 */
	@Override
	protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
			throws ServletException, IOException {

		String requestUrl = request.getServletPath();

		// 不是登录URL 请求直接跳过
		if (!SecurityConstants.OAUTH_TOKEN_URL.equals(requestUrl)) {
			filterChain.doFilter(request, response);
			return;
		}

		// 如果登录URL 但是刷新token的请求,直接向下执行
		String grantType = request.getParameter(OAuth2ParameterNames.GRANT_TYPE);
		if (StrUtil.equals(SecurityConstants.REFRESH_TOKEN, grantType)) {
			filterChain.doFilter(request, response);
			return;
		}

		// 如果是密码模式 && 客户端不需要校验验证码
		boolean isIgnoreClient = authSecurityConfigProperties.getIgnoreClients().contains(WebUtils.getClientId());
		if (StrUtil.equalsAnyIgnoreCase(grantType, SecurityConstants.PASSWORD, SecurityConstants.CLIENT_CREDENTIALS,
				SecurityConstants.AUTHORIZATION_CODE) && isIgnoreClient) {
			filterChain.doFilter(request, response);
			return;
		}

		// 校验验证码 1. 客户端开启验证码 2. 短信模式
		try {
			checkCode();
			filterChain.doFilter(request, response);
		}
		catch (ValidateCodeException validateCodeException) {
			throw new OAuth2AuthenticationException(validateCodeException.getMessage());
		}
	}

	/**
	 * 校验验证码
	 */
	private void checkCode() throws ValidateCodeException {
		Optional<HttpServletRequest> request = WebUtils.getRequest();
		String code = request.get().getParameter("code");

		if (StrUtil.isBlank(code)) {
			throw new ValidateCodeException("验证码不能为空");
		}

		String randomStr = request.get().getParameter("randomStr");

		// https://gitee.com/log4j/pig/issues/IWA0D
		String mobile = request.get().getParameter("mobile");
		if (StrUtil.isNotBlank(mobile)) {
			randomStr = mobile;
		}

		String key = CacheConstants.DEFAULT_CODE_KEY + randomStr;
		if (!RedisUtils.hasKey(key)) {
			throw new ValidateCodeException("验证码不合法");
		}

		String saveCode = RedisUtils.get(key);

		if (StrUtil.isBlank(saveCode)) {
			RedisUtils.delete(key);
			throw new ValidateCodeException("验证码不合法");
		}

		if (!StrUtil.equals(saveCode, code)) {
			RedisUtils.delete(key);
			throw new ValidateCodeException("验证码不合法");
		}
	}

}


================================================
FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/FormAuthenticationFailureHandler.java
================================================
/*
 * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.pig4cloud.pig.auth.support.handler;

import cn.hutool.core.util.CharsetUtil;
import cn.hutool.http.HttpUtil;
import com.pig4cloud.pig.common.core.util.WebUtils;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.authentication.AuthenticationFailureHandler;

import java.io.IOException;

/**
 * 表单登录失败处理逻辑
 *
 * @author lengleng
 * @date 2025/05/30
 */
@Slf4j
public class FormAuthenticationFailureHandler implements AuthenticationFailureHandler {

	/**
	 * 当认证失败时调用
	 * @param request 认证尝试发生的请求
	 * @param response 响应对象
	 * @param exception 拒绝认证时抛出的异常
	 */
	@Override
	@SneakyThrows
	public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response,
			AuthenticationException exception) {
		log.debug("表单登录失败:{}", exception.getLocalizedMessage());

		// 获取当前请求的context-path
		String contextPath = request.getContextPath();

		// 构建重定向URL,加入context-path
		String url = HttpUtil.encodeParams(
Download .txt
gitextract_fxd_qqx7/

├── .editorconfig
├── .gitee/
│   └── ISSUE_TEMPLATE/
│       ├── config.yml
│       └── issue.yml
├── .github/
│   ├── renovate.json
│   └── workflows/
│       ├── github-release.yml
│       ├── image.yml
│       ├── maven.yml
│       └── mirror.yml
├── .gitignore
├── LICENSE
├── README.md
├── db/
│   ├── Dockerfile
│   ├── pig.sql
│   └── pig_config.sql
├── docker-compose.yml
├── pig-auth/
│   ├── Dockerfile
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── pig4cloud/
│           │           └── pig/
│           │               └── auth/
│           │                   ├── PigAuthApplication.java
│           │                   ├── config/
│           │                   │   └── AuthorizationServerConfiguration.java
│           │                   ├── endpoint/
│           │                   │   ├── ImageCodeEndpoint.java
│           │                   │   └── PigTokenEndpoint.java
│           │                   └── support/
│           │                       ├── CustomeOAuth2AccessTokenGenerator.java
│           │                       ├── base/
│           │                       │   ├── OAuth2ResourceOwnerBaseAuthenticationConverter.java
│           │                       │   ├── OAuth2ResourceOwnerBaseAuthenticationProvider.java
│           │                       │   ├── OAuth2ResourceOwnerBaseAuthenticationToken.java
│           │                       │   └── package-info.java
│           │                       ├── core/
│           │                       │   ├── CustomeOAuth2TokenCustomizer.java
│           │                       │   ├── FormIdentityLoginConfigurer.java
│           │                       │   └── PigDaoAuthenticationProvider.java
│           │                       ├── filter/
│           │                       │   ├── AuthSecurityConfigProperties.java
│           │                       │   ├── PasswordDecoderFilter.java
│           │                       │   └── ValidateCodeFilter.java
│           │                       ├── handler/
│           │                       │   ├── FormAuthenticationFailureHandler.java
│           │                       │   ├── PigAuthenticationFailureEventHandler.java
│           │                       │   ├── PigAuthenticationSuccessEventHandler.java
│           │                       │   ├── PigLogoutSuccessEventHandler.java
│           │                       │   └── SsoLogoutSuccessHandler.java
│           │                       ├── password/
│           │                       │   ├── OAuth2ResourceOwnerPasswordAuthenticationConverter.java
│           │                       │   ├── OAuth2ResourceOwnerPasswordAuthenticationProvider.java
│           │                       │   ├── OAuth2ResourceOwnerPasswordAuthenticationToken.java
│           │                       │   └── package-info.java
│           │                       └── sms/
│           │                           ├── OAuth2ResourceOwnerSmsAuthenticationConverter.java
│           │                           ├── OAuth2ResourceOwnerSmsAuthenticationProvider.java
│           │                           ├── OAuth2ResourceOwnerSmsAuthenticationToken.java
│           │                           └── package-info.java
│           └── resources/
│               ├── application.yml
│               ├── logback-spring.xml
│               └── templates/
│                   └── ftl/
│                       ├── confirm.ftl
│                       ├── layout/
│                       │   └── base.ftl
│                       └── login.ftl
├── pig-boot/
│   ├── Dockerfile
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── pig4cloud/
│           │           └── pig/
│           │               └── PigBootApplication.java
│           └── resources/
│               ├── application-dev.yml
│               ├── application.yml
│               └── logback-spring.xml
├── pig-common/
│   ├── pig-common-bom/
│   │   └── pom.xml
│   ├── pig-common-core/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── common/
│   │           │                   └── core/
│   │           │                       ├── config/
│   │           │                       │   ├── JacksonConfiguration.java
│   │           │                       │   ├── RedisTemplateConfiguration.java
│   │           │                       │   ├── RestTemplateConfiguration.java
│   │           │                       │   └── WebMvcConfiguration.java
│   │           │                       ├── constant/
│   │           │                       │   ├── CacheConstants.java
│   │           │                       │   ├── CommonConstants.java
│   │           │                       │   ├── SecurityConstants.java
│   │           │                       │   ├── ServiceNameConstants.java
│   │           │                       │   └── enums/
│   │           │                       │       ├── DictTypeEnum.java
│   │           │                       │       ├── LoginTypeEnum.java
│   │           │                       │       └── MenuTypeEnum.java
│   │           │                       ├── exception/
│   │           │                       │   ├── CheckedException.java
│   │           │                       │   ├── ErrorCodes.java
│   │           │                       │   ├── PigDeniedException.java
│   │           │                       │   └── ValidateCodeException.java
│   │           │                       ├── factory/
│   │           │                       │   └── YamlPropertySourceFactory.java
│   │           │                       ├── jackson/
│   │           │                       │   └── PigJavaTimeModule.java
│   │           │                       ├── servlet/
│   │           │                       │   └── RepeatBodyRequestWrapper.java
│   │           │                       └── util/
│   │           │                           ├── ClassUtils.java
│   │           │                           ├── MsgUtils.java
│   │           │                           ├── R.java
│   │           │                           ├── RedisUtils.java
│   │           │                           ├── RetOps.java
│   │           │                           ├── SpringContextHolder.java
│   │           │                           └── WebUtils.java
│   │           └── resources/
│   │               ├── META-INF/
│   │               │   └── spring/
│   │               │       └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│   │               ├── banner.txt
│   │               ├── i18n/
│   │               │   └── messages_zh_CN.properties
│   │               └── logback-spring.xml
│   ├── pig-common-datasource/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           └── java/
│   │               └── com/
│   │                   └── pig4cloud/
│   │                       └── pig/
│   │                           └── common/
│   │                               └── datasource/
│   │                                   ├── DynamicDataSourceAutoConfiguration.java
│   │                                   ├── annotation/
│   │                                   │   └── EnableDynamicDataSource.java
│   │                                   ├── config/
│   │                                   │   ├── ClearTtlDataSourceFilter.java
│   │                                   │   ├── DataSourceProperties.java
│   │                                   │   ├── JdbcDynamicDataSourceProvider.java
│   │                                   │   ├── LastParamDsProcessor.java
│   │                                   │   └── MasterDataSourceProvider.java
│   │                                   ├── support/
│   │                                   │   └── DataSourceConstants.java
│   │                                   └── util/
│   │                                       ├── DsConfTypeEnum.java
│   │                                       └── DsJdbcUrlEnum.java
│   ├── pig-common-excel/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── common/
│   │           │                   └── excel/
│   │           │                       ├── ExcelAutoConfiguration.java
│   │           │                       └── provider/
│   │           │                           ├── RemoteDictApiService.java
│   │           │                           └── RemoteDictDataProvider.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── spring/
│   │                       └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│   ├── pig-common-feign/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   ├── com/
│   │           │   │   └── pig4cloud/
│   │           │   │       └── pig/
│   │           │   │           └── common/
│   │           │   │               └── feign/
│   │           │   │                   ├── PigFeignAutoConfiguration.java
│   │           │   │                   ├── annotation/
│   │           │   │                   │   ├── EnablePigFeignClients.java
│   │           │   │                   │   └── NoToken.java
│   │           │   │                   ├── core/
│   │           │   │                   │   ├── PigFeignInnerRequestInterceptor.java
│   │           │   │                   │   └── PigFeignRequestCloseInterceptor.java
│   │           │   │                   └── sentinel/
│   │           │   │                       ├── SentinelAutoConfiguration.java
│   │           │   │                       ├── ext/
│   │           │   │                       │   ├── PigSentinelFeign.java
│   │           │   │                       │   └── PigSentinelInvocationHandler.java
│   │           │   │                       ├── handle/
│   │           │   │                       │   ├── GlobalBizExceptionHandler.java
│   │           │   │                       │   └── PigUrlBlockHandler.java
│   │           │   │                       └── parser/
│   │           │   │                           └── PigHeaderRequestOriginParser.java
│   │           │   └── org/
│   │           │       └── springframework/
│   │           │           └── cloud/
│   │           │               └── openfeign/
│   │           │                   └── PigFeignClientsRegistrar.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── spring/
│   │                       └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│   ├── pig-common-log/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── common/
│   │           │                   └── log/
│   │           │                       ├── LogAutoConfiguration.java
│   │           │                       ├── annotation/
│   │           │                       │   └── SysLog.java
│   │           │                       ├── aspect/
│   │           │                       │   └── SysLogAspect.java
│   │           │                       ├── config/
│   │           │                       │   └── PigLogProperties.java
│   │           │                       ├── event/
│   │           │                       │   ├── SysLogEvent.java
│   │           │                       │   ├── SysLogEventSource.java
│   │           │                       │   └── SysLogListener.java
│   │           │                       ├── init/
│   │           │                       │   └── ApplicationLoggerInitializer.java
│   │           │                       └── util/
│   │           │                           ├── LogTypeEnum.java
│   │           │                           └── SysLogUtils.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   ├── spring/
│   │                   │   └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│   │                   ├── spring-configuration-metadata.json
│   │                   └── spring.factories
│   ├── pig-common-mybatis/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── common/
│   │           │                   └── mybatis/
│   │           │                       ├── MybatisAutoConfiguration.java
│   │           │                       ├── base/
│   │           │                       │   └── BaseEntity.java
│   │           │                       ├── config/
│   │           │                       │   └── MybatisPlusMetaObjectHandler.java
│   │           │                       ├── handler/
│   │           │                       │   ├── JsonLongArrayTypeHandler.java
│   │           │                       │   └── JsonStringArrayTypeHandler.java
│   │           │                       ├── plugins/
│   │           │                       │   └── PigPaginationInnerInterceptor.java
│   │           │                       └── resolver/
│   │           │                           └── SqlFilterArgumentResolver.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── spring/
│   │                       └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│   ├── pig-common-oss/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── common/
│   │           │                   └── file/
│   │           │                       ├── FileAutoConfiguration.java
│   │           │                       ├── core/
│   │           │                       │   ├── FileProperties.java
│   │           │                       │   └── FileTemplate.java
│   │           │                       ├── local/
│   │           │                       │   ├── LocalFileAutoConfiguration.java
│   │           │                       │   ├── LocalFileProperties.java
│   │           │                       │   └── LocalFileTemplate.java
│   │           │                       └── oss/
│   │           │                           ├── OssAutoConfiguration.java
│   │           │                           ├── OssProperties.java
│   │           │                           ├── http/
│   │           │                           │   └── OssEndpoint.java
│   │           │                           └── service/
│   │           │                               └── OssTemplate.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── spring/
│   │                       └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│   ├── pig-common-seata/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── common/
│   │           │                   └── seata/
│   │           │                       └── config/
│   │           │                           └── SeataAutoConfiguration.java
│   │           └── resources/
│   │               ├── META-INF/
│   │               │   └── spring/
│   │               │       └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│   │               └── seata-config.yml
│   ├── pig-common-security/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── common/
│   │           │                   └── security/
│   │           │                       ├── annotation/
│   │           │                       │   ├── EnablePigResourceServer.java
│   │           │                       │   ├── HasPermission.java
│   │           │                       │   └── Inner.java
│   │           │                       ├── component/
│   │           │                       │   ├── PermissionService.java
│   │           │                       │   ├── PermitAllUrlProperties.java
│   │           │                       │   ├── PigBearerTokenExtractor.java
│   │           │                       │   ├── PigBootCorsProperties.java
│   │           │                       │   ├── PigClientCredentialsOAuth2AuthenticatedPrincipal.java
│   │           │                       │   ├── PigCustomOAuth2AccessTokenResponseHttpMessageConverter.java
│   │           │                       │   ├── PigCustomOpaqueTokenIntrospector.java
│   │           │                       │   ├── PigResourceServerAutoConfiguration.java
│   │           │                       │   ├── PigResourceServerConfiguration.java
│   │           │                       │   ├── PigSecurityInnerAspect.java
│   │           │                       │   ├── PigSecurityMessageSourceConfiguration.java
│   │           │                       │   └── ResourceAuthExceptionEntryPoint.java
│   │           │                       ├── feign/
│   │           │                       │   ├── PigFeignClientConfiguration.java
│   │           │                       │   └── PigOAuthRequestInterceptor.java
│   │           │                       ├── service/
│   │           │                       │   ├── PigAppUserDetailsServiceImpl.java
│   │           │                       │   ├── PigRedisOAuth2AuthorizationConsentService.java
│   │           │                       │   ├── PigRedisOAuth2AuthorizationService.java
│   │           │                       │   ├── PigRemoteRegisteredClientRepository.java
│   │           │                       │   ├── PigUser.java
│   │           │                       │   ├── PigUserDetailsService.java
│   │           │                       │   └── PigUserDetailsServiceImpl.java
│   │           │                       └── util/
│   │           │                           ├── OAuth2EndpointUtils.java
│   │           │                           ├── OAuth2ErrorCodesExpand.java
│   │           │                           ├── OAuthClientException.java
│   │           │                           ├── ScopeException.java
│   │           │                           └── SecurityUtils.java
│   │           └── resources/
│   │               ├── META-INF/
│   │               │   └── spring/
│   │               │       └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│   │               └── i18n/
│   │                   └── errors/
│   │                       └── messages_zh_CN.properties
│   ├── pig-common-swagger/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── common/
│   │           │                   └── swagger/
│   │           │                       ├── annotation/
│   │           │                       │   └── EnablePigDoc.java
│   │           │                       ├── config/
│   │           │                       │   ├── OpenAPIDefinition.java
│   │           │                       │   ├── OpenAPIDefinitionImportSelector.java
│   │           │                       │   └── OpenAPIMetadataConfiguration.java
│   │           │                       └── support/
│   │           │                           └── SwaggerProperties.java
│   │           └── resources/
│   │               └── openapi-config.yaml
│   ├── pig-common-websocket/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── common/
│   │           │                   └── websocket/
│   │           │                       ├── config/
│   │           │                       │   ├── LocalMessageDistributorConfiguration.java
│   │           │                       │   ├── MessageDistributorTypeConstants.java
│   │           │                       │   ├── RedisMessageDistributorConfiguration.java
│   │           │                       │   ├── WebSocketAutoConfiguration.java
│   │           │                       │   ├── WebSocketHandlerConfig.java
│   │           │                       │   ├── WebSocketMessageSender.java
│   │           │                       │   └── WebSocketProperties.java
│   │           │                       ├── custom/
│   │           │                       │   ├── PigxSessionKeyGenerator.java
│   │           │                       │   └── UserAttributeHandshakeInterceptor.java
│   │           │                       ├── distribute/
│   │           │                       │   ├── LocalMessageDistributor.java
│   │           │                       │   ├── MessageDO.java
│   │           │                       │   ├── MessageDistributor.java
│   │           │                       │   ├── MessageSender.java
│   │           │                       │   ├── RedisMessageDistributor.java
│   │           │                       │   └── RedisWebsocketMessageListener.java
│   │           │                       ├── handler/
│   │           │                       │   ├── CustomPlanTextMessageHandler.java
│   │           │                       │   ├── CustomWebSocketHandler.java
│   │           │                       │   ├── JsonMessageHandler.java
│   │           │                       │   ├── PingJsonMessageHandler.java
│   │           │                       │   └── PlanTextMessageHandler.java
│   │           │                       ├── holder/
│   │           │                       │   ├── JsonMessageHandlerHolder.java
│   │           │                       │   ├── MapSessionWebSocketHandlerDecorator.java
│   │           │                       │   ├── SessionKeyGenerator.java
│   │           │                       │   └── WebSocketSessionHolder.java
│   │           │                       ├── message/
│   │           │                       │   ├── AbstractJsonWebSocketMessage.java
│   │           │                       │   ├── JsonWebSocketMessage.java
│   │           │                       │   ├── PingJsonWebSocketMessage.java
│   │           │                       │   ├── PongJsonWebSocketMessage.java
│   │           │                       │   └── WebSocketMessageTypeEnum.java
│   │           │                       └── package-info.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── spring/
│   │                       └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│   ├── pig-common-xss/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── common/
│   │           │                   └── xss/
│   │           │                       ├── PigXssAutoConfiguration.java
│   │           │                       ├── config/
│   │           │                       │   ├── PigXssProperties.java
│   │           │                       │   └── package-info.java
│   │           │                       ├── core/
│   │           │                       │   ├── DefaultXssCleaner.java
│   │           │                       │   ├── FormXssClean.java
│   │           │                       │   ├── FromXssException.java
│   │           │                       │   ├── JacksonXssClean.java
│   │           │                       │   ├── JacksonXssException.java
│   │           │                       │   ├── XssCleanDeserializer.java
│   │           │                       │   ├── XssCleanDeserializerBase.java
│   │           │                       │   ├── XssCleanIgnore.java
│   │           │                       │   ├── XssCleanInterceptor.java
│   │           │                       │   ├── XssCleaner.java
│   │           │                       │   ├── XssException.java
│   │           │                       │   ├── XssHolder.java
│   │           │                       │   └── XssType.java
│   │           │                       ├── package-info.java
│   │           │                       └── utils/
│   │           │                           ├── XssUtil.java
│   │           │                           └── package-info.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   ├── spring/
│   │                   │   └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│   │                   └── spring-configuration-metadata.json
│   └── pom.xml
├── pig-gateway/
│   ├── Dockerfile
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── pig4cloud/
│           │           └── pig/
│           │               └── gateway/
│           │                   ├── PigGatewayApplication.java
│           │                   ├── config/
│           │                   │   ├── GatewayConfiguration.java
│           │                   │   ├── RateLimiterConfiguration.java
│           │                   │   └── SpringDocConfiguration.java
│           │                   ├── filter/
│           │                   │   └── PigRequestGlobalFilter.java
│           │                   └── handler/
│           │                       └── GlobalExceptionHandler.java
│           └── resources/
│               ├── application.yml
│               └── logback-spring.xml
├── pig-register/
│   ├── Dockerfile
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── alibaba/
│           │           └── nacos/
│           │               └── bootstrap/
│           │                   └── PigNacosApplication.java
│           └── resources/
│               ├── application.properties
│               └── logback-spring.xml
├── pig-upms/
│   ├── pig-upms-api/
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── admin/
│   │           │                   └── api/
│   │           │                       ├── dto/
│   │           │                       │   ├── RegisterUserDTO.java
│   │           │                       │   ├── SysLogDTO.java
│   │           │                       │   ├── UserDTO.java
│   │           │                       │   └── UserInfo.java
│   │           │                       ├── entity/
│   │           │                       │   ├── SysDept.java
│   │           │                       │   ├── SysDeptRelation.java
│   │           │                       │   ├── SysDict.java
│   │           │                       │   ├── SysDictItem.java
│   │           │                       │   ├── SysFile.java
│   │           │                       │   ├── SysLog.java
│   │           │                       │   ├── SysMenu.java
│   │           │                       │   ├── SysOauthClientDetails.java
│   │           │                       │   ├── SysPost.java
│   │           │                       │   ├── SysPublicParam.java
│   │           │                       │   ├── SysRole.java
│   │           │                       │   ├── SysRoleMenu.java
│   │           │                       │   ├── SysUser.java
│   │           │                       │   ├── SysUserPost.java
│   │           │                       │   └── SysUserRole.java
│   │           │                       ├── feign/
│   │           │                       │   ├── RemoteClientDetailsService.java
│   │           │                       │   ├── RemoteDictService.java
│   │           │                       │   ├── RemoteLogService.java
│   │           │                       │   ├── RemoteParamService.java
│   │           │                       │   ├── RemoteTokenService.java
│   │           │                       │   └── RemoteUserService.java
│   │           │                       ├── util/
│   │           │                       │   ├── DictResolver.java
│   │           │                       │   └── ParamResolver.java
│   │           │                       └── vo/
│   │           │                           ├── DeptExcelVo.java
│   │           │                           ├── PostExcelVO.java
│   │           │                           ├── PreLogVO.java
│   │           │                           ├── RoleExcelVO.java
│   │           │                           ├── RoleVO.java
│   │           │                           ├── TokenVo.java
│   │           │                           ├── UserExcelVO.java
│   │           │                           └── UserVO.java
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── spring/
│   │                       └── org.springframework.cloud.openfeign.FeignClient.imports
│   ├── pig-upms-biz/
│   │   ├── Dockerfile
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── admin/
│   │           │                   ├── PigAdminApplication.java
│   │           │                   ├── controller/
│   │           │                   │   ├── SysClientController.java
│   │           │                   │   ├── SysDeptController.java
│   │           │                   │   ├── SysDictController.java
│   │           │                   │   ├── SysFileController.java
│   │           │                   │   ├── SysLogController.java
│   │           │                   │   ├── SysMenuController.java
│   │           │                   │   ├── SysMobileController.java
│   │           │                   │   ├── SysPostController.java
│   │           │                   │   ├── SysPublicParamController.java
│   │           │                   │   ├── SysRegisterController.java
│   │           │                   │   ├── SysRoleController.java
│   │           │                   │   ├── SysSystemInfoController.java
│   │           │                   │   ├── SysTokenController.java
│   │           │                   │   └── SysUserController.java
│   │           │                   ├── mapper/
│   │           │                   │   ├── SysDeptMapper.java
│   │           │                   │   ├── SysDictItemMapper.java
│   │           │                   │   ├── SysDictMapper.java
│   │           │                   │   ├── SysFileMapper.java
│   │           │                   │   ├── SysLogMapper.java
│   │           │                   │   ├── SysMenuMapper.java
│   │           │                   │   ├── SysOauthClientDetailsMapper.java
│   │           │                   │   ├── SysPostMapper.java
│   │           │                   │   ├── SysPublicParamMapper.java
│   │           │                   │   ├── SysRoleMapper.java
│   │           │                   │   ├── SysRoleMenuMapper.java
│   │           │                   │   ├── SysUserMapper.java
│   │           │                   │   ├── SysUserPostMapper.java
│   │           │                   │   └── SysUserRoleMapper.java
│   │           │                   └── service/
│   │           │                       ├── SysDeptService.java
│   │           │                       ├── SysDictItemService.java
│   │           │                       ├── SysDictService.java
│   │           │                       ├── SysFileService.java
│   │           │                       ├── SysLogService.java
│   │           │                       ├── SysMenuService.java
│   │           │                       ├── SysMobileService.java
│   │           │                       ├── SysOauthClientDetailsService.java
│   │           │                       ├── SysPostService.java
│   │           │                       ├── SysPublicParamService.java
│   │           │                       ├── SysRoleMenuService.java
│   │           │                       ├── SysRoleService.java
│   │           │                       ├── SysUserRoleService.java
│   │           │                       ├── SysUserService.java
│   │           │                       └── impl/
│   │           │                           ├── SysDeptServiceImpl.java
│   │           │                           ├── SysDictItemServiceImpl.java
│   │           │                           ├── SysDictServiceImpl.java
│   │           │                           ├── SysFileServiceImpl.java
│   │           │                           ├── SysLogServiceImpl.java
│   │           │                           ├── SysMenuServiceImpl.java
│   │           │                           ├── SysMobileServiceImpl.java
│   │           │                           ├── SysOauthClientDetailsServiceImpl.java
│   │           │                           ├── SysPostServiceImpl.java
│   │           │                           ├── SysPublicParamServiceImpl.java
│   │           │                           ├── SysRoleMenuServiceImpl.java
│   │           │                           ├── SysRoleServiceImpl.java
│   │           │                           ├── SysUserRoleServiceImpl.java
│   │           │                           └── SysUserServiceImpl.java
│   │           └── resources/
│   │               ├── application.yml
│   │               ├── file/
│   │               │   ├── approle.xlsx
│   │               │   ├── dept.xlsx
│   │               │   ├── post.xlsx
│   │               │   ├── role.xlsx
│   │               │   └── user.xlsx
│   │               ├── logback-spring.xml
│   │               └── mapper/
│   │                   ├── SysDeptMapper.xml
│   │                   ├── SysMenuMapper.xml
│   │                   ├── SysPostMapper.xml
│   │                   ├── SysRoleMapper.xml
│   │                   └── SysUserMapper.xml
│   └── pom.xml
├── pig-visual/
│   ├── pig-codegen/
│   │   ├── Dockerfile
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── codegen/
│   │           │                   ├── PigCodeGenApplication.java
│   │           │                   ├── config/
│   │           │                   │   └── PigCodeGenDefaultProperties.java
│   │           │                   ├── controller/
│   │           │                   │   ├── GenDsConfController.java
│   │           │                   │   ├── GenFieldTypeController.java
│   │           │                   │   ├── GenGroupController.java
│   │           │                   │   ├── GenTableController.java
│   │           │                   │   ├── GenTemplateController.java
│   │           │                   │   ├── GenTemplateGroupController.java
│   │           │                   │   └── GeneratorController.java
│   │           │                   ├── entity/
│   │           │                   │   ├── ColumnEntity.java
│   │           │                   │   ├── GenConfig.java
│   │           │                   │   ├── GenDatasourceConf.java
│   │           │                   │   ├── GenFieldType.java
│   │           │                   │   ├── GenGroupEntity.java
│   │           │                   │   ├── GenTable.java
│   │           │                   │   ├── GenTableColumnEntity.java
│   │           │                   │   ├── GenTemplateEntity.java
│   │           │                   │   ├── GenTemplateGroupEntity.java
│   │           │                   │   └── TableEntity.java
│   │           │                   ├── mapper/
│   │           │                   │   ├── GenDatasourceConfMapper.java
│   │           │                   │   ├── GenDynamicMapper.java
│   │           │                   │   ├── GenFieldTypeMapper.java
│   │           │                   │   ├── GenGroupMapper.java
│   │           │                   │   ├── GenTableColumnMapper.java
│   │           │                   │   ├── GenTableMapper.java
│   │           │                   │   ├── GenTemplateGroupMapper.java
│   │           │                   │   └── GenTemplateMapper.java
│   │           │                   ├── service/
│   │           │                   │   ├── GenDatasourceConfService.java
│   │           │                   │   ├── GenFieldTypeService.java
│   │           │                   │   ├── GenGroupService.java
│   │           │                   │   ├── GenTableColumnService.java
│   │           │                   │   ├── GenTableService.java
│   │           │                   │   ├── GenTemplateGroupService.java
│   │           │                   │   ├── GenTemplateService.java
│   │           │                   │   ├── GeneratorService.java
│   │           │                   │   └── impl/
│   │           │                   │       ├── GenDatasourceConfServiceImpl.java
│   │           │                   │       ├── GenFieldTypeServiceImpl.java
│   │           │                   │       ├── GenGroupServiceImpl.java
│   │           │                   │       ├── GenTableColumnServiceImpl.java
│   │           │                   │       ├── GenTableServiceImpl.java
│   │           │                   │       ├── GenTemplateGroupServiceImpl.java
│   │           │                   │       ├── GenTemplateServiceImpl.java
│   │           │                   │       └── GeneratorServiceImpl.java
│   │           │                   └── util/
│   │           │                       ├── AutoFillEnum.java
│   │           │                       ├── BoolFillEnum.java
│   │           │                       ├── CommonColumnFiledEnum.java
│   │           │                       ├── DictTool.java
│   │           │                       ├── GenKit.java
│   │           │                       ├── GeneratorStyleEnum.java
│   │           │                       ├── NamingCaseTool.java
│   │           │                       ├── VelocityKit.java
│   │           │                       └── vo/
│   │           │                           ├── GenCreateTableVO.java
│   │           │                           ├── GenTemplateFileVO.java
│   │           │                           ├── GroupVO.java
│   │           │                           ├── SqlDto.java
│   │           │                           └── TemplateGroupDTO.java
│   │           └── resources/
│   │               ├── application.yml
│   │               ├── logback-spring.xml
│   │               └── mapper/
│   │                   ├── GenFieldTypeMapper.xml
│   │                   ├── GenGroupMapper.xml
│   │                   ├── GenTableMapper.xml
│   │                   ├── GenTemplateGroupMapper.xml
│   │                   └── GenTemplateMapper.xml
│   ├── pig-monitor/
│   │   ├── Dockerfile
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── monitor/
│   │           │                   ├── PigMonitorApplication.java
│   │           │                   ├── config/
│   │           │                   │   ├── CustomCsrfFilter.java
│   │           │                   │   └── SecuritySecureConfig.java
│   │           │                   └── converter/
│   │           │                       └── NacosServiceInstanceConverter.java
│   │           └── resources/
│   │               ├── application.yml
│   │               └── logback-spring.xml
│   ├── pig-quartz/
│   │   ├── Dockerfile
│   │   ├── SECURITY.md
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── pig4cloud/
│   │           │           └── pig/
│   │           │               └── daemon/
│   │           │                   └── quartz/
│   │           │                       ├── PigQuartzApplication.java
│   │           │                       ├── config/
│   │           │                       │   ├── AutowireCapableBeanJobFactory.java
│   │           │                       │   ├── PigInitQuartzJob.java
│   │           │                       │   ├── PigQuartzConfig.java
│   │           │                       │   ├── PigQuartzCustomizerConfig.java
│   │           │                       │   ├── PigQuartzFactory.java
│   │           │                       │   └── PigQuartzInvokeFactory.java
│   │           │                       ├── constants/
│   │           │                       │   ├── JobTypeQuartzEnum.java
│   │           │                       │   └── PigQuartzEnum.java
│   │           │                       ├── controller/
│   │           │                       │   ├── SysJobController.java
│   │           │                       │   └── SysJobLogController.java
│   │           │                       ├── entity/
│   │           │                       │   ├── SysJob.java
│   │           │                       │   └── SysJobLog.java
│   │           │                       ├── event/
│   │           │                       │   ├── SysJobEvent.java
│   │           │                       │   ├── SysJobListener.java
│   │           │                       │   ├── SysJobLogEvent.java
│   │           │                       │   └── SysJobLogListener.java
│   │           │                       ├── exception/
│   │           │                       │   └── TaskException.java
│   │           │                       ├── mapper/
│   │           │                       │   ├── SysJobLogMapper.java
│   │           │                       │   └── SysJobMapper.java
│   │           │                       ├── service/
│   │           │                       │   ├── SysJobLogService.java
│   │           │                       │   ├── SysJobService.java
│   │           │                       │   └── impl/
│   │           │                       │       ├── SysJobLogServiceImpl.java
│   │           │                       │       └── SysJobServiceImpl.java
│   │           │                       ├── task/
│   │           │                       │   ├── RestTaskDemo.java
│   │           │                       │   └── SpringBeanTaskDemo.java
│   │           │                       └── util/
│   │           │                           ├── ClassNameValidator.java
│   │           │                           ├── ITaskInvok.java
│   │           │                           ├── JarTaskInvok.java
│   │           │                           ├── JavaClassTaskInvok.java
│   │           │                           ├── RestTaskInvok.java
│   │           │                           ├── SpringBeanTaskInvok.java
│   │           │                           ├── TaskInvokFactory.java
│   │           │                           ├── TaskInvokUtil.java
│   │           │                           └── TaskUtil.java
│   │           └── resources/
│   │               ├── application.yml
│   │               ├── logback-spring.xml
│   │               └── quartz-config.yml
│   └── pom.xml
└── pom.xml
Download .txt
SYMBOL INDEX (1337 symbols across 370 files)

FILE: db/pig.sql
  type `sys_dept` (line 15) | CREATE TABLE `sys_dept` (
  type `sys_dict` (line 52) | CREATE TABLE `sys_dict` (
  type `sys_dict_item` (line 104) | CREATE TABLE `sys_dict_item` (
  type `sys_file` (line 219) | CREATE TABLE `sys_file` (
  type `sys_log` (line 244) | CREATE TABLE `sys_log` (
  type `sys_menu` (line 272) | CREATE TABLE `sys_menu` (
  type `sys_oauth_client_details` (line 382) | CREATE TABLE `sys_oauth_client_details` (
  type `sys_post` (line 420) | CREATE TABLE `sys_post` (
  type `sys_public_param` (line 445) | CREATE TABLE `sys_public_param` (
  type `sys_role` (line 481) | CREATE TABLE `sys_role` (
  type `sys_role_menu` (line 507) | CREATE TABLE `sys_role_menu` (
  type `sys_user` (line 605) | CREATE TABLE `sys_user` (
  type `sys_user_post` (line 644) | CREATE TABLE `sys_user_post` (
  type `sys_user_role` (line 661) | CREATE TABLE `sys_user_role` (
  type `sys_job` (line 679) | CREATE TABLE `sys_job` (
  type `sys_job_log` (line 708) | CREATE TABLE `sys_job_log` (

FILE: db/pig_config.sql
  type `config_info` (line 14) | CREATE TABLE `config_info` (
  type `config_info_beta` (line 53) | CREATE TABLE `config_info_beta` (
  type `config_info_gray` (line 81) | CREATE TABLE `config_info_gray` (
  type `config_info_tag` (line 112) | CREATE TABLE `config_info_tag` (
  type `config_tags_relation` (line 139) | CREATE TABLE `config_tags_relation` (
  type `group_capacity` (line 162) | CREATE TABLE `group_capacity` (
  type `his_config_info` (line 187) | CREATE TABLE `his_config_info` (
  type `permissions` (line 216) | CREATE TABLE `permissions` (
  type `roles` (line 233) | CREATE TABLE `roles` (
  type `tenant_capacity` (line 250) | CREATE TABLE `tenant_capacity` (
  type `tenant_info` (line 275) | CREATE TABLE `tenant_info` (
  type `users` (line 299) | CREATE TABLE `users` (

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/PigAuthApplication.java
  class PigAuthApplication (line 30) | @EnablePigFeignClients
    method main (line 35) | public static void main(String[] args) {

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/config/AuthorizationServerConfiguration.java
  class AuthorizationServerConfiguration (line 67) | @Configuration
    method authorizationServer (line 85) | @Bean
    method oAuth2TokenGenerator (line 134) | @Bean
    method accessTokenRequestConverter (line 146) | @Bean
    method addCustomOAuth2GrantAuthenticationProvider (line 162) | private void addCustomOAuth2GrantAuthenticationProvider(HttpSecurity h...
    method corsConfigurationSource (line 184) | private UrlBasedCorsConfigurationSource corsConfigurationSource() {

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/endpoint/ImageCodeEndpoint.java
  class ImageCodeEndpoint (line 25) | @RestController
    method image (line 40) | @SneakyThrows

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/endpoint/PigTokenEndpoint.java
  class PigTokenEndpoint (line 88) | @RestController
    method require (line 110) | @GetMapping("/token/login")
    method confirm (line 127) | @GetMapping("/oauth2/confirm_access")
    method logout (line 151) | @DeleteMapping("/token/logout")
    method checkToken (line 169) | @SneakyThrows
    method removeToken (line 201) | @Inner
    method tokenList (line 229) | @Inner
    method convertToTokenVo (line 272) | private TokenVo convertToTokenVo(OAuth2Authorization authorization) {

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/CustomeOAuth2AccessTokenGenerator.java
  class CustomeOAuth2AccessTokenGenerator (line 27) | public class CustomeOAuth2AccessTokenGenerator implements OAuth2TokenGen...
    method generate (line 41) | @Nullable
    method setAccessTokenCustomizer (line 108) | public void setAccessTokenCustomizer(OAuth2TokenCustomizer<OAuth2Token...
    class OAuth2AccessTokenClaims (line 119) | private static final class OAuth2AccessTokenClaims extends OAuth2Acces...
      method OAuth2AccessTokenClaims (line 135) | private OAuth2AccessTokenClaims(TokenType tokenType, String tokenVal...
      method getClaims (line 145) | @Override

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/base/OAuth2ResourceOwnerBaseAuthenticationConverter.java
  class OAuth2ResourceOwnerBaseAuthenticationConverter (line 26) | public abstract class OAuth2ResourceOwnerBaseAuthenticationConverter<T e...
    method support (line 34) | public abstract boolean support(String grantType);
    method checkParams (line 40) | public void checkParams(HttpServletRequest request) {
    method buildToken (line 51) | public abstract T buildToken(Authentication clientPrincipal, Set<Strin...
    method convert (line 60) | @Override

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/base/OAuth2ResourceOwnerBaseAuthenticationProvider.java
  class OAuth2ResourceOwnerBaseAuthenticationProvider (line 39) | public abstract class OAuth2ResourceOwnerBaseAuthenticationProvider<T ex...
    method OAuth2ResourceOwnerBaseAuthenticationProvider (line 65) | public OAuth2ResourceOwnerBaseAuthenticationProvider(AuthenticationMan...
    method setRefreshTokenGenerator (line 83) | @Deprecated
    method buildToken (line 94) | public abstract UsernamePasswordAuthenticationToken buildToken(Map<Str...
    method supports (line 101) | @Override
    method checkClient (line 108) | public abstract void checkClient(RegisteredClient registeredClient);
    method authenticate (line 117) | @Override
    method oAuth2AuthenticationException (line 240) | private OAuth2AuthenticationException oAuth2AuthenticationException(Au...
    method getAuthenticatedClientElseThrowInvalidClient (line 285) | private OAuth2ClientAuthenticationToken getAuthenticatedClientElseThro...

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/base/OAuth2ResourceOwnerBaseAuthenticationToken.java
  class OAuth2ResourceOwnerBaseAuthenticationToken (line 19) | public abstract class OAuth2ResourceOwnerBaseAuthenticationToken extends...
    method OAuth2ResourceOwnerBaseAuthenticationToken (line 36) | public OAuth2ResourceOwnerBaseAuthenticationToken(AuthorizationGrantTy...
    method getCredentials (line 52) | @Override
    method getPrincipal (line 60) | @Override

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/core/CustomeOAuth2TokenCustomizer.java
  class CustomeOAuth2TokenCustomizer (line 15) | public class CustomeOAuth2TokenCustomizer implements OAuth2TokenCustomiz...
    method customize (line 21) | @Override

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/core/FormIdentityLoginConfigurer.java
  class FormIdentityLoginConfigurer (line 14) | public final class FormIdentityLoginConfigurer
    method init (line 17) | @Override

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/core/PigDaoAuthenticationProvider.java
  class PigDaoAuthenticationProvider (line 39) | public class PigDaoAuthenticationProvider extends AbstractUserDetailsAut...
    method PigDaoAuthenticationProvider (line 62) | public PigDaoAuthenticationProvider() {
    method additionalAuthenticationChecks (line 73) | @Override
    method retrieveUser (line 105) | @SneakyThrows
    method createSuccessAuthentication (line 162) | @Override
    method prepareTimingAttackProtection (line 178) | private void prepareTimingAttackProtection() {
    method mitigateAgainstTimingAttack (line 188) | private void mitigateAgainstTimingAttack(UsernamePasswordAuthenticatio...
    method setPasswordEncoder (line 199) | public void setPasswordEncoder(PasswordEncoder passwordEncoder) {
    method getPasswordEncoder (line 205) | protected PasswordEncoder getPasswordEncoder() {
    method setUserDetailsService (line 213) | public void setUserDetailsService(UserDetailsService userDetailsServic...
    method getUserDetailsService (line 217) | protected UserDetailsService getUserDetailsService() {
    method setUserDetailsPasswordService (line 225) | public void setUserDetailsPasswordService(UserDetailsPasswordService u...

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/filter/AuthSecurityConfigProperties.java
  class AuthSecurityConfigProperties (line 21) | @Data

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/filter/PasswordDecoderFilter.java
  class PasswordDecoderFilter (line 49) | @Component
    method doFilterInternal (line 72) | @Override

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/filter/ValidateCodeFilter.java
  class ValidateCodeFilter (line 37) | @Component
    method doFilterInternal (line 51) | @Override
    method checkCode (line 91) | private void checkCode() throws ValidateCodeException {

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/FormAuthenticationFailureHandler.java
  class FormAuthenticationFailureHandler (line 37) | @Slf4j
    method onAuthenticationFailure (line 46) | @Override

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PigAuthenticationFailureEventHandler.java
  class PigAuthenticationFailureEventHandler (line 48) | @Slf4j
    method onAuthenticationFailure (line 59) | @Override
    method sendErrorResponse (line 90) | private void sendErrorResponse(HttpServletRequest request, HttpServlet...

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PigAuthenticationSuccessEventHandler.java
  class PigAuthenticationSuccessEventHandler (line 54) | @Slf4j
    method onAuthenticationSuccess (line 65) | @SneakyThrows
    method sendAccessTokenResponse (line 99) | private void sendAccessTokenResponse(HttpServletRequest request, HttpS...

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PigLogoutSuccessEventHandler.java
  class PigLogoutSuccessEventHandler (line 40) | @Slf4j
    method onApplicationEvent (line 48) | @Override
    method handle (line 62) | public void handle(Authentication authentication) {

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/SsoLogoutSuccessHandler.java
  class SsoLogoutSuccessHandler (line 18) | public class SsoLogoutSuccessHandler implements LogoutSuccessHandler {
    method onLogoutSuccess (line 29) | @Override

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/password/OAuth2ResourceOwnerPasswordAuthenticationConverter.java
  class OAuth2ResourceOwnerPasswordAuthenticationConverter (line 25) | public class OAuth2ResourceOwnerPasswordAuthenticationConverter
    method support (line 32) | @Override
    method buildToken (line 44) | @Override
    method checkParams (line 55) | @Override

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/password/OAuth2ResourceOwnerPasswordAuthenticationProvider.java
  class OAuth2ResourceOwnerPasswordAuthenticationProvider (line 29) | public class OAuth2ResourceOwnerPasswordAuthenticationProvider
    method OAuth2ResourceOwnerPasswordAuthenticationProvider (line 41) | public OAuth2ResourceOwnerPasswordAuthenticationProvider(Authenticatio...
    method buildToken (line 52) | @Override
    method supports (line 64) | @Override
    method checkClient (line 76) | @Override

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/password/OAuth2ResourceOwnerPasswordAuthenticationToken.java
  class OAuth2ResourceOwnerPasswordAuthenticationToken (line 18) | public class OAuth2ResourceOwnerPasswordAuthenticationToken extends OAut...
    method OAuth2ResourceOwnerPasswordAuthenticationToken (line 30) | public OAuth2ResourceOwnerPasswordAuthenticationToken(AuthorizationGra...

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/sms/OAuth2ResourceOwnerSmsAuthenticationConverter.java
  class OAuth2ResourceOwnerSmsAuthenticationConverter (line 22) | public class OAuth2ResourceOwnerSmsAuthenticationConverter
    method support (line 30) | @Override
    method buildToken (line 35) | @Override
    method checkParams (line 46) | @Override

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/sms/OAuth2ResourceOwnerSmsAuthenticationProvider.java
  class OAuth2ResourceOwnerSmsAuthenticationProvider (line 25) | public class OAuth2ResourceOwnerSmsAuthenticationProvider
    method OAuth2ResourceOwnerSmsAuthenticationProvider (line 38) | public OAuth2ResourceOwnerSmsAuthenticationProvider(AuthenticationMana...
    method supports (line 44) | @Override
    method checkClient (line 51) | @Override
    method buildToken (line 60) | @Override

FILE: pig-auth/src/main/java/com/pig4cloud/pig/auth/support/sms/OAuth2ResourceOwnerSmsAuthenticationToken.java
  class OAuth2ResourceOwnerSmsAuthenticationToken (line 16) | public class OAuth2ResourceOwnerSmsAuthenticationToken extends OAuth2Res...
    method OAuth2ResourceOwnerSmsAuthenticationToken (line 21) | public OAuth2ResourceOwnerSmsAuthenticationToken(AuthorizationGrantTyp...

FILE: pig-boot/src/main/java/com/pig4cloud/pig/PigBootApplication.java
  class PigBootApplication (line 30) | @SpringBootApplication
    method main (line 35) | public static void main(String[] args) {

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/config/JacksonConfiguration.java
  class JacksonConfiguration (line 43) | @AutoConfiguration
    method customizer (line 53) | @Bean

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/config/RedisTemplateConfiguration.java
  class RedisTemplateConfiguration (line 35) | @EnableCaching
    method redisTemplate (line 45) | @Bean
    method hashOperations (line 62) | @Bean
    method valueOperations (line 72) | @Bean
    method listOperations (line 82) | @Bean
    method setOperations (line 92) | @Bean
    method zSetOperations (line 102) | @Bean

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/config/RestTemplateConfiguration.java
  class RestTemplateConfiguration (line 32) | @AutoConfiguration
    method restTemplate (line 39) | @Bean
    method restClientBuilder (line 50) | @Bean

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/config/WebMvcConfiguration.java
  class WebMvcConfiguration (line 39) | @AutoConfiguration
    method addFormatters (line 47) | @Override
    method messageSource (line 60) | @Bean

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/constant/CacheConstants.java
  type CacheConstants (line 25) | public interface CacheConstants {

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/constant/CommonConstants.java
  type CommonConstants (line 23) | public interface CommonConstants {

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/constant/SecurityConstants.java
  type SecurityConstants (line 23) | public interface SecurityConstants {

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/constant/ServiceNameConstants.java
  type ServiceNameConstants (line 23) | public interface ServiceNameConstants {

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/constant/enums/DictTypeEnum.java
  type DictTypeEnum (line 28) | @Getter

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/constant/enums/LoginTypeEnum.java
  type LoginTypeEnum (line 26) | @Getter

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/constant/enums/MenuTypeEnum.java
  type MenuTypeEnum (line 28) | @Getter

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/exception/CheckedException.java
  class CheckedException (line 27) | @NoArgsConstructor
    method CheckedException (line 32) | public CheckedException(String message) {
    method CheckedException (line 36) | public CheckedException(Throwable cause) {
    method CheckedException (line 40) | public CheckedException(String message, Throwable cause) {
    method CheckedException (line 44) | public CheckedException(String message, Throwable cause, boolean enabl...

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/exception/ErrorCodes.java
  type ErrorCodes (line 9) | public interface ErrorCodes {

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/exception/PigDeniedException.java
  class PigDeniedException (line 27) | @NoArgsConstructor
    method PigDeniedException (line 32) | public PigDeniedException(String message) {
    method PigDeniedException (line 36) | public PigDeniedException(Throwable cause) {
    method PigDeniedException (line 40) | public PigDeniedException(String message, Throwable cause) {
    method PigDeniedException (line 44) | public PigDeniedException(String message, Throwable cause, boolean ena...

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/exception/ValidateCodeException.java
  class ValidateCodeException (line 25) | public class ValidateCodeException extends RuntimeException {
    method ValidateCodeException (line 29) | public ValidateCodeException() {
    method ValidateCodeException (line 32) | public ValidateCodeException(String msg) {

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/factory/YamlPropertySourceFactory.java
  class YamlPropertySourceFactory (line 20) | public class YamlPropertySourceFactory implements PropertySourceFactory {
    method createPropertySource (line 29) | @Override
    method loadYamlIntoProperties (line 42) | private Properties loadYamlIntoProperties(EncodedResource resource) th...

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/jackson/PigJavaTimeModule.java
  class PigJavaTimeModule (line 37) | public class PigJavaTimeModule extends SimpleModule {
    method PigJavaTimeModule (line 45) | public PigJavaTimeModule() {

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/servlet/RepeatBodyRequestWrapper.java
  class RepeatBodyRequestWrapper (line 40) | @Slf4j
    method RepeatBodyRequestWrapper (line 47) | public RepeatBodyRequestWrapper(HttpServletRequest request) {
    method getReader (line 58) | @Override
    method getInputStream (line 68) | @Override
    method getByteBody (line 99) | private static byte[] getByteBody(HttpServletRequest request) {
    method getParameterMap (line 114) | @Override
    method setParameterMap (line 123) | public void setParameterMap(Map<String, String[]> parameterMap) {
    method getParameter (line 133) | @Override
    method getParameterValues (line 144) | @Override

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/ClassUtils.java
  class ClassUtils (line 37) | @UtilityClass
    method getMethodParameter (line 48) | public MethodParameter getMethodParameter(Constructor<?> constructor, ...
    method getMethodParameter (line 60) | public MethodParameter getMethodParameter(Method method, int parameter...
    method getAnnotation (line 73) | public <A extends Annotation> A getAnnotation(Method method, Class<A> ...
    method getAnnotation (line 98) | public <A extends Annotation> A getAnnotation(HandlerMethod handlerMet...

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/MsgUtils.java
  class MsgUtils (line 14) | @UtilityClass
    method getMessage (line 22) | public String getMessage(String code) {
    method getMessage (line 33) | public String getMessage(String code, Object... objects) {
    method getSecurityMessage (line 44) | public String getSecurityMessage(String code, Object... objects) {

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/R.java
  class R (line 32) | @ToString
    method ok (line 53) | public static <T> R<T> ok() {
    method ok (line 57) | public static <T> R<T> ok(T data) {
    method ok (line 61) | public static <T> R<T> ok(T data, String msg) {
    method failed (line 65) | public static <T> R<T> failed() {
    method failed (line 69) | public static <T> R<T> failed(String msg) {
    method failed (line 73) | public static <T> R<T> failed(T data) {
    method failed (line 77) | public static <T> R<T> failed(T data, String msg) {
    method restResult (line 81) | public static <T> R<T> restResult(T data, int code, String msg) {

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/RedisUtils.java
  class RedisUtils (line 20) | @UtilityClass
    method expire (line 30) | public boolean expire(String key, long time) {
    method getExpire (line 43) | public long getExpire(String key) {
    method scan (line 55) | public List<String> scan(String pattern) {
    method keys (line 77) | public Set<String> keys(String pattern) {
    method findKeysForPage (line 91) | public List<String> findKeysForPage(String patternKey, int page, int s...
    method hasKey (line 123) | public boolean hasKey(String key) {
    method delete (line 132) | public void delete(String... keys) {
    method getLock (line 146) | public boolean getLock(String lockKey, String value, int expireTime) {
    method releaseLock (line 159) | public boolean releaseLock(String lockKey, String value) {
    method get (line 176) | public <T> T get(String key) {
    method multiGet (line 186) | public <T> List<T> multiGet(List<String> keys) {
    method set (line 197) | public boolean set(String key, Object value) {
    method set (line 213) | public boolean set(String key, Object value, long time) {
    method set (line 234) | public <T> boolean set(String key, T value, long time, TimeUnit timeUn...
    method execute (line 253) | public <T> T execute(RedisCallback<T> callback) {
    method hget (line 266) | public <HK, HV> HV hget(String key, HK hashKey) {
    method hmget (line 276) | public <HK, HV> Map<HK, HV> hmget(String key) {
    method hmset (line 287) | public boolean hmset(String key, Map<String, Object> map) {
    method hmset (line 303) | public boolean hmset(String key, Map<String, Object> map, long time) {
    method hset (line 322) | public boolean hset(String key, String item, Object value) {
    method hset (line 338) | public boolean hset(String key, String item, Object value, long time) {
    method hdel (line 354) | public void hdel(String key, Object... item) {
    method hHasKey (line 365) | public boolean hHasKey(String key, String item) {
    method hincr (line 377) | public double hincr(String key, String item, double by) {
    method hdecr (line 389) | public double hdecr(String key, String item, double by) {
    method sGet (line 401) | public <T> Set<T> sGet(String key) {
    method sHasKey (line 412) | public boolean sHasKey(String key, Object value) {
    method sSet (line 423) | public long sSet(String key, Object... values) {
    method sSetAndTime (line 435) | public long sSetAndTime(String key, long time, Object... values) {
    method sGetSetSize (line 449) | public long sGetSetSize(String key) {
    method setRemove (line 460) | public long setRemove(String key, Object... values) {
    method sDifference (line 471) | public <T> Set<T> sDifference(String key, String otherKey) {
    method lGet (line 485) | public <T> List<T> lGet(String key, long start, long end) {
    method lGetListSize (line 495) | public long lGetListSize(String key) {
    method lGetIndex (line 506) | public Object lGetIndex(String key, long index) {
    method lSet (line 517) | public boolean lSet(String key, Object value) {
    method lSet (line 530) | public boolean lSet(String key, Object value, long time) {
    method lSet (line 545) | public boolean lSet(String key, List<Object> value) {
    method lSet (line 558) | public boolean lSet(String key, List<Object> value, long time) {
    method lUpdateIndex (line 574) | public boolean lUpdateIndex(String key, long index, Object value) {
    method lRemove (line 587) | public long lRemove(String key, long count, Object value) {
    method zSetAndTime (line 599) | public long zSetAndTime(String key, long time, Set<ZSetOperations.Type...
    method zRangeByScore (line 616) | public Set<Object> zRangeByScore(String key, double min, double max) {
    method zRange (line 630) | public Set<Object> zRange(String key, long start, long end) {
    method zReverseRange (line 644) | public Set<Object> zReverseRange(String key, long start, long end) {
    method zGetSetSize (line 656) | public long zGetSetSize(String key) {

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/RetOps.java
  class RetOps (line 55) | public class RetOps<T> {
    method RetOps (line 74) | RetOps(R<T> original) {
    method of (line 78) | public static <T> RetOps<T> of(R<T> original) {
    method peek (line 89) | public R<T> peek() {
    method getCode (line 97) | public int getCode() {
    method getData (line 105) | public Optional<T> getData() {
    method getDataIf (line 114) | public Optional<T> getDataIf(Predicate<? super R<?>> predicate) {
    method getMsg (line 122) | public Optional<String> getMsg() {
    method codeEquals (line 131) | public boolean codeEquals(int value) {
    method codeNotEquals (line 140) | public boolean codeNotEquals(int value) {
    method isSuccess (line 149) | public boolean isSuccess() {
    method notSuccess (line 157) | public boolean notSuccess() {
    method assertCode (line 172) | public <Ex extends Exception> RetOps<T> assertCode(int expect, Functio...
    method assertSuccess (line 187) | public <Ex extends Exception> RetOps<T> assertSuccess(Function<? super...
    method assertDataNotNull (line 198) | public <Ex extends Exception> RetOps<T> assertDataNotNull(Function<? s...
    method assertDataNotEmpty (line 212) | public <Ex extends Exception> RetOps<T> assertDataNotEmpty(Function<? ...
    method map (line 225) | public <U> RetOps<U> map(Function<? super T, ? extends U> mapper) {
    method mapIf (line 241) | public <U> RetOps<U> mapIf(Predicate<? super R<T>> predicate, Function...
    method useData (line 253) | public void useData(Consumer<? super T> consumer) {
    method useDataOnCode (line 262) | public void useDataOnCode(Consumer<? super T> consumer, int... codes) {
    method useDataIfSuccess (line 270) | public void useDataIfSuccess(Consumer<? super T> consumer) {
    method useDataIf (line 283) | public void useDataIf(Predicate<? super R<T>> predicate, Consumer<? su...

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/SpringContextHolder.java
  class SpringContextHolder (line 34) | @Slf4j
    method getApplicationContext (line 46) | public static ApplicationContext getApplicationContext() {
    method getEnvironment (line 54) | public static Environment getEnvironment() {
    method setApplicationContext (line 61) | @Override
    method getBean (line 69) | public static <T> T getBean(String name) {
    method getBean (line 76) | public static <T> T getBean(Class<T> requiredType) {
    method clearHolder (line 83) | public static void clearHolder() {
    method publishEvent (line 94) | public static void publishEvent(ApplicationEvent event) {
    method isMicro (line 105) | public static boolean isMicro() {
    method destroy (line 112) | @Override
    method setEnvironment (line 118) | @Override

FILE: pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/WebUtils.java
  class WebUtils (line 42) | @UtilityClass
    method isBody (line 52) | public boolean isBody(HandlerMethod handlerMethod) {
    method getCookieVal (line 62) | public String getCookieVal(String name) {
    method getCookieVal (line 75) | public String getCookieVal(HttpServletRequest request, String name) {
    method removeCookie (line 85) | public void removeCookie(HttpServletResponse response, String key) {
    method setCookie (line 96) | public void setCookie(HttpServletResponse response, String name, Strin...
    method getRequest (line 108) | public Optional<HttpServletRequest> getRequest() {
    method getResponse (line 117) | public HttpServletResponse getResponse() {
    method getClientId (line 125) | @SneakyThrows
    method getClientId (line 131) | @SneakyThrows
    method splitClient (line 140) | @NotNull

FILE: pig-common/pig-common-datasource/src/main/java/com/pig4cloud/pig/common/datasource/DynamicDataSourceAutoConfiguration.java
  class DynamicDataSourceAutoConfiguration (line 48) | @Configuration
    method dynamicDataSourceProvider (line 61) | @Bean
    method masterDataSourceProvider (line 73) | @Bean
    method defaultDataSourceCreator (line 84) | @Bean
    method dsProcessor (line 97) | @Bean
    method clearTtlDsFilter (line 114) | @Bean

FILE: pig-common/pig-common-datasource/src/main/java/com/pig4cloud/pig/common/datasource/config/ClearTtlDataSourceFilter.java
  class ClearTtlDataSourceFilter (line 19) | public class ClearTtlDataSourceFilter extends GenericFilterBean implemen...
    method doFilter (line 21) | @Override
    method getOrder (line 29) | @Override

FILE: pig-common/pig-common-datasource/src/main/java/com/pig4cloud/pig/common/datasource/config/DataSourceProperties.java
  class DataSourceProperties (line 28) | @Data

FILE: pig-common/pig-common-datasource/src/main/java/com/pig4cloud/pig/common/datasource/config/JdbcDynamicDataSourceProvider.java
  class JdbcDynamicDataSourceProvider (line 41) | @Slf4j
    method JdbcDynamicDataSourceProvider (line 48) | public JdbcDynamicDataSourceProvider(DefaultDataSourceCreator defaultD...
    method executeStmt (line 62) | @Override

FILE: pig-common/pig-common-datasource/src/main/java/com/pig4cloud/pig/common/datasource/config/LastParamDsProcessor.java
  class LastParamDsProcessor (line 30) | public class LastParamDsProcessor extends DsProcessor {
    method matches (line 39) | @Override
    method doDetermineDatasource (line 55) | @Override

FILE: pig-common/pig-common-datasource/src/main/java/com/pig4cloud/pig/common/datasource/config/MasterDataSourceProvider.java
  class MasterDataSourceProvider (line 36) | public class MasterDataSourceProvider extends AbstractDataSourceProvider {
    method MasterDataSourceProvider (line 42) | public MasterDataSourceProvider(DefaultDataSourceCreator defaultDataSo...
    method loadDataSources (line 53) | @Override

FILE: pig-common/pig-common-datasource/src/main/java/com/pig4cloud/pig/common/datasource/support/DataSourceConstants.java
  type DataSourceConstants (line 9) | public interface DataSourceConstants {

FILE: pig-common/pig-common-datasource/src/main/java/com/pig4cloud/pig/common/datasource/util/DsConfTypeEnum.java
  type DsConfTypeEnum (line 12) | @Getter

FILE: pig-common/pig-common-datasource/src/main/java/com/pig4cloud/pig/common/datasource/util/DsJdbcUrlEnum.java
  type DsJdbcUrlEnum (line 14) | @Getter
    method get (line 65) | public static DsJdbcUrlEnum get(String dsType) {

FILE: pig-common/pig-common-excel/src/main/java/com/pig4cloud/pig/common/excel/ExcelAutoConfiguration.java
  class ExcelAutoConfiguration (line 24) | @AutoConfiguration
    method remoteDictApiService (line 32) | @Bean
    method dictDataProvider (line 48) | @Bean
    method getBaseUrl (line 58) | private String getBaseUrl() {

FILE: pig-common/pig-common-excel/src/main/java/com/pig4cloud/pig/common/excel/provider/RemoteDictApiService.java
  type RemoteDictApiService (line 16) | public interface RemoteDictApiService {
    method getDictByType (line 23) | @GetExchange("/dict/remote/type/{type}")

FILE: pig-common/pig-common-excel/src/main/java/com/pig4cloud/pig/common/excel/provider/RemoteDictDataProvider.java
  class RemoteDictDataProvider (line 19) | @RequiredArgsConstructor
    method getDict (line 29) | @Override

FILE: pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/PigFeignAutoConfiguration.java
  class PigFeignAutoConfiguration (line 39) | @Configuration(proxyBeanMethods = false)
    method feignSentinelBuilder (line 51) | @Bean
    method pigFeignRequestCloseInterceptor (line 63) | @Bean
    method pigFeignInnerRequestInterceptor (line 72) | @Bean

FILE: pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/core/PigFeignInnerRequestInterceptor.java
  class PigFeignInnerRequestInterceptor (line 17) | public class PigFeignInnerRequestInterceptor implements RequestIntercept...
    method apply (line 23) | @Override
    method getOrder (line 32) | @Override

FILE: pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/core/PigFeignRequestCloseInterceptor.java
  class PigFeignRequestCloseInterceptor (line 14) | public class PigFeignRequestCloseInterceptor implements RequestIntercept...
    method apply (line 20) | @Override

FILE: pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/SentinelAutoConfiguration.java
  class SentinelAutoConfiguration (line 41) | @Configuration(proxyBeanMethods = false)
    method feignSentinelBuilder (line 52) | @Bean
    method blockExceptionHandler (line 66) | @Bean
    method requestOriginParser (line 76) | @Bean

FILE: pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelFeign.java
  class PigSentinelFeign (line 43) | public final class PigSentinelFeign {
    method PigSentinelFeign (line 45) | private PigSentinelFeign() {
    method builder (line 49) | public static PigSentinelFeign.Builder builder() {
    class Builder (line 53) | public static final class Builder extends Feign.Builder implements App...
      method invocationHandlerFactory (line 61) | @Override
      method contract (line 66) | @Override
      method internalBuild (line 72) | @Override
      method setApplicationContext (line 131) | @Override

FILE: pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelInvocationHandler.java
  class PigSentinelInvocationHandler (line 50) | @Slf4j
    method PigSentinelInvocationHandler (line 67) | PigSentinelInvocationHandler(Target<?> target, Map<Method, InvocationH...
    method PigSentinelInvocationHandler (line 75) | PigSentinelInvocationHandler(Target<?> target, Map<Method, InvocationH...
    method invoke (line 80) | @Override
    method equals (line 163) | @Override
    method hashCode (line 172) | @Override
    method toString (line 177) | @Override
    method toFallbackMethod (line 182) | static Map<Method, Method> toFallbackMethod(Map<Method, InvocationHand...

FILE: pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/handle/GlobalBizExceptionHandler.java
  class GlobalBizExceptionHandler (line 47) | @Slf4j
    method handleGlobalException (line 58) | @ExceptionHandler(Exception.class)
    method handleIllegalArgumentException (line 78) | @ExceptionHandler(IllegalArgumentException.class)
    method handleAccessDeniedException (line 90) | @ExceptionHandler(AccessDeniedException.class)
    method handleBodyValidException (line 104) | @ExceptionHandler({ MethodArgumentNotValidException.class })
    method bindExceptionHandler (line 117) | @ExceptionHandler({ BindException.class })
    method notFoundExceptionHandler (line 133) | @ExceptionHandler({ NoResourceFoundException.class })

FILE: pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/handle/PigUrlBlockHandler.java
  class PigUrlBlockHandler (line 38) | @Slf4j
    method handle (line 44) | @Override

FILE: pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/parser/PigHeaderRequestOriginParser.java
  class PigHeaderRequestOriginParser (line 28) | public class PigHeaderRequestOriginParser implements RequestOriginParser {
    method parseOrigin (line 40) | @Override

FILE: pig-common/pig-common-feign/src/main/java/org/springframework/cloud/openfeign/PigFeignClientsRegistrar.java
  class PigFeignClientsRegistrar (line 51) | public class PigFeignClientsRegistrar implements ImportBeanDefinitionReg...
    method registerBeanDefinitions (line 66) | @Override
    method setBeanClassLoader (line 75) | @Override
    method registerFeignClients (line 84) | private void registerFeignClients(BeanDefinitionRegistry registry) {
    method validate (line 173) | private void validate(Map<String, Object> attributes) {
    method getName (line 185) | private String getName(Map<String, Object> attributes) {
    method getContextId (line 202) | private String getContextId(Map<String, Object> attributes) {
    method resolve (line 217) | private String resolve(String value) {
    method getUrl (line 229) | private String getUrl(Map<String, Object> attributes) {
    method getPath (line 256) | private String getPath(Map<String, Object> attributes) {
    method getQualifier (line 266) | @Nullable
    method getClientName (line 284) | @Nullable
    method registerClientConfiguration (line 314) | private void registerClientConfiguration(BeanDefinitionRegistry regist...
    method setEnvironment (line 328) | @Override

FILE: pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/LogAutoConfiguration.java
  class LogAutoConfiguration (line 35) | @EnableAsync
    method sysLogListener (line 47) | @Bean
    method sysLogAspect (line 56) | @Bean

FILE: pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/aspect/SysLogAspect.java
  class SysLogAspect (line 40) | @Aspect
    method around (line 52) | @Around("@annotation(sysLog)")

FILE: pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/config/PigLogProperties.java
  class PigLogProperties (line 32) | @Getter

FILE: pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/event/SysLogEvent.java
  class SysLogEvent (line 29) | public class SysLogEvent extends ApplicationEvent {
    method SysLogEvent (line 38) | public SysLogEvent(SysLog source) {

FILE: pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/event/SysLogEventSource.java
  class SysLogEventSource (line 16) | @Data

FILE: pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/event/SysLogListener.java
  class SysLogListener (line 47) | @RequiredArgsConstructor
    method saveSysLog (line 61) | @SneakyThrows
    method afterPropertiesSet (line 79) | @Override
    class PropertyFilterMixIn (line 96) | @JsonFilter("filter properties by name")

FILE: pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/init/ApplicationLoggerInitializer.java
  class ApplicationLoggerInitializer (line 30) | public class ApplicationLoggerInitializer implements EnvironmentPostProc...
    method postProcessEnvironment (line 37) | @Override
    method getOrder (line 56) | @Override

FILE: pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/util/LogTypeEnum.java
  type LogTypeEnum (line 28) | @Getter

FILE: pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/util/SysLogUtils.java
  class SysLogUtils (line 52) | @UtilityClass
    method getSysLog (line 59) | public SysLogEventSource getSysLog() {
    method getUsername (line 83) | private String getUsername() {
    method getValue (line 99) | public <T> T getValue(EvaluationContext context, String key, Class<T> ...
    method getContext (line 111) | public EvaluationContext getContext(Object[] arguments, Method signatu...

FILE: pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/MybatisAutoConfiguration.java
  class MybatisAutoConfiguration (line 38) | @Configuration(proxyBeanMethods = false)
    method addArgumentResolvers (line 45) | @Override
    method mybatisPlusInterceptor (line 54) | @Bean
    method mybatisPlusMetaObjectHandler (line 65) | @Bean

FILE: pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/base/BaseEntity.java
  class BaseEntity (line 20) | @Getter

FILE: pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/config/MybatisPlusMetaObjectHandler.java
  class MybatisPlusMetaObjectHandler (line 23) | @Slf4j
    method insertFill (line 30) | @Override
    method updateFill (line 48) | @Override
    method fillValIfNullByName (line 62) | private static void fillValIfNullByName(String fieldName, Object field...
    method getUserName (line 89) | private String getUserName() {

FILE: pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/handler/JsonLongArrayTypeHandler.java
  class JsonLongArrayTypeHandler (line 27) | @MappedTypes(value = { Long[].class })
    method setNonNullParameter (line 39) | @Override
    method getNullableResult (line 52) | @Override
    method getNullableResult (line 66) | @Override
    method getNullableResult (line 80) | @Override

FILE: pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/handler/JsonStringArrayTypeHandler.java
  class JsonStringArrayTypeHandler (line 25) | @MappedTypes(value = { String[].class })
    method setNonNullParameter (line 37) | @Override
    method getNullableResult (line 50) | @Override
    method getNullableResult (line 64) | @Override
    method getNullableResult (line 78) | @Override

FILE: pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/plugins/PigPaginationInnerInterceptor.java
  class PigPaginationInnerInterceptor (line 28) | @Data
    method PigPaginationInnerInterceptor (line 47) | public PigPaginationInnerInterceptor(DbType dbType) {
    method PigPaginationInnerInterceptor (line 51) | public PigPaginationInnerInterceptor(IDialect dialect) {
    method beforeQuery (line 64) | @Override

FILE: pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/resolver/SqlFilterArgumentResolver.java
  class SqlFilterArgumentResolver (line 44) | public class SqlFilterArgumentResolver implements HandlerMethodArgumentR...
    method supportsParameter (line 51) | @Override
    method resolveArgument (line 65) | @Override

FILE: pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/FileAutoConfiguration.java
  class FileAutoConfiguration (line 33) | @Import({ LocalFileAutoConfiguration.class, OssAutoConfiguration.class })

FILE: pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/core/FileProperties.java
  class FileProperties (line 33) | @Data

FILE: pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/core/FileTemplate.java
  type FileTemplate (line 14) | public interface FileTemplate extends InitializingBean {
    method createBucket (line 20) | void createBucket(String bucketName);
    method getAllBuckets (line 28) | List<? extends Object> getAllBuckets();
    method removeBucket (line 34) | void removeBucket(String bucketName);
    method putObject (line 44) | void putObject(String bucketName, String objectName, InputStream strea...
    method putObject (line 54) | void putObject(String bucketName, String objectName, InputStream strea...
    method getObject (line 62) | Object getObject(String bucketName, String objectName);
    method removeObject (line 64) | void removeObject(String bucketName, String objectName) throws Exception;
    method afterPropertiesSet (line 69) | @Override
    method getAllObjectsByPrefix (line 82) | List<? extends Object> getAllObjectsByPrefix(String bucketName, String...

FILE: pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/local/LocalFileAutoConfiguration.java
  class LocalFileAutoConfiguration (line 33) | @AllArgsConstructor
    method localFileTemplate (line 38) | @Bean

FILE: pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/local/LocalFileProperties.java
  class LocalFileProperties (line 29) | @Data

FILE: pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/local/LocalFileTemplate.java
  class LocalFileTemplate (line 20) | @RequiredArgsConstructor
    method createBucket (line 43) | @Override
    method getAllBuckets (line 54) | @Override
    method removeBucket (line 66) | @Override
    method putObject (line 78) | @Override
    method getObject (line 97) | @Override
    method removeObject (line 110) | @Override
    method putObject (line 123) | @Override
    method getAllObjectsByPrefix (line 137) | @Override

FILE: pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/oss/OssAutoConfiguration.java
  class OssAutoConfiguration (line 37) | @AllArgsConstructor
    method ossTemplate (line 48) | @Bean
    method ossEndpoint (line 63) | @Bean

FILE: pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/oss/OssProperties.java
  class OssProperties (line 33) | @Data

FILE: pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/oss/http/OssEndpoint.java
  class OssEndpoint (line 43) | @RestController
    method createBucket (line 57) | @SneakyThrows
    method getBuckets (line 71) | @SneakyThrows
    method getBucket (line 83) | @SneakyThrows
    method deleteBucket (line 94) | @SneakyThrows
    method createObject (line 108) | @SneakyThrows
    method createObject (line 132) | @SneakyThrows
    method filterObject (line 155) | @SneakyThrows
    method getObject (line 170) | @SneakyThrows
    method deleteObject (line 189) | @SneakyThrows

FILE: pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/oss/service/OssTemplate.java
  class OssTemplate (line 56) | @RequiredArgsConstructor
    method createBucket (line 79) | @SneakyThrows
    method doesBucketExist (line 93) | private boolean doesBucketExist(String bucketName) {
    method getAllBuckets (line 110) | @SneakyThrows
    method getBucket (line 123) | @SneakyThrows
    method removeBucket (line 140) | @SneakyThrows
    method getAllObjectsByPrefix (line 155) | @SneakyThrows
    method getObjectURL (line 181) | @SneakyThrows
    method getObject (line 202) | @SneakyThrows
    method putObject (line 215) | public void putObject(String bucketName, String objectName, InputStrea...
    method putObject (line 227) | public void putObject(String bucketName, String objectName, InputStrea...
    method putObject (line 250) | public PutObjectResponse putObject(String bucketName, String objectNam...
    method getObjectInfo (line 271) | public HeadObjectResponse getObjectInfo(String bucketName, String obje...
    method removeObject (line 289) | public void removeObject(String bucketName, String objectName) throws ...
    method afterPropertiesSet (line 302) | @Override

FILE: pig-common/pig-common-seata/src/main/java/com/pig4cloud/pig/common/seata/config/SeataAutoConfiguration.java
  class SeataAutoConfiguration (line 14) | @PropertySource(value = "classpath:seata-config.yml", factory = YamlProp...

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PermissionService.java
  class PermissionService (line 35) | public class PermissionService {
    method hasPermission (line 42) | public boolean hasPermission(String... permissions) {

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PermitAllUrlProperties.java
  class PermitAllUrlProperties (line 49) | @ConfigurationProperties(prefix = "security.oauth2.ignore")
    method afterPropertiesSet (line 63) | @Override

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigBearerTokenExtractor.java
  class PigBearerTokenExtractor (line 37) | public class PigBearerTokenExtractor implements BearerTokenResolver {
    method PigBearerTokenExtractor (line 52) | public PigBearerTokenExtractor(PermitAllUrlProperties urlProperties) {
    method resolve (line 56) | @Override
    method resolveFromAuthorizationHeader (line 83) | private String resolveFromAuthorizationHeader(HttpServletRequest reque...
    method resolveFromRequestParameters (line 96) | private static String resolveFromRequestParameters(HttpServletRequest ...
    method isParameterTokenSupportedForRequest (line 108) | private boolean isParameterTokenSupportedForRequest(final HttpServletR...
    method isParameterTokenEnabledForRequest (line 114) | private boolean isParameterTokenEnabledForRequest(final HttpServletReq...

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigBootCorsProperties.java
  class PigBootCorsProperties (line 15) | @Data

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigClientCredentialsOAuth2AuthenticatedPrincipal.java
  class PigClientCredentialsOAuth2AuthenticatedPrincipal (line 16) | @RequiredArgsConstructor
    method getAttributes (line 29) | @Override
    method getAuthorities (line 38) | @Override
    method getName (line 47) | @Override

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigCustomOAuth2AccessTokenResponseHttpMessageConverter.java
  class PigCustomOAuth2AccessTokenResponseHttpMessageConverter (line 24) | public class PigCustomOAuth2AccessTokenResponseHttpMessageConverter
    method writeInternal (line 44) | @Override

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigCustomOpaqueTokenIntrospector.java
  class PigCustomOpaqueTokenIntrospector (line 35) | @Slf4j
    method introspect (line 51) | @Override

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigResourceServerAutoConfiguration.java
  class PigResourceServerAutoConfiguration (line 36) | @RequiredArgsConstructor
    method permissionService (line 44) | @Bean("pms")
    method pigBearerTokenExtractor (line 54) | @Bean
    method resourceAuthExceptionEntryPoint (line 65) | @Bean
    method opaqueTokenIntrospector (line 76) | @Bean
    method prePostTemplateDefaults (line 85) | @Bean

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigResourceServerConfiguration.java
  class PigResourceServerConfiguration (line 39) | @EnableWebSecurity
    method resourceServer (line 75) | @Bean
    method corsConfigurationSource (line 111) | private UrlBasedCorsConfigurationSource corsConfigurationSource() {

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigSecurityInnerAspect.java
  class PigSecurityInnerAspect (line 39) | @Slf4j
    method around (line 52) | @SneakyThrows
    method getOrder (line 67) | @Override

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigSecurityMessageSourceConfiguration.java
  class PigSecurityMessageSourceConfiguration (line 34) | @ConditionalOnWebApplication(type = SERVLET)
    method securityMessageSource (line 41) | @Bean

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/ResourceAuthExceptionEntryPoint.java
  class ResourceAuthExceptionEntryPoint (line 42) | @RequiredArgsConstructor
    method commence (line 56) | @Override

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/feign/PigFeignClientConfiguration.java
  class PigFeignClientConfiguration (line 29) | public class PigFeignClientConfiguration {
    method oauthRequestInterceptor (line 36) | @Bean

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/feign/PigOAuthRequestInterceptor.java
  class PigOAuthRequestInterceptor (line 27) | @RequiredArgsConstructor
    method apply (line 43) | @Override

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigAppUserDetailsServiceImpl.java
  class PigAppUserDetailsServiceImpl (line 39) | @RequiredArgsConstructor
    method loadUserByUsername (line 52) | @Override
    method loadUserByUser (line 76) | @Override
    method support (line 86) | @Override

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRedisOAuth2AuthorizationConsentService.java
  class PigRedisOAuth2AuthorizationConsentService (line 17) | @RequiredArgsConstructor
    method save (line 27) | @Override
    method remove (line 39) | @Override
    method findById (line 51) | @Override
    method buildKey (line 64) | private static String buildKey(String registeredClientId, String princ...
    method buildKey (line 73) | private static String buildKey(OAuth2AuthorizationConsent authorizatio...

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRedisOAuth2AuthorizationService.java
  class PigRedisOAuth2AuthorizationService (line 27) | @RequiredArgsConstructor
    method save (line 39) | @Override
    method remove (line 78) | @Override
    method findById (line 113) | @Override
    method findByToken (line 126) | @Override
    method buildKey (line 140) | private String buildKey(String type, String id) {
    method isState (line 149) | private static boolean isState(OAuth2Authorization authorization) {
    method isCode (line 158) | private static boolean isCode(OAuth2Authorization authorization) {
    method isRefreshToken (line 169) | private static boolean isRefreshToken(OAuth2Authorization authorizatio...
    method isAccessToken (line 178) | private static boolean isAccessToken(OAuth2Authorization authorization) {

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRemoteRegisteredClientRepository.java
  class PigRemoteRegisteredClientRepository (line 33) | @RequiredArgsConstructor
    method save (line 59) | @Override
    method findById (line 68) | @Override
    method findByClientId (line 79) | @Override

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigUser.java
  class PigUser (line 38) | public class PigUser extends User implements OAuth2AuthenticatedPrincipal {
    method PigUser (line 68) | public PigUser(Long id, Long deptId, String username, String password,...
    method getAttributes (line 81) | @Override
    method getName (line 90) | @Override

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigUserDetailsService.java
  type PigUserDetailsService (line 26) | public interface PigUserDetailsService extends UserDetailsService, Order...
    method support (line 33) | default boolean support(String clientId, String grantType) {
    method getOrder (line 41) | default int getOrder() {
    method getUserDetails (line 51) | default UserDetails getUserDetails(R<UserInfo> result) {
    method loadUserByUser (line 74) | default UserDetails loadUserByUser(PigUser pigUser) {

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigUserDetailsServiceImpl.java
  class PigUserDetailsServiceImpl (line 40) | @Primary
    method loadUserByUsername (line 54) | @Override
    method getOrder (line 72) | @Override

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/OAuth2EndpointUtils.java
  class OAuth2EndpointUtils (line 28) | @UtilityClass
    method getParameters (line 38) | public MultiValueMap<String, String> getParameters(HttpServletRequest ...
    method matchesPkceTokenRequest (line 54) | public boolean matchesPkceTokenRequest(HttpServletRequest request) {
    method throwError (line 68) | public void throwError(String errorCode, String parameterName, String ...
    method sendAccessTokenResponse (line 79) | public OAuth2AccessTokenResponse sendAccessTokenResponse(OAuth2Authori...

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/OAuth2ErrorCodesExpand.java
  type OAuth2ErrorCodesExpand (line 9) | public interface OAuth2ErrorCodesExpand {

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/OAuthClientException.java
  class OAuthClientException (line 14) | public class OAuthClientException extends OAuth2AuthenticationException {
    method OAuthClientException (line 23) | public OAuthClientException(String msg) {
    method OAuthClientException (line 32) | public OAuthClientException(String msg, Throwable cause) {

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/ScopeException.java
  class ScopeException (line 14) | public class ScopeException extends OAuth2AuthenticationException {
    method ScopeException (line 23) | public ScopeException(String msg) {
    method ScopeException (line 32) | public ScopeException(String msg, Throwable cause) {

FILE: pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/SecurityUtils.java
  class SecurityUtils (line 37) | @UtilityClass
    method getAuthentication (line 44) | public Authentication getAuthentication() {
    method getUser (line 53) | public PigUser getUser(Authentication authentication) {
    method getUser (line 65) | public PigUser getUser() {
    method getRoles (line 77) | public List<Long> getRoles() {

FILE: pig-common/pig-common-swagger/src/main/java/com/pig4cloud/pig/common/swagger/config/OpenAPIDefinition.java
  class OpenAPIDefinition (line 49) | @RequiredArgsConstructor
    method securityScheme (line 66) | private SecurityScheme securityScheme(SwaggerProperties swaggerPropert...
    method afterPropertiesSet (line 82) | @Override
    method setApplicationContext (line 101) | @Override

FILE: pig-common/pig-common-swagger/src/main/java/com/pig4cloud/pig/common/swagger/config/OpenAPIDefinitionImportSelector.java
  class OpenAPIDefinitionImportSelector (line 18) | public class OpenAPIDefinitionImportSelector implements ImportBeanDefini...
    method registerBeanDefinitions (line 25) | @Override

FILE: pig-common/pig-common-swagger/src/main/java/com/pig4cloud/pig/common/swagger/config/OpenAPIMetadataConfiguration.java
  class OpenAPIMetadataConfiguration (line 16) | public class OpenAPIMetadataConfiguration implements InitializingBean, A...
    method afterPropertiesSet (line 30) | @Override
    method setApplicationContext (line 48) | @Override

FILE: pig-common/pig-common-swagger/src/main/java/com/pig4cloud/pig/common/swagger/support/SwaggerProperties.java
  class SwaggerProperties (line 32) | @Data

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/config/LocalMessageDistributorConfiguration.java
  class LocalMessageDistributorConfiguration (line 15) | @ConditionalOnProperty(prefix = WebSocketProperties.PREFIX, name = "mess...
    method messageDistributor (line 24) | @Bean

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/config/MessageDistributorTypeConstants.java
  class MessageDistributorTypeConstants (line 11) | public final class MessageDistributorTypeConstants {
    method MessageDistributorTypeConstants (line 13) | private MessageDistributorTypeConstants() {

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/config/RedisMessageDistributorConfiguration.java
  class RedisMessageDistributorConfiguration (line 29) | @ConditionalOnClass(StringRedisTemplate.class)
    method messageDistributor (line 40) | @Bean
    method redisWebsocketMessageListener (line 51) | @Bean
    method redisMessageListenerContainer (line 63) | @Bean
    class RedisMessageListenerRegisterConfiguration (line 78) | @Configuration(proxyBeanMethods = false)
      method addMessageListener (line 90) | @PostConstruct

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/config/WebSocketAutoConfiguration.java
  class WebSocketAutoConfiguration (line 25) | @Import(WebSocketHandlerConfig.class)
    method webSocketConfigurer (line 40) | @Bean
    method initJsonMessageHandlerHolder (line 56) | @PostConstruct

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/config/WebSocketHandlerConfig.java
  class WebSocketHandlerConfig (line 31) | @RequiredArgsConstructor
    method sessionKeyGenerator (line 41) | @Bean
    method handshakeInterceptor (line 51) | @Bean
    method planTextMessageHandler (line 60) | @Bean
    method webSocketHandler1 (line 71) | @Bean
    method webSocketHandler2 (line 88) | @Bean
    method pingJsonMessageHandler (line 105) | @Bean

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/config/WebSocketMessageSender.java
  class WebSocketMessageSender (line 22) | @Slf4j
    method broadcast (line 29) | public static void broadcast(String message) {
    method send (line 42) | public static boolean send(Object sessionKey, String message) {
    method send (line 58) | public static void send(WebSocketSession session, JsonWebSocketMessage...
    method send (line 68) | public static boolean send(WebSocketSession session, String message) {

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/config/WebSocketProperties.java
  class WebSocketProperties (line 14) | @Data

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/custom/PigxSessionKeyGenerator.java
  class PigxSessionKeyGenerator (line 18) | @Configuration
    method sessionKey (line 30) | @Override

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/custom/UserAttributeHandshakeInterceptor.java
  class UserAttributeHandshakeInterceptor (line 22) | public class UserAttributeHandshakeInterceptor implements HandshakeInter...
    method beforeHandshake (line 36) | @Override
    method afterHandshake (line 55) | @Override

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/distribute/LocalMessageDistributor.java
  class LocalMessageDistributor (line 12) | public class LocalMessageDistributor implements MessageDistributor, Mess...
    method distribute (line 18) | @Override

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/distribute/MessageDO.java
  class MessageDO (line 20) | @Data
    method broadcastMessage (line 54) | public static MessageDO broadcastMessage(String text) {

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/distribute/MessageDistributor.java
  type MessageDistributor (line 12) | public interface MessageDistributor {
    method distribute (line 21) | void distribute(MessageDO messageDO);

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/distribute/MessageSender.java
  type MessageSender (line 17) | public interface MessageSender {
    method doSend (line 26) | default void doSend(MessageDO messageDO) {

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/distribute/RedisMessageDistributor.java
  class RedisMessageDistributor (line 19) | @RequiredArgsConstructor
    method distribute (line 32) | @Override

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/distribute/RedisWebsocketMessageListener.java
  class RedisWebsocketMessageListener (line 20) | @Slf4j
    method onMessage (line 39) | @Override

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/handler/CustomPlanTextMessageHandler.java
  class CustomPlanTextMessageHandler (line 15) | @Slf4j
    method handle (line 26) | @Override

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/handler/CustomWebSocketHandler.java
  class CustomWebSocketHandler (line 25) | @Slf4j
    method CustomWebSocketHandler (line 40) | public CustomWebSocketHandler() {
    method CustomWebSocketHandler (line 47) | public CustomWebSocketHandler(PlanTextMessageHandler planTextMessageHa...
    method handleTextMessage (line 61) | @Override

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/handler/JsonMessageHandler.java
  type JsonMessageHandler (line 15) | public interface JsonMessageHandler<T extends JsonWebSocketMessage> {
    method handle (line 22) | void handle(WebSocketSession session, T message);
    method type (line 31) | String type();
    method getMessageClass (line 40) | Class<T> getMessageClass();

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/handler/PingJsonMessageHandler.java
  class PingJsonMessageHandler (line 19) | public class PingJsonMessageHandler implements JsonMessageHandler<PingJs...
    method handle (line 29) | @Override
    method type (line 39) | @Override
    method getMessageClass (line 48) | @Override

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/handler/PlanTextMessageHandler.java
  type PlanTextMessageHandler (line 15) | public interface PlanTextMessageHandler {
    method handle (line 22) | void handle(WebSocketSession session, String message);

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/holder/JsonMessageHandlerHolder.java
  class JsonMessageHandlerHolder (line 17) | public final class JsonMessageHandlerHolder {
    method JsonMessageHandlerHolder (line 19) | private JsonMessageHandlerHolder() {
    method getHandler (line 29) | public static JsonMessageHandler getHandler(String type) {
    method addHandler (line 40) | public static void addHandler(JsonMessageHandler jsonMessageHandler) {

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/holder/MapSessionWebSocketHandlerDecorator.java
  class MapSessionWebSocketHandlerDecorator (line 19) | public class MapSessionWebSocketHandlerDecorator extends WebSocketHandle...
    method MapSessionWebSocketHandlerDecorator (line 31) | public MapSessionWebSocketHandlerDecorator(WebSocketHandler delegate, ...
    method afterConnectionEstablished (line 48) | @Override
    method afterConnectionClosed (line 64) | @Override

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/holder/SessionKeyGenerator.java
  type SessionKeyGenerator (line 14) | public interface SessionKeyGenerator {
    method sessionKey (line 21) | Object sessionKey(WebSocketSession webSocketSession);

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/holder/WebSocketSessionHolder.java
  class WebSocketSessionHolder (line 19) | public final class WebSocketSessionHolder {
    method WebSocketSessionHolder (line 21) | private WebSocketSessionHolder() {
    method addSession (line 31) | public static void addSession(Object sessionKey, WebSocketSession sess...
    method removeSession (line 39) | public static void removeSession(Object sessionKey) {
    method getSession (line 48) | public static WebSocketSession getSession(Object sessionKey) {
    method getSessions (line 56) | public static Collection<WebSocketSession> getSessions() {
    method getSessionKeys (line 64) | public static Set<String> getSessionKeys() {

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/message/AbstractJsonWebSocketMessage.java
  class AbstractJsonWebSocketMessage (line 12) | public abstract class AbstractJsonWebSocketMessage implements JsonWebSoc...
    method AbstractJsonWebSocketMessage (line 25) | protected AbstractJsonWebSocketMessage(String type) {
    method getType (line 33) | @Override

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/message/JsonWebSocketMessage.java
  type JsonWebSocketMessage (line 12) | public interface JsonWebSocketMessage {
    method getType (line 21) | String getType();

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/message/PingJsonWebSocketMessage.java
  class PingJsonWebSocketMessage (line 12) | public class PingJsonWebSocketMessage extends AbstractJsonWebSocketMessa...
    method PingJsonWebSocketMessage (line 17) | public PingJsonWebSocketMessage() {

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/message/PongJsonWebSocketMessage.java
  class PongJsonWebSocketMessage (line 12) | public class PongJsonWebSocketMessage extends AbstractJsonWebSocketMessa...
    method PongJsonWebSocketMessage (line 17) | public PongJsonWebSocketMessage() {

FILE: pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/message/WebSocketMessageTypeEnum.java
  type WebSocketMessageTypeEnum (line 15) | @Getter

FILE: pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/PigXssAutoConfiguration.java
  class PigXssAutoConfiguration (line 41) | @AutoConfiguration
    method xssCleaner (line 56) | @Bean
    method formXssClean (line 68) | @Bean
    method xssJacksonCustomizer (line 79) | @Bean
    method addInterceptors (line 89) | @Override

FILE: pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/config/PigXssProperties.java
  class PigXssProperties (line 33) | @Getter
    type Mode (line 76) | public enum Mode {

FILE: pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/DefaultXssCleaner.java
  class DefaultXssCleaner (line 34) | public class DefaultXssCleaner implements XssCleaner {
    method DefaultXssCleaner (line 38) | public DefaultXssCleaner(PigXssProperties properties) {
    method getOutputSettings (line 47) | private static Document.OutputSettings getOutputSettings(PigXssPropert...
    method clean (line 62) | @Override

FILE: pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/FormXssClean.java
  class FormXssClean (line 39) | @ControllerAdvice
    method initBinder (line 52) | @InitBinder
    class StringPropertiesEditor (line 64) | @Slf4j
      method getAsText (line 76) | @Override
      method setAsText (line 87) | @Override

FILE: pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/FromXssException.java
  class FromXssException (line 31) | @Getter
    method FromXssException (line 44) | public FromXssException(String input, String message) {

FILE: pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/JacksonXssClean.java
  class JacksonXssClean (line 34) | @Slf4j
    method clean (line 49) | @Override

FILE: pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/JacksonXssException.java
  class JacksonXssException (line 30) | @Getter
    method JacksonXssException (line 43) | public JacksonXssException(String input, String message) {

FILE: pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/XssCleanDeserializer.java
  class XssCleanDeserializer (line 32) | @Slf4j
    method clean (line 42) | @Override

FILE: pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/XssCleanDeserializerBase.java
  class XssCleanDeserializerBase (line 33) | public abstract class XssCleanDeserializerBase extends JsonDeserializer<...
    method deserialize (line 43) | @Override
    method clean (line 67) | public abstract String clean(String name, String text) throws IOExcept...

FILE: pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/XssCleanInterceptor.java
  class XssCleanInterceptor (line 33) | @RequiredArgsConstructor
    method preHandle (line 49) | @Override
    method afterCompletion (line 80) | @Override
    method afterConcurrentHandlingStarted (line 93) | @Override

FILE: pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/XssCleaner.java
  type XssCleaner (line 27) | public interface XssCleaner {
    method clean (line 34) | default String clean(String html) {
    method clean (line 44) | String clean(String html, XssType type);
    method isValid (line 51) | default boolean isValid(String html) {

FILE: pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/XssException.java
  type XssException (line 24) | public interface XssException {
    method getInput (line 30) | String getInput();
    method getMessage (line 36) | String getMessage();

FILE: pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/XssHolder.java
  class XssHolder (line 24) | public class XssHolder {
    method isEnabled (line 34) | public static boolean isEnabled() {
    method setEnable (line 41) | static void setEnable() {
    method setXssCleanIgnore (line 49) | public static void setXssCleanIgnore(XssCleanIgnore xssCleanIgnore) {
    method getXssCleanIgnore (line 57) | public static XssCleanIgnore getXssCleanIgnore() {
    method remove (line 64) | public static void remove() {

FILE: pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/core/XssType.java
  type XssType (line 22) | public enum XssType {
    method getXssException (line 28) | @Override
    method getXssException (line 38) | @Override
    method getXssException (line 50) | public abstract RuntimeException getXssException(String input, String ...

FILE: pig-common/pig-common-xss/src/main/java/com/pig4cloud/pig/common/xss/utils/XssUtil.java
  class XssUtil (line 36) | public class XssUtil {
    method trim (line 45) | public static String trim(String text, boolean trim) {
    method clean (line 54) | public static String clean(String html) {
    class HtmlSafeList (line 66) | public static class HtmlSafeList extends org.jsoup.safety.Safelist {
      method HtmlSafeList (line 70) | public HtmlSafeList() {
      method isSafeAttribute (line 106) | @Override

FILE: pig-gateway/src/main/java/com/pig4cloud/pig/gateway/PigGatewayApplication.java
  class PigGatewayApplication (line 29) | @EnableDiscoveryClient
    method main (line 33) | public static void main(String[] args) {

FILE: pig-gateway/src/main/java/com/pig4cloud/pig/gateway/config/GatewayConfiguration.java
  class GatewayConfiguration (line 15) | @Configuration(proxyBeanMethods = false)
    method pigRequestGlobalFilter (line 22) | @Bean
    method globalExceptionHandler (line 32) | @Bean

FILE: pig-gateway/src/main/java/com/pig4cloud/pig/gateway/config/RateLimiterConfiguration.java
  class RateLimiterConfiguration (line 32) | @Configuration(proxyBeanMethods = false)
    method remoteAddrKeyResolver (line 42) | @Bean

FILE: pig-gateway/src/main/java/com/pig4cloud/pig/gateway/config/SpringDocConfiguration.java
  class SpringDocConfiguration (line 25) | @RequiredArgsConstructor
    method afterPropertiesSet (line 37) | @Override
  class SwaggerDocRegister (line 50) | @RequiredArgsConstructor
    method onEvent (line 61) | @Override
    method subscribeType (line 82) | @Override

FILE: pig-gateway/src/main/java/com/pig4cloud/pig/gateway/filter/PigRequestGlobalFilter.java
  class PigRequestGlobalFilter (line 44) | public class PigRequestGlobalFilter implements GlobalFilter, Ordered {
    method filter (line 52) | @Override
    method getOrder (line 76) | @Override

FILE: pig-gateway/src/main/java/com/pig4cloud/pig/gateway/handler/GlobalExceptionHandler.java
  class GlobalExceptionHandler (line 39) | @Slf4j
    method handle (line 54) | @Override

FILE: pig-register/src/main/java/com/alibaba/nacos/bootstrap/PigNacosApplication.java
  class PigNacosApplication (line 40) | public class PigNacosApplication {
    method main (line 47) | public static void main(String[] args) {

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/dto/RegisterUserDTO.java
  class RegisterUserDTO (line 11) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/dto/SysLogDTO.java
  class SysLogDTO (line 15) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/dto/UserDTO.java
  class UserDTO (line 35) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/dto/UserInfo.java
  class UserInfo (line 39) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/entity/SysDept.java
  class SysDept (line 41) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/entity/SysDeptRelation.java
  class SysDeptRelation (line 35) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/entity/SysDict.java
  class SysDict (line 33) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/entity/SysDictItem.java
  class SysDictItem (line 34) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/entity/SysFile.java
  class SysFile (line 36) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/entity/SysLog.java
  class SysLog (line 40) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/entity/SysMenu.java
  class SysMenu (line 41) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/entity/SysOauthClientDetails.java
  class SysOauthClientDetails (line 39) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/entity/SysPost.java
  class SysPost (line 36) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/entity/SysPublicParam.java
  class SysPublicParam (line 34) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/entity/SysRole.java
  class SysRole (line 39) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/entity/SysRoleMenu.java
  class SysRoleMenu (line 35) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/entity/SysUser.java
  class SysUser (line 38) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/entity/SysUserPost.java
  class SysUserPost (line 31) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/entity/SysUserRole.java
  class SysUserRole (line 35) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/feign/RemoteClientDetailsService.java
  type RemoteClientDetailsService (line 36) | @FeignClient(contextId = "remoteClientDetailsService", value = ServiceNa...
    method getClientDetailsById (line 44) | @NoToken

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/feign/RemoteDictService.java
  type RemoteDictService (line 19) | @FeignClient(contextId = "remoteDictService", value = ServiceNameConstan...
    method getDictByType (line 27) | @NoToken

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/feign/RemoteLogService.java
  type RemoteLogService (line 36) | @FeignClient(contextId = "remoteLogService", value = ServiceNameConstant...
    method saveLog (line 44) | @NoToken

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/feign/RemoteParamService.java
  type RemoteParamService (line 20) | @FeignClient(contextId = "remoteParamService", value = ServiceNameConsta...
    method getByKey (line 28) | @NoToken

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/feign/RemoteTokenService.java
  type RemoteTokenService (line 35) | @FeignClient(contextId = "remoteTokenService", value = ServiceNameConsta...
    method getTokenPage (line 43) | @NoToken
    method removeTokenById (line 52) | @NoToken
    method queryToken (line 61) | @NoToken

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/feign/RemoteUserService.java
  type RemoteUserService (line 37) | @FeignClient(contextId = "remoteUserService", value = ServiceNameConstan...
    method info (line 45) | @NoToken

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/util/DictResolver.java
  class DictResolver (line 21) | @UtilityClass
    method getDictItemsByType (line 29) | public List<SysDictItem> getDictItemsByType(String type) {
    method getDictItemLabel (line 43) | public String getDictItemLabel(String type, String itemValue) {
    method getDictItemValue (line 57) | public String getDictItemValue(String type, String itemLabel) {
    method getDictItemByItemValue (line 71) | public SysDictItem getDictItemByItemValue(String type, String itemValu...
    method getDictItemByItemLabel (line 89) | public SysDictItem getDictItemByItemLabel(String type, String itemLabe...

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/util/ParamResolver.java
  class ParamResolver (line 15) | @UtilityClass
    method getLong (line 24) | public Long getLong(String key, Long... defaultVal) {
    method getStr (line 34) | public String getStr(String key, String... defaultVal) {
    method checkAndGet (line 47) | private <T> T checkAndGet(String key, Class<T> clazz, T... defaultVal) {

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/vo/DeptExcelVo.java
  class DeptExcelVo (line 15) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/vo/PostExcelVO.java
  class PostExcelVO (line 20) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/vo/PreLogVO.java
  class PreLogVO (line 27) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/vo/RoleExcelVO.java
  class RoleExcelVO (line 19) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/vo/RoleVO.java
  class RoleVO (line 27) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/vo/TokenVo.java
  class TokenVo (line 11) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/vo/UserExcelVO.java
  class UserExcelVO (line 20) | @Data

FILE: pig-upms/pig-upms-api/src/main/java/com/pig4cloud/pig/admin/api/vo/UserVO.java
  class UserVO (line 37) | @Data

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/PigAdminApplication.java
  class PigAdminApplication (line 35) | @EnablePigDoc(value = "admin")
    method main (line 42) | public static void main(String[] args) {

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysClientController.java
  class SysClientController (line 52) | @RestController
    method getByClientId (line 66) | @GetMapping("/{clientId}")
    method getClientPage (line 80) | @GetMapping("/page")
    method saveClient (line 96) | @SysLog("添加终端")
    method removeById (line 109) | @SysLog("删除终端")
    method updateClient (line 123) | @SysLog("编辑终端")
    method getClientDetailsById (line 136) | @Inner
    method syncClient (line 148) | @SysLog("同步终端")
    method exportClients (line 160) | @ResponseExcel

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysDeptController.java
  class SysDeptController (line 48) | @RestController
    method getById (line 62) | @GetMapping("/{id}")
    method listDepts (line 72) | @GetMapping("/list")
    method getDeptTree (line 83) | @GetMapping(value = "/tree")
    method saveDept (line 94) | @SysLog("添加部门")
    method removeById (line 107) | @SysLog("删除部门")
    method updateDept (line 120) | @SysLog("编辑部门")
    method getDescendantList (line 134) | @GetMapping(value = "/getDescendantList/{deptId}")
    method exportDepts (line 144) | @ResponseExcel
    method importDept (line 157) | @PostMapping("import")

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysDictController.java
  class SysDictController (line 56) | @RestController
    method getById (line 72) | @GetMapping("/details/{id}")
    method getDetails (line 83) | @GetMapping("/details")
    method getDictPage (line 95) | @GetMapping("/page")
    method saveDict (line 109) | @SysLog("添加字典")
    method removeById (line 123) | @SysLog("删除字典")
    method updateDict (line 137) | @PutMapping
    method listDicts (line 150) | @GetMapping("/list")
    method getDictItemPage (line 165) | @GetMapping("/item/page")
    method getDictItemById (line 176) | @GetMapping("/item/details/{id}")
    method getDictItemDetails (line 187) | @GetMapping("/item/details")
    method saveDictItem (line 198) | @SysLog("新增字典项")
    method updateDictItem (line 211) | @SysLog("修改字典项")
    method removeDictItemById (line 223) | @SysLog("通过id删除字典项")
    method syncDict (line 234) | @SysLog("同步字典缓存")
    method exportDictItems (line 246) | @ResponseExcel
    method getDictByType (line 258) | @GetMapping("/type/{type}")
    method getRemoteDictByType (line 270) | @Inner

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysFileController.java
  class SysFileController (line 51) | @RestController
    method getFilePage (line 66) | @GetMapping("/page")
    method removeById (line 79) | @SysLog("删除文件管理")
    method upload (line 95) | @PostMapping(value = "/upload")
    method file (line 107) | @Inner(false)
    method localFile (line 120) | @SneakyThrows

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysLogController.java
  class SysLogController (line 48) | @RestController
    method getLogPage (line 63) | @GetMapping("/page")
    method removeByIds (line 74) | @DeleteMapping
    method saveLog (line 86) | @Inner
    method exportLogs (line 98) | @ResponseExcel

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysMenuController.java
  class SysMenuController (line 54) | @RestController
    method getUserMenu (line 69) | @GetMapping
    method getMenuTree (line 85) | @GetMapping(value = "/tree")
    method getRoleTree (line 96) | @GetMapping("/tree/{roleId}")
    method getById (line 107) | @GetMapping("/{id}")
    method saveMenu (line 118) | @SysLog("新增菜单")
    method removeById (line 132) | @SysLog("根据菜单ID删除菜单")
    method updateMenu (line 145) | @SysLog("更新菜单")

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysMobileController.java
  class SysMobileController (line 39) | @RestController
    method sendSmsCode (line 53) | @Inner(value = false)

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysPostController.java
  class SysPostController (line 49) | @RestController
    method listPosts (line 62) | @GetMapping("/list")
    method getPostPage (line 74) | @GetMapping("/page")
    method getById (line 87) | @HasPermission("sys_post_view")
    method getDetails (line 99) | @GetMapping("/details")
    method savePost (line 111) | @PostMapping
    method updatePost (line 124) | @PutMapping
    method removeById (line 137) | @DeleteMapping
    method exportPosts (line 149) | @ResponseExcel
    method importRole (line 163) | @PostMapping("/import")

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysPublicParamController.java
  class SysPublicParamController (line 47) | @RestController
    method publicKey (line 61) | @Inner(value = false)
    method getParamPage (line 74) | @GetMapping("/page")
    method getById (line 93) | @Operation(description = "通过id查询公共参数", summary = "通过id查询公共参数")
    method getDetail (line 104) | @GetMapping("/details")
    method saveParam (line 115) | @PostMapping
    method updateParam (line 128) | @PutMapping
    method removeById (line 141) | @DeleteMapping
    method exportParams (line 153) | @ResponseExcel
    method syncParam (line 165) | @SysLog("同步参数")

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysRegisterController.java
  class SysRegisterController (line 24) | @RestController
    method registerUser (line 38) | @Inner(value = false)

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysRoleController.java
  class SysRoleController (line 55) | @RestController
    method getById (line 69) | @GetMapping("/details/{id}")
    method getDetails (line 80) | @GetMapping("/details")
    method saveRole (line 91) | @SysLog("添加角色")
    method updateRole (line 105) | @SysLog("修改角色信息")
    method removeById (line 119) | @SysLog("删除角色")
    method listRoles (line 132) | @GetMapping("/list")
    method getRolePage (line 144) | @GetMapping("/page")
    method saveRoleMenus (line 156) | @SysLog("更新角色菜单")
    method getRoleList (line 169) | @PostMapping("/getRoleList")
    method exportRoles (line 179) | @ResponseExcel
    method importRole (line 193) | @PostMapping("/import")

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysSystemInfoController.java
  class SysSystemInfoController (line 26) | @RestController
    method cache (line 37) | @GetMapping("/cache")

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysTokenController.java
  class SysTokenController (line 39) | @RestController
    method getTokenPage (line 53) | @PostMapping("/page")
    method removeById (line 65) | @SysLog("删除用户token")

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/controller/SysUserController.java
  class SysUserController (line 55) | @RestController
    method info (line 69) | @Inner
    method info (line 80) | @GetMapping(value = { "/info" })
    method user (line 99) | @GetMapping("/details/{id}")
    method getDetails (line 110) | @Inner(value = false)
    method userDel (line 123) | @SysLog("删除用户信息")
    method saveUser (line 136) | @SysLog("添加用户")
    method updateUser (line 149) | @SysLog("更新用户信息")
    method getUserPage (line 163) | @GetMapping("/page")
    method updateUserInfo (line 174) | @SysLog("修改个人信息")
    method exportUsers (line 186) | @ResponseExcel
    method importUser (line 200) | @PostMapping("/import")
    method lockUser (line 212) | @PutMapping("/lock/{username}")
    method password (line 223) | @PutMapping("/password")
    method check (line 236) | @PostMapping("/check")

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/mapper/SysDeptMapper.java
  type SysDeptMapper (line 32) | @Mapper

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/mapper/SysDictItemMapper.java
  type SysDictItemMapper (line 29) | @Mapper

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/mapper/SysDictMapper.java
  type SysDictMapper (line 32) | @Mapper

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/mapper/SysFileMapper.java
  type SysFileMapper (line 30) | @Mapper

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/mapper/SysLogMapper.java
  type SysLogMapper (line 31) | @Mapper

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/mapper/SysMenuMapper.java
  type SysMenuMapper (line 36) | @Mapper
    method listMenusByRoleId (line 44) | List<SysMenu> listMenusByRoleId(Long roleId);

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/mapper/SysOauthClientDetailsMapper.java
  type SysOauthClientDetailsMapper (line 32) | @Mapper

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/mapper/SysPostMapper.java
  type SysPostMapper (line 32) | @Mapper
    method listPostsByUserId (line 40) | List<SysPost> listPostsByUserId(Long userId);

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/mapper/SysPublicParamMapper.java
  type SysPublicParamMapper (line 29) | @Mapper

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/mapper/SysRoleMapper.java
  type SysRoleMapper (line 36) | @Mapper
    method listRolesByUserId (line 44) | List<SysRole> listRolesByUserId(Long userId);

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/mapper/SysRoleMenuMapper.java
  type SysRoleMenuMapper (line 32) | @Mapper

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/mapper/SysUserMapper.java
  type SysUserMapper (line 41) | @Mapper
    method getUser (line 49) | UserVO getUser(@Param("query") UserDTO userDTO);
    method getUsersPage (line 57) | IPage<UserVO> getUsersPage(Page page, @Param("query") UserDTO userDTO);
    method listUsers (line 64) | List<UserVO> listUsers(@Param("query") UserDTO userDTO);

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/mapper/SysUserPostMapper.java
  type SysUserPostMapper (line 31) | @Mapper

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/mapper/SysUserRoleMapper.java
  type SysUserRoleMapper (line 34) | @Mapper

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/SysDeptService.java
  type SysDeptService (line 37) | public interface SysDeptService extends IService<SysDept> {
    method getDeptTree (line 44) | List<Tree<Long>> getDeptTree(String deptName);
    method removeDeptById (line 51) | Boolean removeDeptById(Long id);
    method exportDepts (line 57) | List<DeptExcelVo> exportDepts();
    method importDept (line 65) | R importDept(List<DeptExcelVo> excelVOList, BindingResult bindingResult);
    method listDescendants (line 72) | List<SysDept> listDescendants(Long deptId);

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/SysDictItemService.java
  type SysDictItemService (line 29) | public interface SysDictItemService extends IService<SysDictItem> {
    method removeDictItem (line 36) | R removeDictItem(Long id);
    method updateDictItem (line 43) | R updateDictItem(SysDictItem item);

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/SysDictService.java
  type SysDictService (line 29) | public interface SysDictService extends IService<SysDict> {
    method removeDictByIds (line 36) | R removeDictByIds(Long[] ids);
    method updateDict (line 43) | R updateDict(SysDict sysDict);
    method syncDictCache (line 49) | R syncDictCache();

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/SysFileService.java
  type SysFileService (line 35) | public interface SysFileService extends IService<SysFile> {
    method uploadFile (line 42) | R uploadFile(MultipartFile file);
    method getFile (line 50) | void getFile(String bucket, String fileName, HttpServletResponse respo...
    method removeFile (line 57) | Boolean removeFile(Long id);

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/SysLogService.java
  type SysLogService (line 37) | public interface SysLogService extends IService<SysLog> {
    method getLogPage (line 45) | Page getLogPage(Page page, SysLogDTO sysLog);
    method saveLog (line 52) | Boolean saveLog(SysLog sysLog);
    method listLogs (line 59) | List<SysLog> listLogs(SysLogDTO sysLog);

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/SysMenuService.java
  type SysMenuService (line 39) | public interface SysMenuService extends IService<SysMenu> {
    method findMenuByRoleId (line 46) | List<SysMenu> findMenuByRoleId(Long roleId);
    method removeMenuById (line 53) | R removeMenuById(Long id);
    method updateMenuById (line 60) | Boolean updateMenuById(SysMenu sysMenu);
    method getMenuTree (line 69) | List<Tree<Long>> getMenuTree(Long parentId, String menuName, String ty...
    method filterMenu (line 78) | List<Tree<Long>> filterMenu(Set<SysMenu> all, String type, Long parent...

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/SysMobileService.java
  type SysMobileService (line 28) | public interface SysMobileService {
    method sendSmsCode (line 35) | R<Boolean> sendSmsCode(String mobile);

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/SysOauthClientDetailsService.java
  type SysOauthClientDetailsService (line 33) | public interface SysOauthClientDetailsService extends IService<SysOauthC...
    method updateClientById (line 40) | Boolean updateClientById(SysOauthClientDetails clientDetails);
    method saveClient (line 47) | Boolean saveClient(SysOauthClientDetails clientDetails);
    method getClientPage (line 55) | Page getClientPage(Page page, SysOauthClientDetails query);
    method syncClientCache (line 61) | R syncClientCache();

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/SysPostService.java
  type SysPostService (line 34) | public interface SysPostService extends IService<SysPost> {
    method listPosts (line 40) | List<PostExcelVO> listPosts();
    method importPost (line 48) | R importPost(List<PostExcelVO> excelVOList, BindingResult bindingResult);

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/SysPublicParamService.java
  type SysPublicParamService (line 30) | public interface SysPublicParamService extends IService<SysPublicParam> {
    method getParamValue (line 37) | String getParamValue(String publicKey);
    method updateParam (line 44) | R updateParam(SysPublicParam sysPublicParam);
    method removeParamByIds (line 51) | R removeParamByIds(Long[] publicIds);
    method syncParamCache (line 57) | R syncParamCache();

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/SysRoleMenuService.java
  type SysRoleMenuService (line 31) | public interface SysRoleMenuService extends IService<SysRoleMenu> {
    method saveRoleMenus (line 39) | Boolean saveRoleMenus(Long roleId, String menuIds);

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/SysRoleService.java
  type SysRoleService (line 40) | public interface SysRoleService extends IService<SysRole> {
    method listRolesByUserId (line 47) | List<SysRole> listRolesByUserId(Long userId);
    method listRolesByRoleIds (line 55) | List<SysRole> listRolesByRoleIds(List<Long> roleIdList, String key);
    method removeRoleByIds (line 62) | Boolean removeRoleByIds(Long[] ids);
    method updateRoleMenus (line 69) | Boolean updateRoleMenus(RoleVO roleVo);
    method importRole (line 77) | R importRole(List<RoleExcelVO> excelVOList, BindingResult bindingResult);
    method listRoles (line 83) | List<RoleExcelVO> listRoles();

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/SysUserRoleService.java
  type SysUserRoleService (line 33) | public interface SysUserRoleService extends IService<SysUserRole> {

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/SysUserService.java
  type SysUserService (line 44) | public interface SysUserService extends IService<SysUser> {
    method getUserInfo (line 51) | R<UserInfo> getUserInfo(UserDTO query);
    method getUsersWithRolePage (line 59) | IPage getUsersWithRolePage(Page page, UserDTO userDTO);
    method removeUserByIds (line 66) | Boolean removeUserByIds(Long[] ids);
    method updateUserInfo (line 73) | R<Boolean> updateUserInfo(UserDTO userDto);
    method updateUser (line 80) | Boolean updateUser(UserDTO userDto);
    method getUserById (line 87) | UserVO getUserById(Long id);
    method saveUser (line 94) | Boolean saveUser(UserDTO userDto);
    method listUsers (line 101) | List<UserExcelVO> listUsers(UserDTO userDTO);
    method importUsers (line 109) | R importUsers(List<UserExcelVO> excelVOList, BindingResult bindingResu...
    method registerUser (line 116) | R<Boolean> registerUser(RegisterUserDTO userDto);
    method lockUser (line 123) | R<Boolean> lockUser(String username);
    method changePassword (line 130) | R changePassword(UserDTO userDto);
    method checkPassword (line 137) | R checkPassword(String password);

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDeptServiceImpl.java
  class SysDeptServiceImpl (line 59) | @Service
    method removeDeptById (line 71) | @Override
    method getDeptTree (line 87) | @Override
    method exportDepts (line 128) | @Override
    method importDept (line 152) | @Override
    method listDescendants (line 194) | @Override
    method recursiveDept (line 214) | private void recursiveDept(List<SysDept> allDeptList, Long parentId, L...

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDictItemServiceImpl.java
  class SysDictItemServiceImpl (line 40) | @Service
    method removeDictItem (line 52) | @Override
    method updateDictItem (line 71) | @Override

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysDictServiceImpl.java
  class SysDictServiceImpl (line 47) | @Service
    method removeDictByIds (line 58) | @Override
    method updateDict (line 81) | @Override
    method syncDictCache (line 97) | @Override

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysFileServiceImpl.java
  class SysFileServiceImpl (line 51) | @Slf4j
    method uploadFile (line 66) | @Override
    method getFile (line 92) | @Override
    method removeFile (line 110) | @Override
    method fileLog (line 127) | private void fileLog(MultipartFile file, String fileName) {

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysLogServiceImpl.java
  class SysLogServiceImpl (line 44) | @Service
    method getLogPage (line 53) | @Override
    method saveLog (line 63) | @Override
    method listLogs (line 75) | @Override
    method buildQuery (line 85) | private LambdaQueryWrapper buildQuery(SysLogDTO sysLog) {

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysMenuServiceImpl.java
  class SysMenuServiceImpl (line 64) | @Service
    method findMenuByRoleId (line 76) | @Override
    method removeMenuById (line 88) | @Override
    method updateMenuById (line 108) | @Override
    method getMenuTree (line 121) | @Override
    method filterMenu (line 154) | @Override
    method getNodeFunction (line 166) | @NotNull
    method menuTypePredicate (line 204) | private Predicate<SysMenu> menuTypePredicate(String type) {

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysMobileServiceImpl.java
  class SysMobileServiceImpl (line 51) | @Slf4j
    method sendSmsCode (line 63) | @Override

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysOauthClientDetailsServiceImpl.java
  class SysOauthClientDetailsServiceImpl (line 41) | @Service
    method updateClientById (line 51) | @Override
    method saveClient (line 64) | @Override
    method insertOrUpdate (line 76) | private SysOauthClientDetails insertOrUpdate(SysOauthClientDetails cli...
    method getClientPage (line 88) | @Override
    method syncClientCache (line 97) | @Override

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysPostServiceImpl.java
  class SysPostServiceImpl (line 46) | @Service
    method importPost (line 55) | @Override
    method listPosts (line 95) | @Override
    method insertExcelPost (line 110) | private void insertExcelPost(PostExcelVO excel) {

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysPublicParamServiceImpl.java
  class SysPublicParamServiceImpl (line 46) | @Service
    method getParamValue (line 57) | @Override
    method updateParam (line 75) | @Override
    method removeParamByIds (line 92) | @Override
    method syncParamCache (line 107) | @Override

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysRoleMenuServiceImpl.java
  class SysRoleMenuServiceImpl (line 46) | @Service
    method saveRoleMenus (line 57) | @Override

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysRoleServiceImpl.java
  class SysRoleServiceImpl (line 56) | @Service
    method listRolesByUserId (line 67) | @Override
    method listRolesByRoleIds (line 78) | @Override
    method removeRoleByIds (line 89) | @Override
    method updateRoleMenus (line 102) | @Override
    method importRole (line 113) | @Override
    method listRoles (line 153) | @Override
    method insertExcelRole (line 168) | private void insertExcelRole(RoleExcelVO excel) {

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysUserRoleServiceImpl.java
  class SysUserRoleServiceImpl (line 36) | @Service

FILE: pig-upms/pig-upms-biz/src/main/java/com/pig4cloud/pig/admin/service/impl/SysUserServiceImpl.java
  class SysUserServiceImpl (line 68) | @Slf4j
    method saveUser (line 95) | @Override
    method getUserInfo (line 137) | @Override
    method getUsersWithRolePage (line 165) | @Override
    method getUserById (line 175) | @Override
    method removeUserByIds (line 188) | @Override
    method updateUserInfo (line 206) | @Override
    method updateUser (line 224) | @Override
    method listUsers (line 269) | @Override
    method importUsers (line 295) | @Override
    method insertExcelUser (line 366) | private void insertExcelUser(UserExcelVO excel, Optional<SysDept> dept...
    method registerUser (line 393) | @Override
    method lockUser (line 413) | @Override
    method changePassword (line 431) | @Override
    method checkPassword (line 464) | @Override

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/PigCodeGenApplication.java
  class PigCodeGenApplication (line 34) | @EnableDynamicDataSource
    method main (line 42) | public static void main(String[] args) {

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/config/PigCodeGenDefaultProperties.java
  class PigCodeGenDefaultProperties (line 16) | @Data
    method afterPropertiesSet (line 78) | @Override

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/controller/GenDsConfController.java
  class GenDsConfController (line 49) | @RestController
    method getDsConfPage (line 65) | @GetMapping("/page")
    method listDsConfs (line 78) | @Inner(value = false)
    method getDsConfById (line 90) | @GetMapping("/{id}")
    method saveDsConf (line 101) | @PostMapping
    method updateDsConf (line 113) | @PutMapping
    method removeDsConfByIds (line 125) | @DeleteMapping
    method generatorDoc (line 137) | @SneakyThrows

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/controller/GenFieldTypeController.java
  class GenFieldTypeController (line 44) | @RestController
    method getFieldTypePage (line 59) | @GetMapping("/page")
    method listFieldTypes (line 73) | @GetMapping("/list")
    method getFieldTypeById (line 84) | @GetMapping("/details/{id}")
    method getFieldTypeDetails (line 95) | @GetMapping("/details")
    method saveFieldType (line 106) | @PostMapping
    method updateFieldType (line 118) | @PutMapping
    method removeFieldTypeByIds (line 130) | @DeleteMapping
    method exportFieldTypes (line 142) | @ResponseExcel

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/controller/GenGroupController.java
  class GenGroupController (line 47) | @RestController
    method getGroupPage (line 62) | @GetMapping("/page")
    method getGroupById (line 77) | @GetMapping("/{id}")
    method saveGroup (line 89) | @PostMapping
    method updateGroup (line 103) | @PutMapping
    method removeGroupByIds (line 117) | @DeleteMapping
    method exportGroups (line 131) | @ResponseExcel
    method listGroups (line 143) | @GetMapping("/list")

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/controller/GenTableController.java
  class GenTableController (line 44) | @RestController
    method getTablePage (line 64) | @GetMapping("/page")
    method getTableById (line 75) | @GetMapping("/{id}")
    method listTables (line 86) | @GetMapping("/list/{dsName}")
    method getTable (line 97) | @GetMapping("/{dsName}/{tableName}")
    method getTableColumn (line 108) | @GetMapping("/column/{dsName}/{tableName}")
    method getTableDdl (line 119) | @GetMapping("/ddl/{dsName}/{tableName}")
    method syncTable (line 130) | @GetMapping("/sync/{dsName}/{tableName}")
    method updateTable (line 148) | @PutMapping
    method updateTableField (line 161) | @PutMapping("/field/{dsName}/{tableName}")
    method exportTables (line 174) | @ResponseExcel

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/controller/GenTemplateController.java
  class GenTemplateController (line 47) | @RestController
    method getTemplatePage (line 62) | @Operation(summary = "分页查询", description = "分页查询")
    method listTemplates (line 77) | @Operation(summary = "查询全部", description = "查询全部")
    method getTemplateById (line 90) | @Operation(summary = "通过id查询", description = "通过id查询")
    method saveTemplate (line 102) | @XssCleanIgnore
    method updateTemplate (line 116) | @XssCleanIgnore
    method removeTemplateByIds (line 130) | @Operation(summary = "通过id删除模板", description = "通过id删除模板")
    method exportTemplates (line 143) | @ResponseExcel
    method online (line 155) | @Operation(summary = "在线更新模板", description = "在线更新模板")
    method checkVersion (line 166) | @Operation(summary = "在线检查模板", description = "在线检查模板")

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/controller/GenTemplateGroupController.java
  class GenTemplateGroupController (line 45) | @RestController
    method getTemplateGroupPage (line 60) | @Operation(summary = "分页查询", description = "分页查询")
    method getTemplateGroupById (line 73) | @Operation(summary = "通过id查询", description = "通过id查询")
    method saveTemplateGroup (line 85) | @Operation(summary = "新增模板分组关联表", description = "新增模板分组关联表")
    method updateTemplateGroup (line 98) | @Operation(summary = "修改模板分组关联表", description = "修改模板分组关联表")
    method removeTemplateGroupByIds (line 111) | @Operation(summary = "通过id删除模板分组关联表", description = "通过id删除模板分组关联表")
    method exportTemplateGroups (line 124) | @ResponseExcel

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/controller/GeneratorController.java
  class GeneratorController (line 46) | @RestController
    method download (line 59) | @SneakyThrows
    method code (line 89) | @ResponseBody
    method preview (line 106) | @SneakyThrows

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/entity/ColumnEntity.java
  class ColumnEntity (line 26) | @Data

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/entity/GenConfig.java
  class GenConfig (line 26) | @Data

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/entity/GenDatasourceConf.java
  class GenDatasourceConf (line 32) | @Data

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/entity/GenFieldType.java
  class GenFieldType (line 34) | @Data

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/entity/GenGroupEntity.java
  class GenGroupEntity (line 34) | @Data

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/entity/GenTable.java
  class GenTable (line 38) | @Data

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/entity/GenTableColumnEntity.java
  class GenTableColumnEntity (line 31) | @Data

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/entity/GenTemplateEntity.java
  class GenTemplateEntity (line 34) | @Data

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/entity/GenTemplateGroupEntity.java
  class GenTemplateGroupEntity (line 33) | @Data

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/entity/TableEntity.java
  class TableEntity (line 28) | @Data

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/mapper/GenDatasourceConfMapper.java
  type GenDatasourceConfMapper (line 29) | @Mapper

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/mapper/GenDynamicMapper.java
  type GenDynamicMapper (line 33) | @Mapper
    method dynamicQuerySql (line 41) | @InterceptorIgnore(tenantLine = "true")

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/mapper/GenFieldTypeMapper.java
  type GenFieldTypeMapper (line 33) | @Mapper
    method getPackageByTableId (line 42) | Set<String> getPackageByTableId(@Param("dsName") String dsName, @Param...

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/mapper/GenGroupMapper.java
  type GenGroupMapper (line 32) | @Mapper
    method getGroupVoById (line 40) | GroupVO getGroupVoById(@Param("id") Long id);

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/mapper/GenTableColumnMapper.java
  type GenTableColumnMapper (line 30) | @Mapper

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/mapper/GenTableMapper.java
  type GenTableMapper (line 30) | @Mapper

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/mapper/GenTemplateGroupMapper.java
  type GenTemplateGroupMapper (line 30) | @Mapper

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/mapper/GenTemplateMapper.java
  type GenTemplateMapper (line 32) | @Mapper
    method listTemplateById (line 40) | List<GenTemplateEntity> listTemplateById(Long groupId);

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/GenDatasourceConfService.java
  type GenDatasourceConfService (line 28) | public interface GenDatasourceConfService extends IService<GenDatasource...
    method saveDsByEnc (line 35) | Boolean saveDsByEnc(GenDatasourceConf genDatasourceConf);
    method updateDsByEnc (line 42) | Boolean updateDsByEnc(GenDatasourceConf genDatasourceConf);
    method addDynamicDataSource (line 48) | void addDynamicDataSource(GenDatasourceConf datasourceConf);
    method checkDataSource (line 55) | Boolean checkDataSource(GenDatasourceConf datasourceConf);
    method removeByDsId (line 62) | Boolean removeByDsId(Long[] dsIds);

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/GenFieldTypeService.java
  type GenFieldTypeService (line 31) | public interface GenFieldTypeService extends IService<GenFieldType> {
    method getPackageByTableId (line 39) | Set<String> getPackageByTableId(String dsName, String tableName);

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/GenGroupService.java
  type GenGroupService (line 31) | public interface GenGroupService extends IService<GenGroupEntity> {
    method saveGenGroup (line 37) | void saveGenGroup(TemplateGroupDTO genTemplateGroup);
    method delGroupAndTemplate (line 43) | void delGroupAndTemplate(Long[] ids);
    method getGroupVoById (line 49) | GroupVO getGroupVoById(Long id);
    method updateGroupAndTemplateById (line 55) | void updateGroupAndTemplateById(GroupVO GroupVo);

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/GenTableColumnService.java
  type GenTableColumnService (line 31) | public interface GenTableColumnService extends IService<GenTableColumnEn...
    method initFieldList (line 37) | void initFieldList(List<GenTableColumnEntity> tableFieldList);
    method updateTableField (line 45) | void updateTableField(String dsName, String tableName, List<GenTableCo...

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/GenTableService.java
  type GenTableService (line 34) | public interface GenTableService extends IService<GenTable> {
    method queryTablePage (line 42) | IPage queryTablePage(Page<Table> page, GenTable table);
    method queryOrBuildTable (line 50) | GenTable queryOrBuildTable(String dsName, String tableName);
    method queryTableDdl (line 59) | String queryTableDdl(String dsName, String tableName) throws Exception;
    method queryTableList (line 66) | List<String> queryTableList(String dsName);
    method queryTableColumn (line 74) | List<String> queryTableColumn(String dsName, String tableName);

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/GenTemplateGroupService.java
  type GenTemplateGroupService (line 29) | public interface GenTemplateGroupService extends IService<GenTemplateGro...

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/GenTemplateService.java
  type GenTemplateService (line 30) | public interface GenTemplateService extends IService<GenTemplateEntity> {
    method checkVersion (line 36) | R checkVersion();
    method onlineUpdate (line 42) | R onlineUpdate();

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/GeneratorService.java
  type GeneratorService (line 30) | public interface GeneratorService {
    method downloadCode (line 37) | void downloadCode(Long tableId, ZipOutputStream zip);
    method preview (line 44) | List<Map<String, String>> preview(Long tableId);
    method generatorCode (line 50) | void generatorCode(Long tableId);

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenDatasourceConfServiceImpl.java
  class GenDatasourceConfServiceImpl (line 51) | @Slf4j
    method saveDsByEnc (line 66) | @Override
    method updateDsByEnc (line 87) | @Override
    method removeByDsId (line 112) | @Override
    method addDynamicDataSource (line 125) | @Override
    method checkDataSource (line 144) | @Override

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenFieldTypeServiceImpl.java
  class GenFieldTypeServiceImpl (line 35) | @Service
    method getPackageByTableId (line 45) | @Override

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenGroupServiceImpl.java
  class GenGroupServiceImpl (line 44) | @Service
    method saveGenGroup (line 54) | @Override
    method delGroupAndTemplate (line 75) | @Override
    method getGroupVoById (line 89) | @Override
    method updateGroupAndTemplateById (line 98) | @Override

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenTableColumnServiceImpl.java
  class GenTableColumnServiceImpl (line 28) | @Service
    method initFieldList (line 39) | public void initFieldList(List<GenTableColumnEntity> tableFieldList) {
    method updateTableField (line 81) | @Override

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenTableServiceImpl.java
  class GenTableServiceImpl (line 63) | @Service
    method queryTableDdl (line 80) | @Override
    method queryTableColumn (line 96) | @Override
    method queryTablePage (line 110) | @Override
    method queryTableList (line 134) | @Override
    method queryOrBuildTable (line 148) | @Override
    method tableImport (line 177) | @Transactional(rollbackFor = Exception.class)
    method getGenTableColumnEntities (line 233) | private static @NotNull List<GenTableColumnEntity> getGenTableColumnEn...

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenTemplateGroupServiceImpl.java
  class GenTemplateGroupServiceImpl (line 31) | @Service

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GenTemplateServiceImpl.java
  class GenTemplateServiceImpl (line 55) | @Slf4j
    method onlineUpdate (line 72) | @Override
    method checkVersion (line 101) | public R checkVersion() {
    method getConfigAndVersion (line 127) | private Map<String, Object> getConfigAndVersion() {
    method insertTemplateFiles (line 149) | private void insertTemplateFiles(String version, JSONObject configJson...
    method getCGTMFile (line 182) | private String getCGTMFile(String fileName) {

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/service/impl/GeneratorServiceImpl.java
  class GeneratorServiceImpl (line 59) | @Service
    method downloadCode (line 78) | @Override
    method preview (line 115) | @Override
    method generatorCode (line 155) | @Override
    method getDataModel (line 178) | private Map<String, Object> getDataModel(Long tableId) {
    method isSpringBoot3 (line 257) | private boolean isSpringBoot3() {
    method setFieldTypeList (line 266) | private void setFieldTypeList(Map<String, Object> dataModel, GenTable ...

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/util/AutoFillEnum.java
  type AutoFillEnum (line 8) | public enum AutoFillEnum {

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/util/BoolFillEnum.java
  type BoolFillEnum (line 11) | @Getter

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/util/CommonColumnFiledEnum.java
  type CommonColumnFiledEnum (line 12) | @Getter

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/util/DictTool.java
  class DictTool (line 15) | public class DictTool {
    method quotation (line 21) | public static String quotation(List<String> fields) {
    method format (line 30) | public static String format(List<String> fields) {

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/util/GenKit.java
  class GenKit (line 12) | @UtilityClass
    method getFunctionName (line 20) | public String getFunctionName(String tableName) {
    method getModuleName (line 29) | public String getModuleName(String packageName) {

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/util/GeneratorStyleEnum.java
  type GeneratorStyleEnum (line 11) | @Getter

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/util/NamingCaseTool.java
  class NamingCaseTool (line 11) | public class NamingCaseTool {
    method getProperty (line 18) | public static String getProperty(String in) {
    method setProperty (line 27) | public static String setProperty(String in) {
    method pascalCase (line 36) | public static String pascalCase(String in) {

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/util/VelocityKit.java
  class VelocityKit (line 21) | @Service
    method render (line 30) | public static String render(String template, Map<String, Object> map) {
    method renderStr (line 55) | public static String renderStr(String str, Map<String, Object> dataMod...

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/util/vo/GenCreateTableVO.java
  class GenCreateTableVO (line 31) | @Data

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/util/vo/GenTemplateFileVO.java
  class GenTemplateFileVO (line 15) | @Data

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/util/vo/GroupVO.java
  class GroupVO (line 11) | @Data

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/util/vo/SqlDto.java
  class SqlDto (line 9) | @Data

FILE: pig-visual/pig-codegen/src/main/java/com/pig4cloud/pig/codegen/util/vo/TemplateGroupDTO.java
  class TemplateGroupDTO (line 16) | @Data

FILE: pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/PigMonitorApplication.java
  class PigMonitorApplication (line 30) | @EnableAdminServer
    method main (line 35) | public static void main(String[] args) {

FILE: pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/config/CustomCsrfFilter.java
  class CustomCsrfFilter (line 20) | public class CustomCsrfFilter extends OncePerRequestFilter {
    method doFilterInternal (line 32) | @Override

FILE: pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/config/SecuritySecureConfig.java
  class SecuritySecureConfig (line 47) | @Configuration(proxyBeanMethods = false)
    method SecuritySecureConfig (line 59) | public SecuritySecureConfig(AdminServerProperties adminServer, Securit...
    method filterChain (line 70) | @Bean
    method userDetailsService (line 116) | @Bean
    method passwordEncoder (line 129) | @Bean

FILE: pig-visual/pig-monitor/src/main/java/com/pig4cloud/pig/monitor/converter/NacosServiceInstanceConverter.java
  class NacosServiceInstanceConverter (line 18) | @Configuration(proxyBeanMethods = false)
    method getMetadata (line 26) | @Override

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/PigQuartzApplication.java
  class PigQuartzApplication (line 19) | @EnablePigDoc("job")
    method main (line 26) | public static void main(String[] args) {

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/config/AutowireCapableBeanJobFactory.java
  class AutowireCapableBeanJobFactory (line 33) | class AutowireCapableBeanJobFactory extends SpringBeanJobFactory {
    method AutowireCapableBeanJobFactory (line 37) | AutowireCapableBeanJobFactory(AutowireCapableBeanFactory beanFactory) {
    method createJobInstance (line 48) | @Override

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/config/PigInitQuartzJob.java
  class PigInitQuartzJob (line 37) | @Configuration
    method afterPropertiesSet (line 51) | @Override

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/config/PigQuartzConfig.java
  class PigQuartzConfig (line 49) | @EnableAsync
    method PigQuartzConfig (line 77) | public PigQuartzConfig(QuartzProperties properties,
    method quartzScheduler (line 93) | @Bean
    method asProperties (line 124) | private Properties asProperties(Map<String, String> source) {
    method customize (line 134) | private void customize(SchedulerFactoryBean schedulerFactoryBean) {
    method scheduler (line 148) | @Bean

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/config/PigQuartzCustomizerConfig.java
  class PigQuartzCustomizerConfig (line 31) | @Configuration
    method customize (line 38) | @Override

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/config/PigQuartzFactory.java
  class PigQuartzFactory (line 37) | @DisallowConcurrentExecution
    method execute (line 51) | @Override

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/config/PigQuartzInvokeFactory.java
  class PigQuartzInvokeFactory (line 37) | @Aspect
    method init (line 49) | @SneakyThrows

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/constants/JobTypeQuartzEnum.java
  type JobTypeQuartzEnum (line 29) | @Getter

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/constants/PigQuartzEnum.java
  type PigQuartzEnum (line 32) | @Getter

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/controller/SysJobController.java
  class SysJobController (line 56) | @Slf4j
    method getJobPage (line 78) | @GetMapping("/page")
    method getById (line 95) | @GetMapping("/{id}")
    method saveJob (line 106) | @SysLog("新增定时任务")
    method updateJob (line 140) | @SysLog("修改定时任务")
    method removeById (line 176) | @SysLog("删除定时任务")
    method shutdownJobs (line 196) | @SysLog("暂停全部定时任务")
    method startJobs (line 221) | @SysLog("启动全部暂停的定时任务")
    method refreshJobs (line 238) | @SysLog("刷新全部定时任务")
    method startJob (line 260) | @SysLog("启动定时任务")
    method runJob (line 293) | @SysLog("立刻执行定时任务")
    method shutdownJob (line 314) | @SysLog("暂停定时任务")
    method getJobLogPage (line 335) | @GetMapping("/job-log")
    method isValidTaskName (line 347) | @GetMapping("/is-valid-task-name")
    method exportJobs (line 360) | @ResponseExcel

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/controller/SysJobLogController.java
  class SysJobLogController (line 40) | @RestController
    method getJobLogPage (line 55) | @GetMapping("/page")
    method removeBatchByIds (line 66) | @DeleteMapping

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/entity/SysJob.java
  class SysJob (line 41) | @Data

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/entity/SysJobLog.java
  class SysJobLog (line 42) | @Data

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/event/SysJobEvent.java
  class SysJobEvent (line 32) | @Getter

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/event/SysJobListener.java
  class SysJobListener (line 37) | @Service
    method comSysJob (line 43) | @Async

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/event/SysJobLogEvent.java
  class SysJobLogEvent (line 31) | @Getter

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/event/SysJobLogListener.java
  class SysJobLogListener (line 36) | @Slf4j
    method saveSysJobLog (line 47) | @Async

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/exception/TaskException.java
  class TaskException (line 28) | public class TaskException extends Exception {
    method TaskException (line 36) | public TaskException() {
    method TaskException (line 44) | public TaskException(String msg) {

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/mapper/SysJobLogMapper.java
  type SysJobLogMapper (line 30) | @Mapper

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/mapper/SysJobMapper.java
  type SysJobMapper (line 30) | @Mapper

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/service/SysJobLogService.java
  type SysJobLogService (line 29) | public interface SysJobLogService extends IService<SysJobLog> {

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/service/SysJobService.java
  type SysJobService (line 29) | public interface SysJobService extends IService<SysJob> {

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/service/impl/SysJobLogServiceImpl.java
  class SysJobLogServiceImpl (line 35) | @Service

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/service/impl/SysJobServiceImpl.java
  class SysJobServiceImpl (line 35) | @Service

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/task/RestTaskDemo.java
  class RestTaskDemo (line 21) | @Slf4j
    method demoMethod (line 32) | @Inner(value = false)

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/task/SpringBeanTaskDemo.java
  class SpringBeanTaskDemo (line 34) | @Slf4j
    method demoMethod (line 44) | @SneakyThrows

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/util/ClassNameValidator.java
  class ClassNameValidator (line 33) | @Slf4j
    method isValidClassName (line 70) | public static boolean isValidClassName(String className) {
    method isValidMethodName (line 106) | public static boolean isValidMethodName(String methodName) {

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/util/ITaskInvok.java
  type ITaskInvok (line 29) | public interface ITaskInvok {
    method invokMethod (line 36) | void invokMethod(SysJob sysJob) throws TaskException;

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/util/JarTaskInvok.java
  class JarTaskInvok (line 37) | @Slf4j
    method invokMethod (line 46) | @Override

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/util/JavaClassTaskInvok.java
  class JavaClassTaskInvok (line 36) | @Component("javaClassTaskInvok")
    method invokMethod (line 45) | @Override

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/util/RestTaskInvok.java
  class RestTaskInvok (line 34) | @Slf4j
    method invokMethod (line 44) | @Override

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/util/SpringBeanTaskInvok.java
  class SpringBeanTaskInvok (line 38) | @Component("springBeanTaskInvok")
    method invokMethod (line 47) | @Override

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/util/TaskInvokFactory.java
  class TaskInvokFactory (line 16) | @Slf4j
    method getInvoker (line 25) | public static ITaskInvok getInvoker(String jobType) throws TaskExcepti...

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/util/TaskInvokUtil.java
  class TaskInvokUtil (line 43) | @Slf4j
    method invokMethod (line 57) | @SneakyThrows

FILE: pig-visual/pig-quartz/src/main/java/com/pig4cloud/pig/daemon/quartz/util/TaskUtil.java
  class TaskUtil (line 33) | @Slf4j
    method getJobKey (line 42) | public static JobKey getJobKey(SysJob sysjob) {
    method getTriggerKey (line 51) | public static TriggerKey getTriggerKey(SysJob sysjob) {
    method addOrUpateJob (line 60) | public void addOrUpateJob(SysJob sysjob, Scheduler scheduler) {
    method runOnce (line 113) | public static boolean runOnce(Scheduler scheduler, SysJob sysJob) {
    method pauseJob (line 134) | public void pauseJob(SysJob sysjob, Scheduler scheduler) {
    method resumeJob (line 151) | public void resumeJob(SysJob sysjob, Scheduler scheduler) {
    method removeJob (line 168) | public void removeJob(SysJob sysjob, Scheduler scheduler) {
    method startJobs (line 189) | public void startJobs(Scheduler scheduler) {
    method pauseJobs (line 205) | public void pauseJobs(Scheduler scheduler) {
    method handleCronScheduleMisfirePolicy (line 222) | private CronScheduleBuilder handleCronScheduleMisfirePolicy(SysJob sys...
    method isValidCron (line 246) | public boolean isValidCron(String cronExpression) {
Condensed preview — 490 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,345K chars).
[
  {
    "path": ".editorconfig",
    "chars": 102,
    "preview": "root = true\n\n[*.{groovy,java,kt,xml}]\nindent_style = tab\nindent_size = 4\ncontinuation_indent_size = 8\n"
  },
  {
    "path": ".gitee/ISSUE_TEMPLATE/config.yml",
    "chars": 184,
    "preview": "blank_issues_enabled: false # 不允许用户创建空白 Issue\ncontact_links:\n  - name: 遇到问题先去看文档!谢谢! # 外部网站名称\n    url: https://wiki.pig4"
  },
  {
    "path": ".gitee/ISSUE_TEMPLATE/issue.yml",
    "chars": 622,
    "preview": "name: 问题咨询\ndescription: \"请尽可能详细的描述问题,提供足够的上下文,一分钟的描述不需要期望别人花半小时帮你排查\"\nbody:\n  - type: dropdown\n    id: version\n    attrib"
  },
  {
    "path": ".github/renovate.json",
    "chars": 517,
    "preview": "{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"baseBranches\": [\n    \"jdk17-dev\"\n  ],\n  \"extends\""
  },
  {
    "path": ".github/workflows/github-release.yml",
    "chars": 975,
    "preview": "name: publish github release\n\non:\n  workflow_dispatch:\n    inputs:\n      releaseversion:\n        description: 'Release v"
  },
  {
    "path": ".github/workflows/image.yml",
    "chars": 1296,
    "preview": "# This workflow will build a Java project with Maven\n# For more information see: https://help.github.com/actions/languag"
  },
  {
    "path": ".github/workflows/maven.yml",
    "chars": 2436,
    "preview": "# This workflow will build a Java project with Maven\n# For more information see: https://help.github.com/actions/languag"
  },
  {
    "path": ".github/workflows/mirror.yml",
    "chars": 451,
    "preview": "name: 同步代码\n\non:\n  push:\n    branches: [ master,dev ]\n  pull_request:\n    branches: [ master,dev ]\n\njobs:\n  gitee:\n    ru"
  },
  {
    "path": ".gitignore",
    "chars": 626,
    "preview": "### gradle ###\n.gradle\n/build/\n!gradle/wrapper/gradle-wrapper.jar\n.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.settings/"
  },
  {
    "path": "LICENSE",
    "chars": 11370,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "README.md",
    "chars": 4611,
    "preview": "> **🚀 Spring Boot 4.0 版本来了**\n>\n> 分支 `boot4` 基于 Spring Boot 4.0 + Spring Cloud 2025.1 进行开发。\n\n<p align=\"center\">\n <img src"
  },
  {
    "path": "db/Dockerfile",
    "chars": 327,
    "preview": "FROM registry.cn-hangzhou.aliyuncs.com/dockerhub_mirror/mysql-server:8.0.32\n\nMAINTAINER lengleng(wangiegie@gmail.com)\n\nE"
  },
  {
    "path": "db/pig.sql",
    "chars": 74304,
    "preview": "DROP DATABASE IF EXISTS `pig`;\n\nCREATE DATABASE  `pig` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;\n\nSET NA"
  },
  {
    "path": "db/pig_config.sql",
    "chars": 21980,
    "preview": "DROP DATABASE IF EXISTS `pig_config`;\n\nCREATE DATABASE  `pig_config` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"
  },
  {
    "path": "docker-compose.yml",
    "chars": 2688,
    "preview": "services:\n  pig-mysql:\n    build:\n      context: ./db\n    environment:\n      MYSQL_ROOT_HOST: \"%\"\n      MYSQL_ROOT_PASSW"
  },
  {
    "path": "pig-auth/Dockerfile",
    "chars": 299,
    "preview": "FROM registry.cn-hangzhou.aliyuncs.com/dockerhub_mirror/java:21-anolis\n\nWORKDIR /pig-auth\n\nARG JAR_FILE=target/pig-auth."
  },
  {
    "path": "pig-auth/pom.xml",
    "chars": 3963,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n  ~ Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n  ~\n  ~ Licen"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/PigAuthApplication.java",
    "chars": 1202,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/config/AuthorizationServerConfiguration.java",
    "chars": 9617,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/endpoint/ImageCodeEndpoint.java",
    "chars": 1723,
    "preview": "package com.pig4cloud.pig.auth.endpoint;\n\nimport cn.hutool.core.lang.Validator;\nimport com.pig4cloud.captcha.ArithmeticC"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/endpoint/PigTokenEndpoint.java",
    "chars": 11461,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/CustomeOAuth2AccessTokenGenerator.java",
    "chars": 5847,
    "preview": "package com.pig4cloud.pig.auth.support;\n\nimport org.springframework.lang.Nullable;\nimport org.springframework.security.c"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/base/OAuth2ResourceOwnerBaseAuthenticationConverter.java",
    "chars": 3298,
    "preview": "package com.pig4cloud.pig.auth.support.base;\n\nimport com.pig4cloud.pig.common.security.util.OAuth2EndpointUtils;\nimport "
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/base/OAuth2ResourceOwnerBaseAuthenticationProvider.java",
    "chars": 12968,
    "preview": "package com.pig4cloud.pig.auth.support.base;\n\nimport cn.hutool.extra.spring.SpringUtil;\nimport com.pig4cloud.pig.common."
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/base/OAuth2ResourceOwnerBaseAuthenticationToken.java",
    "chars": 1847,
    "preview": "package com.pig4cloud.pig.auth.support.base;\n\nimport lombok.Getter;\nimport org.springframework.lang.Nullable;\nimport org"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/base/package-info.java",
    "chars": 71,
    "preview": "/**\n * 自定义认证模式接入的抽象实现\n */\npackage com.pig4cloud.pig.auth.support.base;\n"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/core/CustomeOAuth2TokenCustomizer.java",
    "chars": 1448,
    "preview": "package com.pig4cloud.pig.auth.support.core;\n\nimport com.pig4cloud.pig.common.core.constant.SecurityConstants;\nimport co"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/core/FormIdentityLoginConfigurer.java",
    "chars": 1100,
    "preview": "package com.pig4cloud.pig.auth.support.core;\n\nimport com.pig4cloud.pig.auth.support.handler.FormAuthenticationFailureHan"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/core/PigDaoAuthenticationProvider.java",
    "chars": 8102,
    "preview": "package com.pig4cloud.pig.auth.support.core;\n\nimport cn.hutool.core.util.StrUtil;\nimport cn.hutool.extra.spring.SpringUt"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/filter/AuthSecurityConfigProperties.java",
    "chars": 697,
    "preview": "package com.pig4cloud.pig.auth.support.filter;\n\nimport lombok.Data;\nimport org.springframework.boot.context.properties.C"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/filter/PasswordDecoderFilter.java",
    "chars": 3222,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/filter/ValidateCodeFilter.java",
    "chars": 3565,
    "preview": "package com.pig4cloud.pig.auth.support.filter;\n\nimport java.io.IOException;\nimport java.util.Optional;\n\nimport org.sprin"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/FormAuthenticationFailureHandler.java",
    "chars": 2009,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PigAuthenticationFailureEventHandler.java",
    "chars": 4141,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PigAuthenticationSuccessEventHandler.java",
    "chars": 5399,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/PigLogoutSuccessEventHandler.java",
    "chars": 2917,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/handler/SsoLogoutSuccessHandler.java",
    "chars": 1318,
    "preview": "package com.pig4cloud.pig.auth.support.handler;\n\nimport cn.hutool.core.util.StrUtil;\nimport jakarta.servlet.http.HttpSer"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/password/OAuth2ResourceOwnerPasswordAuthenticationConverter.java",
    "chars": 2601,
    "preview": "package com.pig4cloud.pig.auth.support.password;\n\nimport com.pig4cloud.pig.auth.support.base.OAuth2ResourceOwnerBaseAuth"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/password/OAuth2ResourceOwnerPasswordAuthenticationProvider.java",
    "chars": 3252,
    "preview": "package com.pig4cloud.pig.auth.support.password;\n\nimport com.pig4cloud.pig.auth.support.base.OAuth2ResourceOwnerBaseAuth"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/password/OAuth2ResourceOwnerPasswordAuthenticationToken.java",
    "chars": 1060,
    "preview": "package com.pig4cloud.pig.auth.support.password;\n\nimport com.pig4cloud.pig.auth.support.base.OAuth2ResourceOwnerBaseAuth"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/password/package-info.java",
    "chars": 65,
    "preview": "/**\n * 密码模式\n */\npackage com.pig4cloud.pig.auth.support.password;\n"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/sms/OAuth2ResourceOwnerSmsAuthenticationConverter.java",
    "chars": 1969,
    "preview": "package com.pig4cloud.pig.auth.support.sms;\n\nimport com.pig4cloud.pig.auth.support.base.OAuth2ResourceOwnerBaseAuthentic"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/sms/OAuth2ResourceOwnerSmsAuthenticationProvider.java",
    "chars": 2765,
    "preview": "package com.pig4cloud.pig.auth.support.sms;\n\nimport com.pig4cloud.pig.auth.support.base.OAuth2ResourceOwnerBaseAuthentic"
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/sms/OAuth2ResourceOwnerSmsAuthenticationToken.java",
    "chars": 838,
    "preview": "package com.pig4cloud.pig.auth.support.sms;\n\nimport java.io.Serial;\nimport java.util.Map;\nimport java.util.Set;\n\nimport "
  },
  {
    "path": "pig-auth/src/main/java/com/pig4cloud/pig/auth/support/sms/package-info.java",
    "chars": 60,
    "preview": "/**\n * 短信模式\n */\npackage com.pig4cloud.pig.auth.support.sms;\n"
  },
  {
    "path": "pig-auth/src/main/resources/application.yml",
    "chars": 450,
    "preview": "server:\n  port: 3000\n\nspring:\n  application:\n    name: @artifactId@\n  cloud:\n    nacos:\n      username: @nacos.username@"
  },
  {
    "path": "pig-auth/src/main/resources/logback-spring.xml",
    "chars": 3301,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n  ~ Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n  ~\n  ~ Licen"
  },
  {
    "path": "pig-auth/src/main/resources/templates/ftl/confirm.ftl",
    "chars": 2405,
    "preview": "<#assign content>\n\t<div class=\"mb-7\">\n\t\t<h3 class=\"font-semibold text-2xl text-gray-800 dark:text-gray-200 text-center t"
  },
  {
    "path": "pig-auth/src/main/resources/templates/ftl/layout/base.ftl",
    "chars": 4779,
    "preview": "<!doctype html>\n<html class=\"dark\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-wi"
  },
  {
    "path": "pig-auth/src/main/resources/templates/ftl/login.ftl",
    "chars": 2970,
    "preview": "<#assign content>\n    <div class=\"mb-8 text-center\">\n        <svg class=\"w-16 h-16 mx-auto mb-4 text-purple-600 dark:tex"
  },
  {
    "path": "pig-boot/Dockerfile",
    "chars": 300,
    "preview": "FROM registry.cn-hangzhou.aliyuncs.com/dockerhub_mirror/java:21-anolis\n\nWORKDIR /pig-boot\n\nARG JAR_FILE=target/pig-boot."
  },
  {
    "path": "pig-boot/pom.xml",
    "chars": 2935,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- ~ Copyright (c) 2020 pig4cloud Authors. All Rights Reserved. ~ ~ Licensed \n\t"
  },
  {
    "path": "pig-boot/src/main/java/com/pig4cloud/pig/PigBootApplication.java",
    "chars": 1231,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-boot/src/main/resources/application-dev.yml",
    "chars": 949,
    "preview": "spring:\n  cache:\n    type: redis # 缓存类型 Redis\n  data:\n    redis:\n      database: 5\n      host: 127.0.0.1\n  # 数据库相关配置\n  d"
  },
  {
    "path": "pig-boot/src/main/resources/application.yml",
    "chars": 1685,
    "preview": "server:\n  port: 9999    # 项目端口\n  servlet:\n    context-path: /admin  # 项目访问路径\n\nspring:\n  application:\n    name: @project."
  },
  {
    "path": "pig-boot/src/main/resources/logback-spring.xml",
    "chars": 2991,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n    小技巧: 在根pom里面设置统一存放路径,统一管理方便维护\n    <properties>\n        <log-path>/Users/"
  },
  {
    "path": "pig-common/pig-common-bom/pom.xml",
    "chars": 8942,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n\txmlns:xsi=\"http://www.w3.org/"
  },
  {
    "path": "pig-common/pig-common-core/pom.xml",
    "chars": 2502,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n  ~ Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n  ~\n  ~ Licen"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/config/JacksonConfiguration.java",
    "chars": 2357,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/config/RedisTemplateConfiguration.java",
    "chars": 3326,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/config/RestTemplateConfiguration.java",
    "chars": 1754,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/config/WebMvcConfiguration.java",
    "chars": 2335,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/constant/CacheConstants.java",
    "chars": 1313,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/constant/CommonConstants.java",
    "chars": 1470,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/constant/SecurityConstants.java",
    "chars": 2033,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/constant/ServiceNameConstants.java",
    "chars": 908,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/constant/enums/DictTypeEnum.java",
    "chars": 1066,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/constant/enums/LoginTypeEnum.java",
    "chars": 1050,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/constant/enums/MenuTypeEnum.java",
    "chars": 1100,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/exception/CheckedException.java",
    "chars": 1323,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/exception/ErrorCodes.java",
    "chars": 1814,
    "preview": "package com.pig4cloud.pig.common.core.exception;\n\n/**\n * 错误编码\n *\n * @author lengleng\n * @date 2022/3/30\n */\npublic inter"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/exception/PigDeniedException.java",
    "chars": 1315,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/exception/ValidateCodeException.java",
    "chars": 974,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/factory/YamlPropertySourceFactory.java",
    "chars": 1776,
    "preview": "package com.pig4cloud.pig.common.core.factory;\n\nimport org.springframework.beans.factory.config.YamlPropertiesFactoryBea"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/jackson/PigJavaTimeModule.java",
    "chars": 2594,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/servlet/RepeatBodyRequestWrapper.java",
    "chars": 3664,
    "preview": "/*\n * Copyright 2023-2024 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/ClassUtils.java",
    "chars": 3803,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/MsgUtils.java",
    "chars": 1148,
    "preview": "package com.pig4cloud.pig.common.core.util;\n\nimport lombok.experimental.UtilityClass;\nimport org.springframework.context"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/R.java",
    "chars": 2140,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/RedisUtils.java",
    "chars": 17963,
    "preview": "package com.pig4cloud.pig.common.core.util;\n\nimport cn.hutool.core.convert.Convert;\nimport lombok.experimental.UtilityCl"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/RetOps.java",
    "chars": 7327,
    "preview": "/*\n *\n *      Copyright (c) 2018-2025, lengleng All rights reserved.\n *\n *  Redistribution and use in source and binary "
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/SpringContextHolder.java",
    "chars": 3146,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/WebUtils.java",
    "chars": 4782,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports",
    "chars": 297,
    "preview": "com.pig4cloud.pig.common.core.config.JacksonConfiguration\ncom.pig4cloud.pig.common.core.config.RedisTemplateConfiguratio"
  },
  {
    "path": "pig-common/pig-common-core/src/main/resources/banner.txt",
    "chars": 526,
    "preview": "${AnsiColor.BRIGHT_YELLOW}\n\n                :::::::::       :::::::::::       ::::::::\n               :+:    :+:        "
  },
  {
    "path": "pig-common/pig-common-core/src/main/resources/i18n/messages_zh_CN.properties",
    "chars": 1552,
    "preview": "sys.user.update.passwordError=\\u539F\\u5BC6\\u7801\\u9519\\u8BEF\\uFF0C\\u4FEE\\u6539\\u5931\\u8D25\nsys.user.query.error=\\u83B7\\u"
  },
  {
    "path": "pig-common/pig-common-core/src/main/resources/logback-spring.xml",
    "chars": 3186,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n  ~ Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n  ~\n  ~ Licen"
  },
  {
    "path": "pig-common/pig-common-datasource/pom.xml",
    "chars": 1607,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n  ~ Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n  ~\n  ~ Licen"
  },
  {
    "path": "pig-common/pig-common-datasource/src/main/java/com/pig4cloud/pig/common/datasource/DynamicDataSourceAutoConfiguration.java",
    "chars": 4504,
    "preview": "/*\n *    Copyright (c) 2018-2025, lengleng All rights reserved.\n *\n * Redistribution and use in source and binary forms,"
  },
  {
    "path": "pig-common/pig-common-datasource/src/main/java/com/pig4cloud/pig/common/datasource/annotation/EnableDynamicDataSource.java",
    "chars": 499,
    "preview": "package com.pig4cloud.pig.common.datasource.annotation;\n\nimport com.pig4cloud.pig.common.datasource.DynamicDataSourceAut"
  },
  {
    "path": "pig-common/pig-common-datasource/src/main/java/com/pig4cloud/pig/common/datasource/config/ClearTtlDataSourceFilter.java",
    "chars": 954,
    "preview": "package com.pig4cloud.pig.common.datasource.config;\n\nimport com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceCon"
  },
  {
    "path": "pig-common/pig-common-datasource/src/main/java/com/pig4cloud/pig/common/datasource/config/DataSourceProperties.java",
    "chars": 1229,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-datasource/src/main/java/com/pig4cloud/pig/common/datasource/config/JdbcDynamicDataSourceProvider.java",
    "chars": 3649,
    "preview": "/*\n *    Copyright (c) 2018-2025, lengleng All rights reserved.\n *\n * Redistribution and use in source and binary forms,"
  },
  {
    "path": "pig-common/pig-common-datasource/src/main/java/com/pig4cloud/pig/common/datasource/config/LastParamDsProcessor.java",
    "chars": 1877,
    "preview": "/*\n *    Copyright (c) 2018-2025, lengleng All rights reserved.\n *\n * Redistribution and use in source and binary forms,"
  },
  {
    "path": "pig-common/pig-common-datasource/src/main/java/com/pig4cloud/pig/common/datasource/config/MasterDataSourceProvider.java",
    "chars": 2273,
    "preview": "/*\n *    Copyright (c) 2018-2025, lengleng All rights reserved.\n *\n * Redistribution and use in source and binary forms,"
  },
  {
    "path": "pig-common/pig-common-datasource/src/main/java/com/pig4cloud/pig/common/datasource/support/DataSourceConstants.java",
    "chars": 721,
    "preview": "package com.pig4cloud.pig.common.datasource.support;\n\n/**\n * 数据源相关常量\n *\n * @author lengleng\n * @date 2019-04-01\n */\npubl"
  },
  {
    "path": "pig-common/pig-common-datasource/src/main/java/com/pig4cloud/pig/common/datasource/util/DsConfTypeEnum.java",
    "chars": 376,
    "preview": "package com.pig4cloud.pig.common.datasource.util;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\n\n/**\n * 数据源配置"
  },
  {
    "path": "pig-common/pig-common-datasource/src/main/java/com/pig4cloud/pig/common/datasource/util/DsJdbcUrlEnum.java",
    "chars": 1505,
    "preview": "package com.pig4cloud.pig.common.datasource.util;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\n\nimport java."
  },
  {
    "path": "pig-common/pig-common-excel/pom.xml",
    "chars": 1742,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n  ~ /*\n  ~  *  Copyright (c) 2019-2020, 冷冷 (wangiegie@gmail.com).\n  ~  *  <p"
  },
  {
    "path": "pig-common/pig-common-excel/src/main/java/com/pig4cloud/pig/common/excel/ExcelAutoConfiguration.java",
    "chars": 2292,
    "preview": "package com.pig4cloud.pig.common.excel;\n\nimport com.pig4cloud.pig.common.core.constant.SecurityConstants;\nimport com.pig"
  },
  {
    "path": "pig-common/pig-common-excel/src/main/java/com/pig4cloud/pig/common/excel/provider/RemoteDictApiService.java",
    "chars": 602,
    "preview": "package com.pig4cloud.pig.common.excel.provider;\n\nimport com.pig4cloud.pig.common.core.util.R;\nimport org.springframewor"
  },
  {
    "path": "pig-common/pig-common-excel/src/main/java/com/pig4cloud/pig/common/excel/provider/RemoteDictDataProvider.java",
    "chars": 1264,
    "preview": "package com.pig4cloud.pig.common.excel.provider;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.hutool.core.map.M"
  },
  {
    "path": "pig-common/pig-common-excel/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports",
    "chars": 55,
    "preview": " com.pig4cloud.pig.common.excel.ExcelAutoConfiguration\n"
  },
  {
    "path": "pig-common/pig-common-feign/pom.xml",
    "chars": 2693,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n  ~ Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n  ~\n  ~ Licen"
  },
  {
    "path": "pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/PigFeignAutoConfiguration.java",
    "chars": 2648,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/annotation/EnablePigFeignClients.java",
    "chars": 1441,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/annotation/NoToken.java",
    "chars": 278,
    "preview": "package com.pig4cloud.pig.common.feign.annotation;\n\nimport java.lang.annotation.*;\n\n/**\n * 服务无token调用声明注解\n * <p>\n * 只有发起"
  },
  {
    "path": "pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/core/PigFeignInnerRequestInterceptor.java",
    "chars": 915,
    "preview": "package com.pig4cloud.pig.common.feign.core;\n\nimport com.pig4cloud.pig.common.core.constant.SecurityConstants;\nimport co"
  },
  {
    "path": "pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/core/PigFeignRequestCloseInterceptor.java",
    "chars": 466,
    "preview": "package com.pig4cloud.pig.common.feign.core;\n\nimport feign.RequestInterceptor;\nimport org.springframework.http.HttpHeade"
  },
  {
    "path": "pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/SentinelAutoConfiguration.java",
    "chars": 3026,
    "preview": "/*\n *    Copyright (c) 2018-2025, lengleng All rights reserved.\n *\n * Redistribution and use in source and binary forms,"
  },
  {
    "path": "pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelFeign.java",
    "chars": 4872,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/ext/PigSentinelInvocationHandler.java",
    "chars": 5835,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/handle/GlobalBizExceptionHandler.java",
    "chars": 4712,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/handle/PigUrlBlockHandler.java",
    "chars": 1883,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-feign/src/main/java/com/pig4cloud/pig/common/feign/sentinel/parser/PigHeaderRequestOriginParser.java",
    "chars": 1253,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-feign/src/main/java/org/springframework/cloud/openfeign/PigFeignClientsRegistrar.java",
    "chars": 10145,
    "preview": "/*\n *    Copyright (c) 2018-2025, lengleng All rights reserved.\n *\n * Redistribution and use in source and binary forms,"
  },
  {
    "path": "pig-common/pig-common-feign/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports",
    "chars": 196,
    "preview": "com.pig4cloud.pig.common.feign.PigFeignAutoConfiguration\ncom.pig4cloud.pig.common.feign.sentinel.SentinelAutoConfigurati"
  },
  {
    "path": "pig-common/pig-common-log/pom.xml",
    "chars": 2205,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n  ~ Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n  ~\n  ~ Licen"
  },
  {
    "path": "pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/LogAutoConfiguration.java",
    "chars": 2001,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/annotation/SysLog.java",
    "chars": 1034,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/aspect/SysLogAspect.java",
    "chars": 3092,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/config/PigLogProperties.java",
    "chars": 1379,
    "preview": "/*\n * Copyright (c) 2019-2029, Dreamlu 卢春梦 (596392912@qq.com & www.dreamlu.net).\n * <p>\n * Licensed under the GNU LESSER"
  },
  {
    "path": "pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/event/SysLogEvent.java",
    "chars": 1107,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/event/SysLogEventSource.java",
    "chars": 451,
    "preview": "package com.pig4cloud.pig.common.log.event;\n\nimport java.io.Serial;\n\nimport com.pig4cloud.pig.admin.api.entity.SysLog;\n\n"
  },
  {
    "path": "pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/event/SysLogListener.java",
    "chars": 3164,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/init/ApplicationLoggerInitializer.java",
    "chars": 2022,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/util/LogTypeEnum.java",
    "chars": 1043,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-log/src/main/java/com/pig4cloud/pig/common/log/util/SysLogUtils.java",
    "chars": 4281,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-log/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports",
    "chars": 50,
    "preview": "com.pig4cloud.pig.common.log.LogAutoConfiguration\n"
  },
  {
    "path": "pig-common/pig-common-log/src/main/resources/META-INF/spring-configuration-metadata.json",
    "chars": 878,
    "preview": "{\n  \"groups\": [\n    {\n      \"name\": \"security.log\",\n      \"type\": \"com.pig4cloud.pig.common.log.config.PigLogProperties\""
  },
  {
    "path": "pig-common/pig-common-log/src/main/resources/META-INF/spring.factories",
    "chars": 123,
    "preview": "org.springframework.boot.env.EnvironmentPostProcessor=\\\n    com.pig4cloud.pig.common.log.init.ApplicationLoggerInitializ"
  },
  {
    "path": "pig-common/pig-common-mybatis/pom.xml",
    "chars": 2726,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n  ~ Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n  ~\n  ~ Licen"
  },
  {
    "path": "pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/MybatisAutoConfiguration.java",
    "chars": 2260,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/base/BaseEntity.java",
    "chars": 1027,
    "preview": "package com.pig4cloud.pig.common.mybatis.base;\n\nimport java.io.Serial;\nimport java.io.Serializable;\nimport java.time.Loc"
  },
  {
    "path": "pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/config/MybatisPlusMetaObjectHandler.java",
    "chars": 2932,
    "preview": "package com.pig4cloud.pig.common.mybatis.config;\n\nimport cn.hutool.core.util.StrUtil;\nimport com.baomidou.mybatisplus.co"
  },
  {
    "path": "pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/handler/JsonLongArrayTypeHandler.java",
    "chars": 2263,
    "preview": "package com.pig4cloud.pig.common.mybatis.handler;\n\nimport cn.hutool.core.convert.Convert;\nimport cn.hutool.core.util.Arr"
  },
  {
    "path": "pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/handler/JsonStringArrayTypeHandler.java",
    "chars": 2257,
    "preview": "package com.pig4cloud.pig.common.mybatis.handler;\n\nimport cn.hutool.core.convert.Convert;\nimport cn.hutool.core.util.Arr"
  },
  {
    "path": "pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/plugins/PigPaginationInnerInterceptor.java",
    "chars": 1932,
    "preview": "package com.pig4cloud.pig.common.mybatis.plugins;\n\nimport org.apache.ibatis.executor.Executor;\nimport org.apache.ibatis."
  },
  {
    "path": "pig-common/pig-common-mybatis/src/main/java/com/pig4cloud/pig/common/mybatis/resolver/SqlFilterArgumentResolver.java",
    "chars": 3247,
    "preview": "/*\n *\n *  *  Copyright (c) 2019-2020, 冷冷 (wangiegie@gmail.com).\n *  *  <p>\n *  *  Licensed under the GNU Lesser General "
  },
  {
    "path": "pig-common/pig-common-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports",
    "chars": 58,
    "preview": "com.pig4cloud.pig.common.mybatis.MybatisAutoConfiguration\n"
  },
  {
    "path": "pig-common/pig-common-oss/pom.xml",
    "chars": 892,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xmlns=\"ht"
  },
  {
    "path": "pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/FileAutoConfiguration.java",
    "chars": 1438,
    "preview": "/*\n *    Copyright (c) 2018-2025, lengleng All rights reserved.\n *\n * Redistribution and use in source and binary forms,"
  },
  {
    "path": "pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/core/FileProperties.java",
    "chars": 1539,
    "preview": "/*\n *    Copyright (c) 2018-2025, lengleng All rights reserved.\n *\n * Redistribution and use in source and binary forms,"
  },
  {
    "path": "pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/core/FileTemplate.java",
    "chars": 1787,
    "preview": "package com.pig4cloud.pig.common.file.core;\n\nimport org.springframework.beans.factory.InitializingBean;\n\nimport java.io."
  },
  {
    "path": "pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/local/LocalFileAutoConfiguration.java",
    "chars": 1641,
    "preview": "/*\n *    Copyright (c) 2018-2025, lengleng All rights reserved.\n *\n * Redistribution and use in source and binary forms,"
  },
  {
    "path": "pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/local/LocalFileProperties.java",
    "chars": 1084,
    "preview": "/*\n *    Copyright (c) 2018-2025, lengleng All rights reserved.\n *\n * Redistribution and use in source and binary forms,"
  },
  {
    "path": "pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/local/LocalFileTemplate.java",
    "chars": 3738,
    "preview": "package com.pig4cloud.pig.common.file.local;\n\nimport cn.hutool.core.io.FileUtil;\nimport com.pig4cloud.pig.common.file.co"
  },
  {
    "path": "pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/oss/OssAutoConfiguration.java",
    "chars": 2358,
    "preview": "/*\n *    Copyright (c) 2018-2025, lengleng All rights reserved.\n *\n * Redistribution and use in source and binary forms,"
  },
  {
    "path": "pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/oss/OssProperties.java",
    "chars": 1895,
    "preview": "/*\n *    Copyright (c) 2018-2025, lengleng All rights reserved.\n *\n * Redistribution and use in source and binary forms,"
  },
  {
    "path": "pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/oss/http/OssEndpoint.java",
    "chars": 5834,
    "preview": "/*\n *    Copyright (c) 2018-2025, lengleng All rights reserved.\n *\n * Redistribution and use in source and binary forms,"
  },
  {
    "path": "pig-common/pig-common-oss/src/main/java/com/pig4cloud/pig/common/file/oss/service/OssTemplate.java",
    "chars": 9800,
    "preview": "/*\n *    Copyright (c) 2018-2025, lengleng All rights reserved.\n *\n * Redistribution and use in source and binary forms,"
  },
  {
    "path": "pig-common/pig-common-oss/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports",
    "chars": 52,
    "preview": "com.pig4cloud.pig.common.file.FileAutoConfiguration\n"
  },
  {
    "path": "pig-common/pig-common-seata/pom.xml",
    "chars": 1677,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n  ~ /*\n  ~  *  Copyright (c) 2019-2020, 冷冷 (wangiegie@gmail.com).\n  ~  *  <p"
  },
  {
    "path": "pig-common/pig-common-seata/src/main/java/com/pig4cloud/pig/common/seata/config/SeataAutoConfiguration.java",
    "chars": 490,
    "preview": "package com.pig4cloud.pig.common.seata.config;\n\nimport org.springframework.context.annotation.Configuration;\nimport org."
  },
  {
    "path": "pig-common/pig-common-seata/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports",
    "chars": 62,
    "preview": " com.pig4cloud.pig.common.seata.config.SeataAutoConfiguration\n"
  },
  {
    "path": "pig-common/pig-common-seata/src/main/resources/seata-config.yml",
    "chars": 1842,
    "preview": "seata:\n  enabled: true\n  tx-service-group: pig_tx_group # 事务群组(可以每个应用独立取名,也可以使用相同的名字)\n  client:\n    rm-report-success-en"
  },
  {
    "path": "pig-common/pig-common-security/pom.xml",
    "chars": 2598,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n  ~ Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n  ~\n  ~ Licen"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/annotation/EnablePigResourceServer.java",
    "chars": 1380,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/annotation/HasPermission.java",
    "chars": 587,
    "preview": "package com.pig4cloud.pig.common.security.annotation;\n\nimport org.springframework.security.access.prepost.PreAuthorize;\n"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/annotation/Inner.java",
    "chars": 1076,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PermissionService.java",
    "chars": 1737,
    "preview": "\n/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 ("
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PermitAllUrlProperties.java",
    "chars": 3060,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigBearerTokenExtractor.java",
    "chars": 4408,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigBootCorsProperties.java",
    "chars": 1040,
    "preview": "package com.pig4cloud.pig.common.security.component;\n\nimport lombok.Data;\nimport org.springframework.boot.context.proper"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigClientCredentialsOAuth2AuthenticatedPrincipal.java",
    "chars": 998,
    "preview": "package com.pig4cloud.pig.common.security.component;\n\nimport lombok.RequiredArgsConstructor;\nimport org.springframework."
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigCustomOAuth2AccessTokenResponseHttpMessageConverter.java",
    "chars": 2587,
    "preview": "package com.pig4cloud.pig.common.security.component;\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\nimport com.pig"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigCustomOpaqueTokenIntrospector.java",
    "chars": 3966,
    "preview": "package com.pig4cloud.pig.common.security.component;\n\nimport cn.hutool.extra.spring.SpringUtil;\nimport com.pig4cloud.pig"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigResourceServerAutoConfiguration.java",
    "chars": 2715,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigResourceServerConfiguration.java",
    "chars": 4453,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigSecurityInnerAspect.java",
    "chars": 2280,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PigSecurityMessageSourceConfiguration.java",
    "chars": 1751,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/ResourceAuthExceptionEntryPoint.java",
    "chars": 2927,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/feign/PigFeignClientConfiguration.java",
    "chars": 1211,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/feign/PigOAuthRequestInterceptor.java",
    "chars": 1784,
    "preview": "package com.pig4cloud.pig.common.security.feign;\n\nimport java.util.Collection;\n\nimport org.springframework.http.HttpHead"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigAppUserDetailsServiceImpl.java",
    "chars": 2533,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRedisOAuth2AuthorizationConsentService.java",
    "chars": 2465,
    "preview": "package com.pig4cloud.pig.common.security.service;\n\nimport com.pig4cloud.pig.common.core.util.RedisUtils;\nimport lombok."
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRedisOAuth2AuthorizationService.java",
    "chars": 6203,
    "preview": "package com.pig4cloud.pig.common.security.service;\n\nimport com.pig4cloud.pig.common.core.util.RedisUtils;\nimport lombok."
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigRemoteRegisteredClientRepository.java",
    "chars": 4425,
    "preview": "package com.pig4cloud.pig.common.security.service;\n\nimport cn.hutool.core.util.BooleanUtil;\nimport cn.hutool.core.util.S"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigUser.java",
    "chars": 2531,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigUserDetailsService.java",
    "chars": 2386,
    "preview": "package com.pig4cloud.pig.common.security.service;\n\nimport cn.hutool.core.util.StrUtil;\nimport com.pig4cloud.pig.admin.a"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/service/PigUserDetailsServiceImpl.java",
    "chars": 2227,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/OAuth2EndpointUtils.java",
    "chars": 3378,
    "preview": "package com.pig4cloud.pig.common.security.util;\n\nimport cn.hutool.core.map.MapUtil;\nimport jakarta.servlet.http.HttpServ"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/OAuth2ErrorCodesExpand.java",
    "chars": 789,
    "preview": "package com.pig4cloud.pig.common.security.util;\n\n/**\n * OAuth2 异常信息常量接口\n *\n * @author lengleng\n * @date 2025/05/31\n */\np"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/OAuthClientException.java",
    "chars": 756,
    "preview": "package com.pig4cloud.pig.common.security.util;\n\nimport org.springframework.security.oauth2.core.OAuth2AuthenticationExc"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/ScopeException.java",
    "chars": 757,
    "preview": "package com.pig4cloud.pig.common.security.util;\n\nimport java.io.Serial;\n\nimport org.springframework.security.oauth2.core"
  },
  {
    "path": "pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/util/SecurityUtils.java",
    "chars": 2489,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports",
    "chars": 593,
    "preview": "com.pig4cloud.pig.common.security.service.PigUserDetailsServiceImpl\ncom.pig4cloud.pig.common.security.service.PigAppUser"
  },
  {
    "path": "pig-common/pig-common-security/src/main/resources/i18n/errors/messages_zh_CN.properties",
    "chars": 5469,
    "preview": "AbstractAccessDecisionManager.accessDenied=\\u4E0D\\u5141\\u8BB8\\u8BBF\\u95EE\nAbstractLdapAuthenticationProvider.emptyPasswo"
  },
  {
    "path": "pig-common/pig-common-swagger/pom.xml",
    "chars": 2816,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n  ~\n  ~      Copyright (c) 2018-2025, lengleng All rights reserved.\n  ~\n  ~ "
  },
  {
    "path": "pig-common/pig-common-swagger/src/main/java/com/pig4cloud/pig/common/swagger/annotation/EnablePigDoc.java",
    "chars": 1665,
    "preview": "/*\n * Copyright (c) 2020 pig4cloud Authors. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (t"
  },
  {
    "path": "pig-common/pig-common-swagger/src/main/java/com/pig4cloud/pig/common/swagger/config/OpenAPIDefinition.java",
    "chars": 3809,
    "preview": "/*\n *    Copyright (c) 2018-2025, lengleng All rights reserved.\n *\n * Redistribution and use in source and binary forms,"
  },
  {
    "path": "pig-common/pig-common-swagger/src/main/java/com/pig4cloud/pig/common/swagger/config/OpenAPIDefinitionImportSelector.java",
    "chars": 1754,
    "preview": "package com.pig4cloud.pig.common.swagger.config;\n\nimport com.pig4cloud.pig.common.swagger.annotation.EnablePigDoc;\nimpor"
  },
  {
    "path": "pig-common/pig-common-swagger/src/main/java/com/pig4cloud/pig/common/swagger/config/OpenAPIMetadataConfiguration.java",
    "chars": 1363,
    "preview": "package com.pig4cloud.pig.common.swagger.config;\n\nimport lombok.Setter;\nimport org.springframework.beans.BeansException;"
  },
  {
    "path": "pig-common/pig-common-swagger/src/main/java/com/pig4cloud/pig/common/swagger/support/SwaggerProperties.java",
    "chars": 1807,
    "preview": "/*\n *    Copyright (c) 2018-2025, lengleng All rights reserved.\n *\n * Redistribution and use in source and binary forms,"
  },
  {
    "path": "pig-common/pig-common-swagger/src/main/resources/openapi-config.yaml",
    "chars": 194,
    "preview": "# swagger 配置\nswagger:\n  enabled: true\n  title: Pig Swagger API\n  gateway: http://${GATEWAY-HOST:127.0.0.1}:${GATEWAY-POR"
  },
  {
    "path": "pig-common/pig-common-websocket/pom.xml",
    "chars": 1213,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xmlns=\"ht"
  },
  {
    "path": "pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/config/LocalMessageDistributorConfiguration.java",
    "chars": 1027,
    "preview": "package com.pig4cloud.pig.common.websocket.config;\n\nimport com.pig4cloud.pig.common.websocket.distribute.LocalMessageDis"
  },
  {
    "path": "pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/config/MessageDistributorTypeConstants.java",
    "chars": 599,
    "preview": "package com.pig4cloud.pig.common.websocket.config;\n\n/**\n * 消息分发器类型常量\n * <p>\n * 定义了不同消息分发策略的常量标识符。\n * </p>\n *\n * @author "
  },
  {
    "path": "pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/config/RedisMessageDistributorConfiguration.java",
    "chars": 3581,
    "preview": "package com.pig4cloud.pig.common.websocket.config;\n\nimport com.pig4cloud.pig.common.websocket.distribute.MessageDistribu"
  },
  {
    "path": "pig-common/pig-common-websocket/src/main/java/com/pig4cloud/pig/common/websocket/config/WebSocketAutoConfiguration.java",
    "chars": 2125,
    "preview": "package com.pig4cloud.pig.common.websocket.config;\n\nimport com.pig4cloud.pig.common.websocket.handler.JsonMessageHandler"
  }
]

// ... and 290 more files (download for full content)

About this extraction

This page contains the full source code of the pig-mesh/pig GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 490 files (1.2 MB), approximately 349.9k tokens, and a symbol index with 1337 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!