Copy disabled (too large)
Download .txt
Showing preview only (17,361K chars total). Download the full file to get everything.
Repository: YunaiV/yudao-cloud
Branch: master
Commit: 3f599a623a7c
Files: 4560
Total size: 18.5 MB
Directory structure:
gitextract_j9akw6z5/
├── .gitee/
│ └── ISSUE_TEMPLATE.zh-CN.md
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ └── question.md
│ └── workflows/
│ └── maven.yml
├── .gitignore
├── LICENSE
├── README.md
├── lombok.config
├── pom.xml
├── script/
│ ├── docker/
│ │ └── docker-compose.yml
│ └── idea/
│ └── http-client.env.json
├── sql/
│ ├── db2/
│ │ └── README.md
│ ├── dm/
│ │ ├── flowable-patch/
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ ├── liquibase/
│ │ │ │ │ ├── database/
│ │ │ │ │ │ └── core/
│ │ │ │ │ │ └── DmDatabase.java
│ │ │ │ │ └── datatype/
│ │ │ │ │ └── core/
│ │ │ │ │ └── BooleanType.java
│ │ │ │ └── org/
│ │ │ │ └── flowable/
│ │ │ │ └── common/
│ │ │ │ └── engine/
│ │ │ │ └── impl/
│ │ │ │ └── AbstractEngineConfiguration.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ ├── package-info.md
│ │ │ └── services/
│ │ │ └── liquibase.database.Database
│ │ ├── quartz.sql
│ │ └── ruoyi-vue-pro-dm8.sql
│ ├── kingbase/
│ │ ├── quartz.sql
│ │ └── ruoyi-vue-pro.sql
│ ├── mysql/
│ │ ├── quartz.sql
│ │ └── ruoyi-vue-pro.sql
│ ├── opengauss/
│ │ ├── quartz.sql
│ │ └── ruoyi-vue-pro.sql
│ ├── oracle/
│ │ ├── quartz.sql
│ │ └── ruoyi-vue-pro.sql
│ ├── postgresql/
│ │ ├── quartz.sql
│ │ └── ruoyi-vue-pro.sql
│ ├── sqlserver/
│ │ ├── quartz.sql
│ │ └── ruoyi-vue-pro.sql
│ └── tools/
│ ├── .gitignore
│ ├── README.md
│ ├── convertor.py
│ ├── docker-compose.yaml
│ ├── oracle/
│ │ ├── 1_create_user.sql
│ │ └── 2_create_schema.sh
│ └── sqlserver/
│ └── create_schema.sh
├── yudao-dependencies/
│ └── pom.xml
├── yudao-framework/
│ ├── pom.xml
│ ├── yudao-common/
│ │ ├── pom.xml
│ │ ├── src/
│ │ │ ├── main/
│ │ │ │ └── java/
│ │ │ │ ├── cn/
│ │ │ │ │ └── iocoder/
│ │ │ │ │ └── yudao/
│ │ │ │ │ └── framework/
│ │ │ │ │ └── common/
│ │ │ │ │ ├── biz/
│ │ │ │ │ │ ├── infra/
│ │ │ │ │ │ │ ├── logger/
│ │ │ │ │ │ │ │ ├── ApiAccessLogCommonApi.java
│ │ │ │ │ │ │ │ ├── ApiErrorLogCommonApi.java
│ │ │ │ │ │ │ │ └── dto/
│ │ │ │ │ │ │ │ ├── ApiAccessLogCreateReqDTO.java
│ │ │ │ │ │ │ │ └── ApiErrorLogCreateReqDTO.java
│ │ │ │ │ │ │ └── package-info.java
│ │ │ │ │ │ ├── package-info.java
│ │ │ │ │ │ └── system/
│ │ │ │ │ │ ├── dict/
│ │ │ │ │ │ │ ├── DictDataCommonApi.java
│ │ │ │ │ │ │ └── dto/
│ │ │ │ │ │ │ └── DictDataRespDTO.java
│ │ │ │ │ │ ├── logger/
│ │ │ │ │ │ │ ├── OperateLogCommonApi.java
│ │ │ │ │ │ │ └── dto/
│ │ │ │ │ │ │ └── OperateLogCreateReqDTO.java
│ │ │ │ │ │ ├── oauth2/
│ │ │ │ │ │ │ ├── OAuth2TokenCommonApi.java
│ │ │ │ │ │ │ └── dto/
│ │ │ │ │ │ │ ├── OAuth2AccessTokenCheckRespDTO.java
│ │ │ │ │ │ │ ├── OAuth2AccessTokenCreateReqDTO.java
│ │ │ │ │ │ │ └── OAuth2AccessTokenRespDTO.java
│ │ │ │ │ │ ├── package-info.java
│ │ │ │ │ │ ├── permission/
│ │ │ │ │ │ │ ├── PermissionCommonApi.java
│ │ │ │ │ │ │ └── dto/
│ │ │ │ │ │ │ └── DeptDataPermissionRespDTO.java
│ │ │ │ │ │ └── tenant/
│ │ │ │ │ │ └── TenantCommonApi.java
│ │ │ │ │ ├── core/
│ │ │ │ │ │ ├── ArrayValuable.java
│ │ │ │ │ │ └── KeyValue.java
│ │ │ │ │ ├── enums/
│ │ │ │ │ │ ├── CommonStatusEnum.java
│ │ │ │ │ │ ├── DateIntervalEnum.java
│ │ │ │ │ │ ├── DocumentEnum.java
│ │ │ │ │ │ ├── RpcConstants.java
│ │ │ │ │ │ ├── TerminalEnum.java
│ │ │ │ │ │ ├── UserTypeEnum.java
│ │ │ │ │ │ └── WebFilterOrderEnum.java
│ │ │ │ │ ├── exception/
│ │ │ │ │ │ ├── ErrorCode.java
│ │ │ │ │ │ ├── ServerException.java
│ │ │ │ │ │ ├── ServiceException.java
│ │ │ │ │ │ ├── enums/
│ │ │ │ │ │ │ ├── GlobalErrorCodeConstants.java
│ │ │ │ │ │ │ └── ServiceErrorCodeRange.java
│ │ │ │ │ │ └── util/
│ │ │ │ │ │ └── ServiceExceptionUtil.java
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ ├── pojo/
│ │ │ │ │ │ ├── CommonResult.java
│ │ │ │ │ │ ├── PageParam.java
│ │ │ │ │ │ ├── PageResult.java
│ │ │ │ │ │ ├── SortablePageParam.java
│ │ │ │ │ │ └── SortingField.java
│ │ │ │ │ ├── util/
│ │ │ │ │ │ ├── cache/
│ │ │ │ │ │ │ └── CacheUtils.java
│ │ │ │ │ │ ├── collection/
│ │ │ │ │ │ │ ├── ArrayUtils.java
│ │ │ │ │ │ │ ├── CollectionUtils.java
│ │ │ │ │ │ │ ├── MapUtils.java
│ │ │ │ │ │ │ └── SetUtils.java
│ │ │ │ │ │ ├── date/
│ │ │ │ │ │ │ ├── DateUtils.java
│ │ │ │ │ │ │ └── LocalDateTimeUtils.java
│ │ │ │ │ │ ├── http/
│ │ │ │ │ │ │ └── HttpUtils.java
│ │ │ │ │ │ ├── io/
│ │ │ │ │ │ │ ├── FileUtils.java
│ │ │ │ │ │ │ └── IoUtils.java
│ │ │ │ │ │ ├── json/
│ │ │ │ │ │ │ ├── JsonUtils.java
│ │ │ │ │ │ │ └── databind/
│ │ │ │ │ │ │ ├── NumberSerializer.java
│ │ │ │ │ │ │ ├── TimestampLocalDateTimeDeserializer.java
│ │ │ │ │ │ │ └── TimestampLocalDateTimeSerializer.java
│ │ │ │ │ │ ├── monitor/
│ │ │ │ │ │ │ └── TracerUtils.java
│ │ │ │ │ │ ├── number/
│ │ │ │ │ │ │ ├── MoneyUtils.java
│ │ │ │ │ │ │ └── NumberUtils.java
│ │ │ │ │ │ ├── object/
│ │ │ │ │ │ │ ├── BeanUtils.java
│ │ │ │ │ │ │ ├── ObjectUtils.java
│ │ │ │ │ │ │ └── PageUtils.java
│ │ │ │ │ │ ├── package-info.java
│ │ │ │ │ │ ├── servlet/
│ │ │ │ │ │ │ └── ServletUtils.java
│ │ │ │ │ │ ├── spring/
│ │ │ │ │ │ │ ├── SpringExpressionUtils.java
│ │ │ │ │ │ │ └── SpringUtils.java
│ │ │ │ │ │ ├── string/
│ │ │ │ │ │ │ └── StrUtils.java
│ │ │ │ │ │ └── validation/
│ │ │ │ │ │ └── ValidationUtils.java
│ │ │ │ │ └── validation/
│ │ │ │ │ ├── InEnum.java
│ │ │ │ │ ├── InEnumCollectionValidator.java
│ │ │ │ │ ├── InEnumValidator.java
│ │ │ │ │ ├── Mobile.java
│ │ │ │ │ ├── MobileValidator.java
│ │ │ │ │ ├── Telephone.java
│ │ │ │ │ ├── TelephoneValidator.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── com/
│ │ │ │ └── fhs/
│ │ │ │ └── trans/
│ │ │ │ └── service/
│ │ │ │ └── AutoTransable.java
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── cn/
│ │ │ └── iocoder/
│ │ │ └── yudao/
│ │ │ └── framework/
│ │ │ └── common/
│ │ │ └── util/
│ │ │ └── collection/
│ │ │ └── CollectionUtilsTest.java
│ │ └── 《芋道 Spring Boot 参数校验 Validation 入门》.md
│ ├── yudao-spring-boot-starter-biz-data-permission/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── cn/
│ │ │ │ └── iocoder/
│ │ │ │ └── yudao/
│ │ │ │ └── framework/
│ │ │ │ └── datapermission/
│ │ │ │ ├── config/
│ │ │ │ │ ├── YudaoDataPermissionAutoConfiguration.java
│ │ │ │ │ ├── YudaoDataPermissionRpcAutoConfiguration.java
│ │ │ │ │ └── YudaoDeptDataPermissionAutoConfiguration.java
│ │ │ │ ├── core/
│ │ │ │ │ ├── annotation/
│ │ │ │ │ │ └── DataPermission.java
│ │ │ │ │ ├── aop/
│ │ │ │ │ │ ├── DataPermissionAnnotationAdvisor.java
│ │ │ │ │ │ ├── DataPermissionAnnotationInterceptor.java
│ │ │ │ │ │ └── DataPermissionContextHolder.java
│ │ │ │ │ ├── db/
│ │ │ │ │ │ └── DataPermissionRuleHandler.java
│ │ │ │ │ ├── rpc/
│ │ │ │ │ │ ├── DataPermissionRequestInterceptor.java
│ │ │ │ │ │ └── DataPermissionRpcWebFilter.java
│ │ │ │ │ ├── rule/
│ │ │ │ │ │ ├── DataPermissionRule.java
│ │ │ │ │ │ ├── DataPermissionRuleFactory.java
│ │ │ │ │ │ ├── DataPermissionRuleFactoryImpl.java
│ │ │ │ │ │ └── dept/
│ │ │ │ │ │ ├── DeptDataPermissionRule.java
│ │ │ │ │ │ ├── DeptDataPermissionRuleCustomizer.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ └── util/
│ │ │ │ │ └── DataPermissionUtils.java
│ │ │ │ └── package-info.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── test/
│ │ └── java/
│ │ └── cn/
│ │ └── iocoder/
│ │ └── yudao/
│ │ └── framework/
│ │ └── datapermission/
│ │ └── core/
│ │ ├── aop/
│ │ │ ├── DataPermissionAnnotationInterceptorTest.java
│ │ │ └── DataPermissionContextHolderTest.java
│ │ ├── db/
│ │ │ └── DataPermissionRuleHandlerTest.java
│ │ ├── rule/
│ │ │ ├── DataPermissionRuleFactoryImplTest.java
│ │ │ └── dept/
│ │ │ └── DeptDataPermissionRuleTest.java
│ │ └── util/
│ │ └── DataPermissionUtilsTest.java
│ ├── yudao-spring-boot-starter-biz-ip/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── cn/
│ │ │ │ └── iocoder/
│ │ │ │ └── yudao/
│ │ │ │ └── framework/
│ │ │ │ └── ip/
│ │ │ │ ├── core/
│ │ │ │ │ ├── Area.java
│ │ │ │ │ ├── enums/
│ │ │ │ │ │ └── AreaTypeEnum.java
│ │ │ │ │ └── utils/
│ │ │ │ │ ├── AreaUtils.java
│ │ │ │ │ └── IPUtils.java
│ │ │ │ └── package-info.java
│ │ │ └── resources/
│ │ │ ├── area.csv
│ │ │ └── ip2region.xdb
│ │ └── test/
│ │ └── java/
│ │ └── cn/
│ │ └── iocoder/
│ │ └── yudao/
│ │ └── framework/
│ │ └── ip/
│ │ └── core/
│ │ └── utils/
│ │ ├── AreaUtilsTest.java
│ │ └── IPUtilsTest.java
│ ├── yudao-spring-boot-starter-biz-tenant/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ ├── cn/
│ │ │ │ └── iocoder/
│ │ │ │ └── yudao/
│ │ │ │ └── framework/
│ │ │ │ └── tenant/
│ │ │ │ ├── config/
│ │ │ │ │ ├── TenantProperties.java
│ │ │ │ │ ├── YudaoTenantAutoConfiguration.java
│ │ │ │ │ └── YudaoTenantRpcAutoConfiguration.java
│ │ │ │ ├── core/
│ │ │ │ │ ├── aop/
│ │ │ │ │ │ ├── TenantIgnore.java
│ │ │ │ │ │ └── TenantIgnoreAspect.java
│ │ │ │ │ ├── context/
│ │ │ │ │ │ └── TenantContextHolder.java
│ │ │ │ │ ├── db/
│ │ │ │ │ │ ├── TenantBaseDO.java
│ │ │ │ │ │ └── TenantDatabaseInterceptor.java
│ │ │ │ │ ├── job/
│ │ │ │ │ │ ├── TenantJob.java
│ │ │ │ │ │ └── TenantJobAspect.java
│ │ │ │ │ ├── mq/
│ │ │ │ │ │ ├── kafka/
│ │ │ │ │ │ │ ├── TenantKafkaEnvironmentPostProcessor.java
│ │ │ │ │ │ │ └── TenantKafkaProducerInterceptor.java
│ │ │ │ │ │ ├── rabbitmq/
│ │ │ │ │ │ │ ├── TenantRabbitMQInitializer.java
│ │ │ │ │ │ │ └── TenantRabbitMQMessagePostProcessor.java
│ │ │ │ │ │ ├── redis/
│ │ │ │ │ │ │ └── TenantRedisMessageInterceptor.java
│ │ │ │ │ │ └── rocketmq/
│ │ │ │ │ │ ├── TenantRocketMQConsumeMessageHook.java
│ │ │ │ │ │ ├── TenantRocketMQInitializer.java
│ │ │ │ │ │ └── TenantRocketMQSendMessageHook.java
│ │ │ │ │ ├── redis/
│ │ │ │ │ │ └── TenantRedisCacheManager.java
│ │ │ │ │ ├── rpc/
│ │ │ │ │ │ └── TenantRequestInterceptor.java
│ │ │ │ │ ├── security/
│ │ │ │ │ │ └── TenantSecurityWebFilter.java
│ │ │ │ │ ├── service/
│ │ │ │ │ │ ├── TenantFrameworkService.java
│ │ │ │ │ │ └── TenantFrameworkServiceImpl.java
│ │ │ │ │ ├── util/
│ │ │ │ │ │ └── TenantUtils.java
│ │ │ │ │ └── web/
│ │ │ │ │ ├── TenantContextWebFilter.java
│ │ │ │ │ └── TenantVisitContextInterceptor.java
│ │ │ │ └── package-info.java
│ │ │ └── org/
│ │ │ └── springframework/
│ │ │ └── messaging/
│ │ │ └── handler/
│ │ │ └── invocation/
│ │ │ └── InvocableHandlerMethod.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── spring.factories
│ ├── yudao-spring-boot-starter-env/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── cn/
│ │ │ └── iocoder/
│ │ │ └── yudao/
│ │ │ └── framework/
│ │ │ └── env/
│ │ │ ├── config/
│ │ │ │ ├── EnvEnvironmentPostProcessor.java
│ │ │ │ ├── EnvProperties.java
│ │ │ │ ├── YudaoEnvRpcAutoConfiguration.java
│ │ │ │ └── YudaoEnvWebAutoConfiguration.java
│ │ │ ├── core/
│ │ │ │ ├── context/
│ │ │ │ │ └── EnvContextHolder.java
│ │ │ │ ├── fegin/
│ │ │ │ │ ├── EnvLoadBalancerClient.java
│ │ │ │ │ ├── EnvLoadBalancerClientFactory.java
│ │ │ │ │ └── EnvRequestInterceptor.java
│ │ │ │ ├── package-info.java
│ │ │ │ ├── util/
│ │ │ │ │ └── EnvUtils.java
│ │ │ │ └── web/
│ │ │ │ └── EnvWebFilter.java
│ │ │ └── package-info.java
│ │ └── resources/
│ │ └── META-INF/
│ │ ├── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── spring.factories
│ ├── yudao-spring-boot-starter-excel/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── cn/
│ │ │ │ └── iocoder/
│ │ │ │ └── yudao/
│ │ │ │ └── framework/
│ │ │ │ ├── dict/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── YudaoDictAutoConfiguration.java
│ │ │ │ │ │ └── YudaoDictRpcAutoConfiguration.java
│ │ │ │ │ ├── core/
│ │ │ │ │ │ └── DictFrameworkUtils.java
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ └── validation/
│ │ │ │ │ ├── InDict.java
│ │ │ │ │ ├── InDictCollectionValidator.java
│ │ │ │ │ └── InDictValidator.java
│ │ │ │ └── excel/
│ │ │ │ ├── core/
│ │ │ │ │ ├── annotations/
│ │ │ │ │ │ ├── DictFormat.java
│ │ │ │ │ │ └── ExcelColumnSelect.java
│ │ │ │ │ ├── convert/
│ │ │ │ │ │ ├── AreaConvert.java
│ │ │ │ │ │ ├── DictConvert.java
│ │ │ │ │ │ ├── JsonConvert.java
│ │ │ │ │ │ └── MoneyConvert.java
│ │ │ │ │ ├── function/
│ │ │ │ │ │ └── ExcelColumnSelectFunction.java
│ │ │ │ │ ├── handler/
│ │ │ │ │ │ ├── ColumnWidthMatchStyleStrategy.java
│ │ │ │ │ │ └── SelectSheetWriteHandler.java
│ │ │ │ │ └── util/
│ │ │ │ │ └── ExcelUtils.java
│ │ │ │ └── package-info.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── test/
│ │ └── java/
│ │ └── cn/
│ │ └── iocoder/
│ │ └── yudao/
│ │ └── framework/
│ │ └── dict/
│ │ └── core/
│ │ └── util/
│ │ └── DictFrameworkUtilsTest.java
│ ├── yudao-spring-boot-starter-job/
│ │ ├── pom.xml
│ │ ├── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── cn/
│ │ │ │ └── iocoder/
│ │ │ │ └── yudao/
│ │ │ │ └── framework/
│ │ │ │ └── quartz/
│ │ │ │ ├── config/
│ │ │ │ │ ├── XxlJobProperties.java
│ │ │ │ │ ├── YudaoAsyncAutoConfiguration.java
│ │ │ │ │ └── YudaoXxlJobAutoConfiguration.java
│ │ │ │ └── package-info.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ ├── 《芋道 Spring Boot 定时任务入门》.md
│ │ └── 《芋道 Spring Boot 异步任务入门》.md
│ ├── yudao-spring-boot-starter-monitor/
│ │ ├── pom.xml
│ │ ├── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── cn/
│ │ │ │ └── iocoder/
│ │ │ │ └── yudao/
│ │ │ │ └── framework/
│ │ │ │ └── tracer/
│ │ │ │ ├── config/
│ │ │ │ │ ├── TracerProperties.java
│ │ │ │ │ ├── YudaoMetricsAutoConfiguration.java
│ │ │ │ │ └── YudaoTracerAutoConfiguration.java
│ │ │ │ ├── core/
│ │ │ │ │ ├── annotation/
│ │ │ │ │ │ └── BizTrace.java
│ │ │ │ │ ├── aop/
│ │ │ │ │ │ └── BizTraceAspect.java
│ │ │ │ │ ├── filter/
│ │ │ │ │ │ └── TraceFilter.java
│ │ │ │ │ └── util/
│ │ │ │ │ └── TracerFrameworkUtils.java
│ │ │ │ └── package-info.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ ├── 《芋道 Spring Boot 监控工具 Admin 入门》.md
│ │ ├── 《芋道 Spring Boot 监控端点 Actuator 入门》.md
│ │ └── 《芋道 Spring Boot 链路追踪 SkyWalking 入门》.md
│ ├── yudao-spring-boot-starter-mq/
│ │ ├── pom.xml
│ │ ├── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── cn/
│ │ │ │ └── iocoder/
│ │ │ │ └── yudao/
│ │ │ │ └── framework/
│ │ │ │ └── mq/
│ │ │ │ ├── package-info.java
│ │ │ │ ├── rabbitmq/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── YudaoRabbitMQAutoConfiguration.java
│ │ │ │ │ ├── core/
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── redis/
│ │ │ │ ├── config/
│ │ │ │ │ ├── YudaoRedisMQConsumerAutoConfiguration.java
│ │ │ │ │ └── YudaoRedisMQProducerAutoConfiguration.java
│ │ │ │ ├── core/
│ │ │ │ │ ├── RedisMQTemplate.java
│ │ │ │ │ ├── interceptor/
│ │ │ │ │ │ └── RedisMessageInterceptor.java
│ │ │ │ │ ├── job/
│ │ │ │ │ │ ├── RedisPendingMessageResendJob.java
│ │ │ │ │ │ └── RedisStreamMessageCleanupJob.java
│ │ │ │ │ ├── message/
│ │ │ │ │ │ └── AbstractRedisMessage.java
│ │ │ │ │ ├── pubsub/
│ │ │ │ │ │ ├── AbstractRedisChannelMessage.java
│ │ │ │ │ │ └── AbstractRedisChannelMessageListener.java
│ │ │ │ │ └── stream/
│ │ │ │ │ ├── AbstractRedisStreamMessage.java
│ │ │ │ │ └── AbstractRedisStreamMessageListener.java
│ │ │ │ └── package-info.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ ├── 《芋道 Spring Boot 事件机制 Event 入门》.md
│ │ ├── 《芋道 Spring Boot 消息队列 Kafka 入门》.md
│ │ ├── 《芋道 Spring Boot 消息队列 RabbitMQ 入门》.md
│ │ └── 《芋道 Spring Boot 消息队列 RocketMQ 入门》.md
│ ├── yudao-spring-boot-starter-mybatis/
│ │ ├── pom.xml
│ │ ├── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── cn/
│ │ │ │ └── iocoder/
│ │ │ │ └── yudao/
│ │ │ │ └── framework/
│ │ │ │ ├── datasource/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── YudaoDataSourceAutoConfiguration.java
│ │ │ │ │ ├── core/
│ │ │ │ │ │ ├── enums/
│ │ │ │ │ │ │ └── DataSourceEnum.java
│ │ │ │ │ │ └── filter/
│ │ │ │ │ │ └── DruidAdRemoveFilter.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── mybatis/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── IdTypeEnvironmentPostProcessor.java
│ │ │ │ │ │ └── YudaoMybatisAutoConfiguration.java
│ │ │ │ │ ├── core/
│ │ │ │ │ │ ├── dataobject/
│ │ │ │ │ │ │ └── BaseDO.java
│ │ │ │ │ │ ├── enums/
│ │ │ │ │ │ │ └── DbTypeEnum.java
│ │ │ │ │ │ ├── handler/
│ │ │ │ │ │ │ └── DefaultDBFieldHandler.java
│ │ │ │ │ │ ├── mapper/
│ │ │ │ │ │ │ └── BaseMapperX.java
│ │ │ │ │ │ ├── query/
│ │ │ │ │ │ │ ├── LambdaQueryWrapperX.java
│ │ │ │ │ │ │ ├── MPJLambdaWrapperX.java
│ │ │ │ │ │ │ └── QueryWrapperX.java
│ │ │ │ │ │ ├── type/
│ │ │ │ │ │ │ ├── EncryptTypeHandler.java
│ │ │ │ │ │ │ ├── IntegerListTypeHandler.java
│ │ │ │ │ │ │ ├── LongListTypeHandler.java
│ │ │ │ │ │ │ ├── LongSetTypeHandler.java
│ │ │ │ │ │ │ └── StringListTypeHandler.java
│ │ │ │ │ │ └── util/
│ │ │ │ │ │ ├── JdbcUtils.java
│ │ │ │ │ │ └── MyBatisUtils.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── translate/
│ │ │ │ ├── config/
│ │ │ │ │ └── YudaoTranslateAutoConfiguration.java
│ │ │ │ ├── core/
│ │ │ │ │ └── TranslateUtils.java
│ │ │ │ └── package-info.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ ├── spring/
│ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ │ └── spring.factories
│ │ ├── 《芋道 Spring Boot MyBatis 入门》.md
│ │ ├── 《芋道 Spring Boot 多数据源(读写分离)入门》.md
│ │ └── 《芋道 Spring Boot 数据库连接池入门》.md
│ ├── yudao-spring-boot-starter-protection/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── cn/
│ │ │ │ └── iocoder/
│ │ │ │ └── yudao/
│ │ │ │ └── framework/
│ │ │ │ ├── idempotent/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── YudaoIdempotentConfiguration.java
│ │ │ │ │ ├── core/
│ │ │ │ │ │ ├── annotation/
│ │ │ │ │ │ │ └── Idempotent.java
│ │ │ │ │ │ ├── aop/
│ │ │ │ │ │ │ └── IdempotentAspect.java
│ │ │ │ │ │ ├── keyresolver/
│ │ │ │ │ │ │ ├── IdempotentKeyResolver.java
│ │ │ │ │ │ │ └── impl/
│ │ │ │ │ │ │ ├── DefaultIdempotentKeyResolver.java
│ │ │ │ │ │ │ ├── ExpressionIdempotentKeyResolver.java
│ │ │ │ │ │ │ └── UserIdempotentKeyResolver.java
│ │ │ │ │ │ └── redis/
│ │ │ │ │ │ └── IdempotentRedisDAO.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── lock4j/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── YudaoLock4jConfiguration.java
│ │ │ │ │ ├── core/
│ │ │ │ │ │ ├── DefaultLockFailureStrategy.java
│ │ │ │ │ │ └── Lock4jRedisKeyConstants.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── ratelimiter/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── YudaoRateLimiterConfiguration.java
│ │ │ │ │ ├── core/
│ │ │ │ │ │ ├── annotation/
│ │ │ │ │ │ │ └── RateLimiter.java
│ │ │ │ │ │ ├── aop/
│ │ │ │ │ │ │ └── RateLimiterAspect.java
│ │ │ │ │ │ ├── keyresolver/
│ │ │ │ │ │ │ ├── RateLimiterKeyResolver.java
│ │ │ │ │ │ │ └── impl/
│ │ │ │ │ │ │ ├── ClientIpRateLimiterKeyResolver.java
│ │ │ │ │ │ │ ├── DefaultRateLimiterKeyResolver.java
│ │ │ │ │ │ │ ├── ExpressionRateLimiterKeyResolver.java
│ │ │ │ │ │ │ ├── ServerNodeRateLimiterKeyResolver.java
│ │ │ │ │ │ │ └── UserRateLimiterKeyResolver.java
│ │ │ │ │ │ └── redis/
│ │ │ │ │ │ └── RateLimiterRedisDAO.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── signature/
│ │ │ │ ├── config/
│ │ │ │ │ └── YudaoApiSignatureAutoConfiguration.java
│ │ │ │ ├── core/
│ │ │ │ │ ├── annotation/
│ │ │ │ │ │ └── ApiSignature.java
│ │ │ │ │ ├── aop/
│ │ │ │ │ │ └── ApiSignatureAspect.java
│ │ │ │ │ └── redis/
│ │ │ │ │ └── ApiSignatureRedisDAO.java
│ │ │ │ └── package-info.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── test/
│ │ └── java/
│ │ └── cn/
│ │ └── iocoder/
│ │ └── yudao/
│ │ └── framework/
│ │ └── signature/
│ │ └── core/
│ │ └── ApiSignatureTest.java
│ ├── yudao-spring-boot-starter-redis/
│ │ ├── pom.xml
│ │ ├── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── cn/
│ │ │ │ └── iocoder/
│ │ │ │ └── yudao/
│ │ │ │ └── framework/
│ │ │ │ └── redis/
│ │ │ │ ├── config/
│ │ │ │ │ ├── YudaoCacheAutoConfiguration.java
│ │ │ │ │ ├── YudaoCacheProperties.java
│ │ │ │ │ └── YudaoRedisAutoConfiguration.java
│ │ │ │ ├── core/
│ │ │ │ │ └── TimeoutRedisCacheManager.java
│ │ │ │ └── package-info.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ ├── 《芋道 Spring Boot Cache 入门》.md
│ │ └── 《芋道 Spring Boot Redis 入门》.md
│ ├── yudao-spring-boot-starter-rpc/
│ │ ├── pom.xml
│ │ ├── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── cn/
│ │ │ └── iocoder/
│ │ │ └── yudao/
│ │ │ └── framework/
│ │ │ └── rpc/
│ │ │ ├── config/
│ │ │ │ └── package-info.java
│ │ │ ├── core/
│ │ │ │ └── package-info.java
│ │ │ └── package-info.java
│ │ ├── 《芋道 Spring Boot 声明式调用 Feign 入门》.md
│ │ └── 《芋道 Spring Cloud 声明式调用 Feign 入门》.md
│ ├── yudao-spring-boot-starter-security/
│ │ ├── pom.xml
│ │ ├── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── cn/
│ │ │ │ └── iocoder/
│ │ │ │ └── yudao/
│ │ │ │ └── framework/
│ │ │ │ ├── operatelog/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── YudaoOperateLogConfiguration.java
│ │ │ │ │ │ └── YudaoOperateLogRpcAutoConfiguration.java
│ │ │ │ │ ├── core/
│ │ │ │ │ │ ├── package-info.java
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ └── LogRecordServiceImpl.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── security/
│ │ │ │ ├── config/
│ │ │ │ │ ├── AuthorizeRequestsCustomizer.java
│ │ │ │ │ ├── SecurityProperties.java
│ │ │ │ │ ├── YudaoSecurityAutoConfiguration.java
│ │ │ │ │ ├── YudaoSecurityRpcAutoConfiguration.java
│ │ │ │ │ └── YudaoWebSecurityConfigurerAdapter.java
│ │ │ │ ├── core/
│ │ │ │ │ ├── LoginUser.java
│ │ │ │ │ ├── context/
│ │ │ │ │ │ └── TransmittableThreadLocalSecurityContextHolderStrategy.java
│ │ │ │ │ ├── filter/
│ │ │ │ │ │ └── TokenAuthenticationFilter.java
│ │ │ │ │ ├── handler/
│ │ │ │ │ │ ├── AccessDeniedHandlerImpl.java
│ │ │ │ │ │ └── AuthenticationEntryPointImpl.java
│ │ │ │ │ ├── rpc/
│ │ │ │ │ │ └── LoginUserRequestInterceptor.java
│ │ │ │ │ ├── service/
│ │ │ │ │ │ ├── SecurityFrameworkService.java
│ │ │ │ │ │ └── SecurityFrameworkServiceImpl.java
│ │ │ │ │ └── util/
│ │ │ │ │ └── SecurityFrameworkUtils.java
│ │ │ │ └── package-info.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── 《芋道 Spring Boot 安全框架 Spring Security 入门》.md
│ ├── yudao-spring-boot-starter-test/
│ │ ├── pom.xml
│ │ ├── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── cn/
│ │ │ └── iocoder/
│ │ │ └── yudao/
│ │ │ └── framework/
│ │ │ └── test/
│ │ │ ├── config/
│ │ │ │ ├── RedisTestConfiguration.java
│ │ │ │ └── SqlInitializationTestConfiguration.java
│ │ │ ├── core/
│ │ │ │ ├── ut/
│ │ │ │ │ ├── BaseDbAndRedisUnitTest.java
│ │ │ │ │ ├── BaseDbUnitTest.java
│ │ │ │ │ ├── BaseMockitoUnitTest.java
│ │ │ │ │ ├── BaseRedisUnitTest.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── util/
│ │ │ │ ├── AssertUtils.java
│ │ │ │ └── RandomUtils.java
│ │ │ └── package-info.java
│ │ └── 《芋道 Spring Boot 单元测试 Test 入门》.md
│ ├── yudao-spring-boot-starter-web/
│ │ ├── pom.xml
│ │ ├── src/
│ │ │ ├── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── cn/
│ │ │ │ │ └── iocoder/
│ │ │ │ │ └── yudao/
│ │ │ │ │ └── framework/
│ │ │ │ │ ├── apilog/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── YudaoApiLogAutoConfiguration.java
│ │ │ │ │ │ │ └── YudaoApiLogRpcAutoConfiguration.java
│ │ │ │ │ │ ├── core/
│ │ │ │ │ │ │ ├── annotation/
│ │ │ │ │ │ │ │ └── ApiAccessLog.java
│ │ │ │ │ │ │ ├── enums/
│ │ │ │ │ │ │ │ └── OperateTypeEnum.java
│ │ │ │ │ │ │ ├── filter/
│ │ │ │ │ │ │ │ └── ApiAccessLogFilter.java
│ │ │ │ │ │ │ └── interceptor/
│ │ │ │ │ │ │ └── ApiAccessLogInterceptor.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ ├── banner/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── YudaoBannerAutoConfiguration.java
│ │ │ │ │ │ ├── core/
│ │ │ │ │ │ │ └── BannerApplicationRunner.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ ├── desensitize/
│ │ │ │ │ │ ├── core/
│ │ │ │ │ │ │ ├── base/
│ │ │ │ │ │ │ │ ├── annotation/
│ │ │ │ │ │ │ │ │ └── DesensitizeBy.java
│ │ │ │ │ │ │ │ ├── handler/
│ │ │ │ │ │ │ │ │ └── DesensitizationHandler.java
│ │ │ │ │ │ │ │ └── serializer/
│ │ │ │ │ │ │ │ └── StringDesensitizeSerializer.java
│ │ │ │ │ │ │ ├── regex/
│ │ │ │ │ │ │ │ ├── annotation/
│ │ │ │ │ │ │ │ │ ├── EmailDesensitize.java
│ │ │ │ │ │ │ │ │ └── RegexDesensitize.java
│ │ │ │ │ │ │ │ └── handler/
│ │ │ │ │ │ │ │ ├── AbstractRegexDesensitizationHandler.java
│ │ │ │ │ │ │ │ ├── DefaultRegexDesensitizationHandler.java
│ │ │ │ │ │ │ │ └── EmailDesensitizationHandler.java
│ │ │ │ │ │ │ └── slider/
│ │ │ │ │ │ │ ├── annotation/
│ │ │ │ │ │ │ │ ├── BankCardDesensitize.java
│ │ │ │ │ │ │ │ ├── CarLicenseDesensitize.java
│ │ │ │ │ │ │ │ ├── ChineseNameDesensitize.java
│ │ │ │ │ │ │ │ ├── FixedPhoneDesensitize.java
│ │ │ │ │ │ │ │ ├── IdCardDesensitize.java
│ │ │ │ │ │ │ │ ├── MobileDesensitize.java
│ │ │ │ │ │ │ │ ├── PasswordDesensitize.java
│ │ │ │ │ │ │ │ └── SliderDesensitize.java
│ │ │ │ │ │ │ └── handler/
│ │ │ │ │ │ │ ├── AbstractSliderDesensitizationHandler.java
│ │ │ │ │ │ │ ├── BankCardDesensitization.java
│ │ │ │ │ │ │ ├── CarLicenseDesensitization.java
│ │ │ │ │ │ │ ├── ChineseNameDesensitization.java
│ │ │ │ │ │ │ ├── DefaultDesensitizationHandler.java
│ │ │ │ │ │ │ ├── FixedPhoneDesensitization.java
│ │ │ │ │ │ │ ├── IdCardDesensitization.java
│ │ │ │ │ │ │ ├── MobileDesensitization.java
│ │ │ │ │ │ │ └── PasswordDesensitization.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ ├── encrypt/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── ApiEncryptProperties.java
│ │ │ │ │ │ │ └── YudaoApiEncryptAutoConfiguration.java
│ │ │ │ │ │ ├── core/
│ │ │ │ │ │ │ ├── annotation/
│ │ │ │ │ │ │ │ └── ApiEncrypt.java
│ │ │ │ │ │ │ └── filter/
│ │ │ │ │ │ │ ├── ApiDecryptRequestWrapper.java
│ │ │ │ │ │ │ ├── ApiEncryptFilter.java
│ │ │ │ │ │ │ └── ApiEncryptResponseWrapper.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ ├── jackson/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── YudaoJacksonAutoConfiguration.java
│ │ │ │ │ │ └── core/
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ ├── swagger/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── Knife4jOpenApiCustomizer.java
│ │ │ │ │ │ │ ├── SwaggerProperties.java
│ │ │ │ │ │ │ └── YudaoSwaggerAutoConfiguration.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ ├── web/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── WebProperties.java
│ │ │ │ │ │ │ └── YudaoWebAutoConfiguration.java
│ │ │ │ │ │ ├── core/
│ │ │ │ │ │ │ ├── filter/
│ │ │ │ │ │ │ │ ├── ApiRequestFilter.java
│ │ │ │ │ │ │ │ ├── CacheRequestBodyFilter.java
│ │ │ │ │ │ │ │ ├── CacheRequestBodyWrapper.java
│ │ │ │ │ │ │ │ └── DemoFilter.java
│ │ │ │ │ │ │ ├── handler/
│ │ │ │ │ │ │ │ ├── GlobalExceptionHandler.java
│ │ │ │ │ │ │ │ └── GlobalResponseBodyHandler.java
│ │ │ │ │ │ │ └── util/
│ │ │ │ │ │ │ └── WebFrameworkUtils.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ └── xss/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── XssProperties.java
│ │ │ │ │ │ └── YudaoXssAutoConfiguration.java
│ │ │ │ │ ├── core/
│ │ │ │ │ │ ├── clean/
│ │ │ │ │ │ │ ├── JsoupXssCleaner.java
│ │ │ │ │ │ │ └── XssCleaner.java
│ │ │ │ │ │ ├── filter/
│ │ │ │ │ │ │ ├── XssFilter.java
│ │ │ │ │ │ │ └── XssRequestWrapper.java
│ │ │ │ │ │ └── json/
│ │ │ │ │ │ └── XssStringJsonDeserializer.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── resources/
│ │ │ │ ├── META-INF/
│ │ │ │ │ └── spring/
│ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ │ │ └── banner.txt
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── cn/
│ │ │ └── iocoder/
│ │ │ └── yudao/
│ │ │ └── framework/
│ │ │ ├── desensitize/
│ │ │ │ └── core/
│ │ │ │ ├── DesensitizeTest.java
│ │ │ │ ├── annotation/
│ │ │ │ │ └── Address.java
│ │ │ │ └── handler/
│ │ │ │ └── AddressHandler.java
│ │ │ └── encrypt/
│ │ │ └── ApiEncryptTest.java
│ │ ├── 《芋道 Spring Boot API 接口文档 Swagger 入门》.md
│ │ └── 《芋道 Spring Boot SpringMVC 入门》.md
│ └── yudao-spring-boot-starter-websocket/
│ ├── pom.xml
│ ├── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── cn/
│ │ │ └── iocoder/
│ │ │ └── yudao/
│ │ │ └── framework/
│ │ │ └── websocket/
│ │ │ ├── config/
│ │ │ │ ├── WebSocketProperties.java
│ │ │ │ └── YudaoWebSocketAutoConfiguration.java
│ │ │ ├── core/
│ │ │ │ ├── handler/
│ │ │ │ │ └── JsonWebSocketMessageHandler.java
│ │ │ │ ├── listener/
│ │ │ │ │ └── WebSocketMessageListener.java
│ │ │ │ ├── message/
│ │ │ │ │ └── JsonWebSocketMessage.java
│ │ │ │ ├── security/
│ │ │ │ │ ├── LoginUserHandshakeInterceptor.java
│ │ │ │ │ └── WebSocketAuthorizeRequestsCustomizer.java
│ │ │ │ ├── sender/
│ │ │ │ │ ├── AbstractWebSocketMessageSender.java
│ │ │ │ │ ├── WebSocketMessageSender.java
│ │ │ │ │ ├── kafka/
│ │ │ │ │ │ ├── KafkaWebSocketMessage.java
│ │ │ │ │ │ ├── KafkaWebSocketMessageConsumer.java
│ │ │ │ │ │ └── KafkaWebSocketMessageSender.java
│ │ │ │ │ ├── local/
│ │ │ │ │ │ └── LocalWebSocketMessageSender.java
│ │ │ │ │ ├── rabbitmq/
│ │ │ │ │ │ ├── RabbitMQWebSocketMessage.java
│ │ │ │ │ │ ├── RabbitMQWebSocketMessageConsumer.java
│ │ │ │ │ │ └── RabbitMQWebSocketMessageSender.java
│ │ │ │ │ ├── redis/
│ │ │ │ │ │ ├── RedisWebSocketMessage.java
│ │ │ │ │ │ ├── RedisWebSocketMessageConsumer.java
│ │ │ │ │ │ └── RedisWebSocketMessageSender.java
│ │ │ │ │ └── rocketmq/
│ │ │ │ │ ├── RocketMQWebSocketMessage.java
│ │ │ │ │ ├── RocketMQWebSocketMessageConsumer.java
│ │ │ │ │ └── RocketMQWebSocketMessageSender.java
│ │ │ │ ├── session/
│ │ │ │ │ ├── WebSocketSessionHandlerDecorator.java
│ │ │ │ │ ├── WebSocketSessionManager.java
│ │ │ │ │ └── WebSocketSessionManagerImpl.java
│ │ │ │ └── util/
│ │ │ │ └── WebSocketFrameworkUtils.java
│ │ │ └── package-info.java
│ │ └── resources/
│ │ └── META-INF/
│ │ └── spring/
│ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ └── 《芋道 Spring Boot WebSocket 入门》.md
├── yudao-gateway/
│ ├── Dockerfile
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── cn/
│ │ │ └── iocoder/
│ │ │ └── yudao/
│ │ │ └── gateway/
│ │ │ ├── GatewayServerApplication.java
│ │ │ ├── filter/
│ │ │ │ ├── cors/
│ │ │ │ │ └── CorsFilter.java
│ │ │ │ ├── grey/
│ │ │ │ │ ├── GrayLoadBalancer.java
│ │ │ │ │ └── GrayReactiveLoadBalancerClientFilter.java
│ │ │ │ ├── logging/
│ │ │ │ │ ├── AccessLog.java
│ │ │ │ │ └── AccessLogFilter.java
│ │ │ │ └── security/
│ │ │ │ ├── LoginUser.java
│ │ │ │ └── TokenAuthenticationFilter.java
│ │ │ ├── handler/
│ │ │ │ └── GlobalExceptionHandler.java
│ │ │ ├── jackson/
│ │ │ │ └── GatewayJacksonAutoConfiguration.java
│ │ │ ├── route/
│ │ │ │ ├── dynamic/
│ │ │ │ │ └── package-info.java
│ │ │ │ └── package-info.java
│ │ │ └── util/
│ │ │ ├── BannerApplicationRunner.java
│ │ │ ├── EnvUtils.java
│ │ │ ├── SecurityFrameworkUtils.java
│ │ │ └── WebFrameworkUtils.java
│ │ └── resources/
│ │ ├── application-dev.yaml
│ │ ├── application-local.yaml
│ │ ├── application.yaml
│ │ ├── banner.txt
│ │ └── logback-spring.xml
│ └── test/
│ └── java/
│ └── cn/
│ └── iocoder/
│ └── yudao/
│ └── ProjectReactor.java
├── yudao-module-ai/
│ ├── pom.xml
│ ├── yudao-module-ai-api/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── cn/
│ │ └── iocoder/
│ │ └── yudao/
│ │ └── module/
│ │ └── ai/
│ │ ├── api/
│ │ │ └── package-info.java
│ │ └── enums/
│ │ ├── AiChatRoleEnum.java
│ │ ├── AiDocumentSplitStrategyEnum.java
│ │ ├── DictTypeConstants.java
│ │ ├── ErrorCodeConstants.java
│ │ ├── image/
│ │ │ └── AiImageStatusEnum.java
│ │ ├── model/
│ │ │ ├── AiModelTypeEnum.java
│ │ │ └── AiPlatformEnum.java
│ │ ├── music/
│ │ │ ├── AiMusicGenerateModeEnum.java
│ │ │ └── AiMusicStatusEnum.java
│ │ └── write/
│ │ └── AiWriteTypeEnum.java
│ └── yudao-module-ai-server/
│ ├── Dockerfile
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── cn/
│ │ │ └── iocoder/
│ │ │ └── yudao/
│ │ │ └── module/
│ │ │ └── ai/
│ │ │ ├── AiServerApplication.java
│ │ │ ├── controller/
│ │ │ │ ├── admin/
│ │ │ │ │ ├── chat/
│ │ │ │ │ │ ├── AiChatConversationController.java
│ │ │ │ │ │ ├── AiChatMessageController.http
│ │ │ │ │ │ ├── AiChatMessageController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── conversation/
│ │ │ │ │ │ │ ├── AiChatConversationCreateMyReqVO.java
│ │ │ │ │ │ │ ├── AiChatConversationPageReqVO.java
│ │ │ │ │ │ │ ├── AiChatConversationRespVO.java
│ │ │ │ │ │ │ └── AiChatConversationUpdateMyReqVO.java
│ │ │ │ │ │ └── message/
│ │ │ │ │ │ ├── AiChatMessagePageReqVO.java
│ │ │ │ │ │ ├── AiChatMessageRespVO.java
│ │ │ │ │ │ ├── AiChatMessageSendReqVO.java
│ │ │ │ │ │ └── AiChatMessageSendRespVO.java
│ │ │ │ │ ├── image/
│ │ │ │ │ │ ├── AiImageController.http
│ │ │ │ │ │ ├── AiImageController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── AiImageDrawReqVO.java
│ │ │ │ │ │ ├── AiImagePageReqVO.java
│ │ │ │ │ │ ├── AiImagePublicPageReqVO.java
│ │ │ │ │ │ ├── AiImageRespVO.java
│ │ │ │ │ │ ├── AiImageUpdateReqVO.java
│ │ │ │ │ │ └── midjourney/
│ │ │ │ │ │ ├── AiMidjourneyActionReqVO.java
│ │ │ │ │ │ └── AiMidjourneyImagineReqVO.java
│ │ │ │ │ ├── knowledge/
│ │ │ │ │ │ ├── AiKnowledgeController.http
│ │ │ │ │ │ ├── AiKnowledgeController.java
│ │ │ │ │ │ ├── AiKnowledgeDocumentController.http
│ │ │ │ │ │ ├── AiKnowledgeDocumentController.java
│ │ │ │ │ │ ├── AiKnowledgeSegmentController.http
│ │ │ │ │ │ ├── AiKnowledgeSegmentController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── document/
│ │ │ │ │ │ │ ├── AiKnowledgeDocumentCreateListReqVO.java
│ │ │ │ │ │ │ ├── AiKnowledgeDocumentPageReqVO.java
│ │ │ │ │ │ │ ├── AiKnowledgeDocumentRespVO.java
│ │ │ │ │ │ │ ├── AiKnowledgeDocumentUpdateReqVO.java
│ │ │ │ │ │ │ └── AiKnowledgeDocumentUpdateStatusReqVO.java
│ │ │ │ │ │ ├── knowledge/
│ │ │ │ │ │ │ ├── AiKnowledgeDocumentCreateReqVO.java
│ │ │ │ │ │ │ ├── AiKnowledgePageReqVO.java
│ │ │ │ │ │ │ ├── AiKnowledgeRespVO.java
│ │ │ │ │ │ │ └── AiKnowledgeSaveReqVO.java
│ │ │ │ │ │ └── segment/
│ │ │ │ │ │ ├── AiKnowledgeSegmentPageReqVO.java
│ │ │ │ │ │ ├── AiKnowledgeSegmentProcessRespVO.java
│ │ │ │ │ │ ├── AiKnowledgeSegmentRespVO.java
│ │ │ │ │ │ ├── AiKnowledgeSegmentSaveReqVO.java
│ │ │ │ │ │ ├── AiKnowledgeSegmentSearchReqVO.java
│ │ │ │ │ │ ├── AiKnowledgeSegmentSearchRespVO.java
│ │ │ │ │ │ └── AiKnowledgeSegmentUpdateStatusReqVO.java
│ │ │ │ │ ├── mindmap/
│ │ │ │ │ │ ├── AiMindMapController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── AiMindMapGenerateReqVO.java
│ │ │ │ │ │ ├── AiMindMapPageReqVO.java
│ │ │ │ │ │ └── AiMindMapRespVO.java
│ │ │ │ │ ├── model/
│ │ │ │ │ │ ├── AiApiKeyController.java
│ │ │ │ │ │ ├── AiChatRoleController.java
│ │ │ │ │ │ ├── AiModelController.java
│ │ │ │ │ │ ├── AiToolController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── apikey/
│ │ │ │ │ │ │ ├── AiApiKeyPageReqVO.java
│ │ │ │ │ │ │ ├── AiApiKeyRespVO.java
│ │ │ │ │ │ │ └── AiApiKeySaveReqVO.java
│ │ │ │ │ │ ├── chatRole/
│ │ │ │ │ │ │ ├── AiChatRolePageReqVO.java
│ │ │ │ │ │ │ ├── AiChatRoleRespVO.java
│ │ │ │ │ │ │ ├── AiChatRoleSaveMyReqVO.java
│ │ │ │ │ │ │ └── AiChatRoleSaveReqVO.java
│ │ │ │ │ │ ├── model/
│ │ │ │ │ │ │ ├── AiModelPageReqVO.java
│ │ │ │ │ │ │ ├── AiModelRespVO.java
│ │ │ │ │ │ │ └── AiModelSaveReqVO.java
│ │ │ │ │ │ └── tool/
│ │ │ │ │ │ ├── AiToolPageReqVO.java
│ │ │ │ │ │ ├── AiToolRespVO.java
│ │ │ │ │ │ └── AiToolSaveReqVO.java
│ │ │ │ │ ├── music/
│ │ │ │ │ │ ├── AiMusicController.http
│ │ │ │ │ │ ├── AiMusicController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── AiMusicPageReqVO.java
│ │ │ │ │ │ ├── AiMusicRespVO.java
│ │ │ │ │ │ ├── AiMusicUpdateMyReqVO.java
│ │ │ │ │ │ ├── AiMusicUpdateReqVO.java
│ │ │ │ │ │ └── AiSunoGenerateReqVO.java
│ │ │ │ │ ├── workflow/
│ │ │ │ │ │ ├── AiWorkflowController.http
│ │ │ │ │ │ ├── AiWorkflowController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── AiWorkflowPageReqVO.java
│ │ │ │ │ │ ├── AiWorkflowRespVO.java
│ │ │ │ │ │ ├── AiWorkflowSaveReqVO.java
│ │ │ │ │ │ └── AiWorkflowTestReqVO.java
│ │ │ │ │ └── write/
│ │ │ │ │ ├── AiWriteController.java
│ │ │ │ │ └── vo/
│ │ │ │ │ ├── AiWriteGenerateReqVO.java
│ │ │ │ │ ├── AiWritePageReqVO.java
│ │ │ │ │ └── AiWriteRespVO.java
│ │ │ │ ├── app/
│ │ │ │ │ └── package-info.java
│ │ │ │ └── package-info.java
│ │ │ ├── dal/
│ │ │ │ ├── dataobject/
│ │ │ │ │ ├── chat/
│ │ │ │ │ │ ├── AiChatConversationDO.java
│ │ │ │ │ │ └── AiChatMessageDO.java
│ │ │ │ │ ├── image/
│ │ │ │ │ │ └── AiImageDO.java
│ │ │ │ │ ├── knowledge/
│ │ │ │ │ │ ├── AiKnowledgeDO.java
│ │ │ │ │ │ ├── AiKnowledgeDocumentDO.java
│ │ │ │ │ │ └── AiKnowledgeSegmentDO.java
│ │ │ │ │ ├── mindmap/
│ │ │ │ │ │ └── AiMindMapDO.java
│ │ │ │ │ ├── model/
│ │ │ │ │ │ ├── AiApiKeyDO.java
│ │ │ │ │ │ ├── AiChatRoleDO.java
│ │ │ │ │ │ ├── AiModelDO.java
│ │ │ │ │ │ └── AiToolDO.java
│ │ │ │ │ ├── music/
│ │ │ │ │ │ └── AiMusicDO.java
│ │ │ │ │ ├── workflow/
│ │ │ │ │ │ └── AiWorkflowDO.java
│ │ │ │ │ └── write/
│ │ │ │ │ └── AiWriteDO.java
│ │ │ │ └── mysql/
│ │ │ │ ├── chat/
│ │ │ │ │ ├── AiChatConversationMapper.java
│ │ │ │ │ └── AiChatMessageMapper.java
│ │ │ │ ├── image/
│ │ │ │ │ └── AiImageMapper.java
│ │ │ │ ├── knowledge/
│ │ │ │ │ ├── AiKnowledgeDocumentMapper.java
│ │ │ │ │ ├── AiKnowledgeMapper.java
│ │ │ │ │ └── AiKnowledgeSegmentMapper.java
│ │ │ │ ├── mindmap/
│ │ │ │ │ └── AiMindMapMapper.java
│ │ │ │ ├── model/
│ │ │ │ │ ├── AiApiKeyMapper.java
│ │ │ │ │ ├── AiChatMapper.java
│ │ │ │ │ ├── AiChatRoleMapper.java
│ │ │ │ │ └── AiToolMapper.java
│ │ │ │ ├── music/
│ │ │ │ │ └── AiMusicMapper.java
│ │ │ │ ├── workflow/
│ │ │ │ │ └── AiWorkflowMapper.java
│ │ │ │ └── write/
│ │ │ │ └── AiWriteMapper.java
│ │ │ ├── framework/
│ │ │ │ ├── ai/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── AiAutoConfiguration.java
│ │ │ │ │ │ └── YudaoAiProperties.java
│ │ │ │ │ ├── core/
│ │ │ │ │ │ ├── model/
│ │ │ │ │ │ │ ├── AiModelFactory.java
│ │ │ │ │ │ │ ├── AiModelFactoryImpl.java
│ │ │ │ │ │ │ ├── baichuan/
│ │ │ │ │ │ │ │ └── BaiChuanChatModel.java
│ │ │ │ │ │ │ ├── doubao/
│ │ │ │ │ │ │ │ └── DouBaoChatModel.java
│ │ │ │ │ │ │ ├── gemini/
│ │ │ │ │ │ │ │ └── GeminiChatModel.java
│ │ │ │ │ │ │ ├── grok/
│ │ │ │ │ │ │ │ └── GrokChatModel.java
│ │ │ │ │ │ │ ├── hunyuan/
│ │ │ │ │ │ │ │ └── HunYuanChatModel.java
│ │ │ │ │ │ │ ├── midjourney/
│ │ │ │ │ │ │ │ └── api/
│ │ │ │ │ │ │ │ └── MidjourneyApi.java
│ │ │ │ │ │ │ ├── siliconflow/
│ │ │ │ │ │ │ │ ├── SiliconFlowApiConstants.java
│ │ │ │ │ │ │ │ ├── SiliconFlowChatModel.java
│ │ │ │ │ │ │ │ ├── SiliconFlowImageApi.java
│ │ │ │ │ │ │ │ ├── SiliconFlowImageModel.java
│ │ │ │ │ │ │ │ └── SiliconFlowImageOptions.java
│ │ │ │ │ │ │ ├── suno/
│ │ │ │ │ │ │ │ └── api/
│ │ │ │ │ │ │ │ └── SunoApi.java
│ │ │ │ │ │ │ ├── wenduoduo/
│ │ │ │ │ │ │ │ └── api/
│ │ │ │ │ │ │ │ └── WenDuoDuoPptApi.java
│ │ │ │ │ │ │ └── xinghuo/
│ │ │ │ │ │ │ ├── XingHuoChatModel.java
│ │ │ │ │ │ │ └── api/
│ │ │ │ │ │ │ └── XunFeiPptApi.java
│ │ │ │ │ │ └── webserch/
│ │ │ │ │ │ ├── AiWebSearchClient.java
│ │ │ │ │ │ ├── AiWebSearchRequest.java
│ │ │ │ │ │ ├── AiWebSearchResponse.java
│ │ │ │ │ │ └── bocha/
│ │ │ │ │ │ └── AiBoChaWebSearchClient.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── package-info.java
│ │ │ │ ├── rpc/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── RpcConfiguration.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── security/
│ │ │ │ ├── config/
│ │ │ │ │ └── SecurityConfiguration.java
│ │ │ │ └── core/
│ │ │ │ └── package-info.java
│ │ │ ├── job/
│ │ │ │ ├── image/
│ │ │ │ │ └── AiMidjourneySyncJob.java
│ │ │ │ └── music/
│ │ │ │ └── AiSunoSyncJob.java
│ │ │ ├── package-info.java
│ │ │ ├── service/
│ │ │ │ ├── chat/
│ │ │ │ │ ├── AiChatConversationService.java
│ │ │ │ │ ├── AiChatConversationServiceImpl.java
│ │ │ │ │ ├── AiChatMessageService.java
│ │ │ │ │ └── AiChatMessageServiceImpl.java
│ │ │ │ ├── image/
│ │ │ │ │ ├── AiImageService.java
│ │ │ │ │ └── AiImageServiceImpl.java
│ │ │ │ ├── knowledge/
│ │ │ │ │ ├── AiKnowledgeDocumentService.java
│ │ │ │ │ ├── AiKnowledgeDocumentServiceImpl.java
│ │ │ │ │ ├── AiKnowledgeSegmentService.java
│ │ │ │ │ ├── AiKnowledgeSegmentServiceImpl.java
│ │ │ │ │ ├── AiKnowledgeService.java
│ │ │ │ │ ├── AiKnowledgeServiceImpl.java
│ │ │ │ │ ├── bo/
│ │ │ │ │ │ ├── AiKnowledgeSegmentSearchReqBO.java
│ │ │ │ │ │ └── AiKnowledgeSegmentSearchRespBO.java
│ │ │ │ │ └── splitter/
│ │ │ │ │ ├── MarkdownQaSplitter.java
│ │ │ │ │ └── SemanticTextSplitter.java
│ │ │ │ ├── mindmap/
│ │ │ │ │ ├── AiMindMapService.java
│ │ │ │ │ └── AiMindMapServiceImpl.java
│ │ │ │ ├── model/
│ │ │ │ │ ├── AiApiKeyService.java
│ │ │ │ │ ├── AiApiKeyServiceImpl.java
│ │ │ │ │ ├── AiChatRoleService.java
│ │ │ │ │ ├── AiChatRoleServiceImpl.java
│ │ │ │ │ ├── AiModelService.java
│ │ │ │ │ ├── AiModelServiceImpl.java
│ │ │ │ │ ├── AiToolService.java
│ │ │ │ │ └── AiToolServiceImpl.java
│ │ │ │ ├── music/
│ │ │ │ │ ├── AiMusicService.java
│ │ │ │ │ └── AiMusicServiceImpl.java
│ │ │ │ ├── workflow/
│ │ │ │ │ ├── AiWorkflowService.java
│ │ │ │ │ └── AiWorkflowServiceImpl.java
│ │ │ │ └── write/
│ │ │ │ ├── AiWriteService.java
│ │ │ │ └── AiWriteServiceImpl.java
│ │ │ ├── tool/
│ │ │ │ ├── function/
│ │ │ │ │ ├── DirectoryListToolFunction.java
│ │ │ │ │ ├── UserProfileQueryToolFunction.java
│ │ │ │ │ ├── WeatherQueryToolFunction.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── method/
│ │ │ │ ├── Person.java
│ │ │ │ ├── PersonService.java
│ │ │ │ ├── PersonServiceImpl.java
│ │ │ │ └── package-info.java
│ │ │ └── util/
│ │ │ ├── AiUtils.java
│ │ │ └── FileTypeUtils.java
│ │ └── resources/
│ │ ├── application-dev.yaml
│ │ ├── application-local.yaml
│ │ ├── application.yaml
│ │ └── logback-spring.xml
│ └── test/
│ └── java/
│ └── cn/
│ └── iocoder/
│ └── yudao/
│ └── module/
│ └── ai/
│ └── framework/
│ └── ai/
│ └── core/
│ ├── model/
│ │ ├── chat/
│ │ │ ├── AnthropicChatModelTest.java
│ │ │ ├── AzureOpenAIChatModelTests.java
│ │ │ ├── BaiChuanChatModelTests.java
│ │ │ ├── CozeChatModelTests.java
│ │ │ ├── DeepSeekChatModelTests.java
│ │ │ ├── DifyChatModelTests.java
│ │ │ ├── DouBaoChatModelTests.java
│ │ │ ├── FastGPTChatModelTests.java
│ │ │ ├── GeminiChatModelTests.java
│ │ │ ├── HunYuanChatModelTests.java
│ │ │ ├── LlamaChatModelTests.java
│ │ │ ├── MiniMaxChatModelTests.java
│ │ │ ├── MoonshotChatModelTests.java
│ │ │ ├── OllamaChatModelTests.java
│ │ │ ├── OpenAIChatModelTests.java
│ │ │ ├── SiliconFlowChatModelTests.java
│ │ │ ├── TongYiChatModelTests.java
│ │ │ ├── XingHuoChatModelTests.java
│ │ │ ├── YiYanChatModelTests.java
│ │ │ └── ZhiPuAiChatModelTests.java
│ │ ├── image/
│ │ │ ├── MidjourneyApiTests.java
│ │ │ ├── OpenAiImageModelTests.java
│ │ │ ├── QianFanImageTests.java
│ │ │ ├── SiliconFlowImageModelTests.java
│ │ │ ├── StabilityAiImageModelTests.java
│ │ │ ├── TongYiImagesModelTest.java
│ │ │ └── ZhiPuAiImageModelTests.java
│ │ ├── mcp/
│ │ │ └── DouBaoMcpTests.java
│ │ ├── music/
│ │ │ └── SunoApiTests.java
│ │ └── ppt/
│ │ ├── wdd/
│ │ │ └── WenDuoDuoPptApiTests.java
│ │ └── xunfei/
│ │ └── XunFeiPptApiTests.java
│ └── websearch/
│ └── AiBoChaWebSearchClientTest.java
├── yudao-module-bpm/
│ ├── pom.xml
│ ├── yudao-module-bpm-api/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── cn/
│ │ └── iocoder/
│ │ └── yudao/
│ │ └── module/
│ │ └── bpm/
│ │ ├── api/
│ │ │ ├── event/
│ │ │ │ ├── BpmProcessInstanceStatusEvent.java
│ │ │ │ └── BpmProcessInstanceStatusEventListener.java
│ │ │ ├── package-info.java
│ │ │ └── task/
│ │ │ ├── BpmProcessInstanceApi.java
│ │ │ └── dto/
│ │ │ └── BpmProcessInstanceCreateReqDTO.java
│ │ └── enums/
│ │ ├── ApiConstants.java
│ │ ├── DictTypeConstants.java
│ │ ├── ErrorCodeConstants.java
│ │ ├── definition/
│ │ │ ├── BpmAutoApproveTypeEnum.java
│ │ │ ├── BpmBoundaryEventTypeEnum.java
│ │ │ ├── BpmChildProcessMultiInstanceSourceTypeEnum.java
│ │ │ ├── BpmChildProcessStartUserEmptyTypeEnum.java
│ │ │ ├── BpmChildProcessStartUserTypeEnum.java
│ │ │ ├── BpmDelayTimerTypeEnum.java
│ │ │ ├── BpmFieldPermissionEnum.java
│ │ │ ├── BpmHttpRequestParamTypeEnum.java
│ │ │ ├── BpmModelFormTypeEnum.java
│ │ │ ├── BpmModelTypeEnum.java
│ │ │ ├── BpmProcessListenerTypeEnum.java
│ │ │ ├── BpmProcessListenerValueTypeEnum.java
│ │ │ ├── BpmSimpleModeConditionTypeEnum.java
│ │ │ ├── BpmSimpleModelNodeTypeEnum.java
│ │ │ ├── BpmTriggerTypeEnum.java
│ │ │ ├── BpmUserTaskApproveMethodEnum.java
│ │ │ ├── BpmUserTaskApproveTypeEnum.java
│ │ │ ├── BpmUserTaskAssignEmptyHandlerTypeEnum.java
│ │ │ ├── BpmUserTaskAssignStartUserHandlerTypeEnum.java
│ │ │ ├── BpmUserTaskRejectHandlerTypeEnum.java
│ │ │ └── BpmUserTaskTimeoutHandlerTypeEnum.java
│ │ ├── message/
│ │ │ └── BpmMessageEnum.java
│ │ └── task/
│ │ ├── BpmCommentTypeEnum.java
│ │ ├── BpmProcessInstanceStatusEnum.java
│ │ ├── BpmReasonEnum.java
│ │ ├── BpmTaskSignTypeEnum.java
│ │ └── BpmTaskStatusEnum.java
│ └── yudao-module-bpm-server/
│ ├── Dockerfile
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── cn/
│ │ │ └── iocoder/
│ │ │ └── yudao/
│ │ │ └── module/
│ │ │ └── bpm/
│ │ │ ├── BpmServerApplication.java
│ │ │ ├── api/
│ │ │ │ ├── event/
│ │ │ │ │ ├── CrmContractStatusListener.java
│ │ │ │ │ └── CrmReceivableStatusListener.java
│ │ │ │ ├── package-info.java
│ │ │ │ └── task/
│ │ │ │ └── BpmProcessInstanceApiImpl.java
│ │ │ ├── controller/
│ │ │ │ ├── admin/
│ │ │ │ │ ├── base/
│ │ │ │ │ │ ├── dept/
│ │ │ │ │ │ │ └── DeptSimpleBaseVO.java
│ │ │ │ │ │ ├── package-info.java
│ │ │ │ │ │ └── user/
│ │ │ │ │ │ └── UserSimpleBaseVO.java
│ │ │ │ │ ├── definition/
│ │ │ │ │ │ ├── BpmCategoryController.java
│ │ │ │ │ │ ├── BpmFormController.java
│ │ │ │ │ │ ├── BpmModelController.java
│ │ │ │ │ │ ├── BpmProcessDefinitionController.java
│ │ │ │ │ │ ├── BpmProcessExpressionController.java
│ │ │ │ │ │ ├── BpmProcessListenerController.java
│ │ │ │ │ │ ├── BpmUserGroupController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── category/
│ │ │ │ │ │ │ ├── BpmCategoryPageReqVO.java
│ │ │ │ │ │ │ ├── BpmCategoryRespVO.java
│ │ │ │ │ │ │ └── BpmCategorySaveReqVO.java
│ │ │ │ │ │ ├── expression/
│ │ │ │ │ │ │ ├── BpmProcessExpressionPageReqVO.java
│ │ │ │ │ │ │ ├── BpmProcessExpressionRespVO.java
│ │ │ │ │ │ │ └── BpmProcessExpressionSaveReqVO.java
│ │ │ │ │ │ ├── form/
│ │ │ │ │ │ │ ├── BpmFormFieldVO.java
│ │ │ │ │ │ │ ├── BpmFormPageReqVO.java
│ │ │ │ │ │ │ ├── BpmFormRespVO.java
│ │ │ │ │ │ │ └── BpmFormSaveReqVO.java
│ │ │ │ │ │ ├── group/
│ │ │ │ │ │ │ ├── BpmUserGroupPageReqVO.java
│ │ │ │ │ │ │ ├── BpmUserGroupRespVO.java
│ │ │ │ │ │ │ └── BpmUserGroupSaveReqVO.java
│ │ │ │ │ │ ├── listener/
│ │ │ │ │ │ │ ├── BpmProcessListenerPageReqVO.java
│ │ │ │ │ │ │ ├── BpmProcessListenerRespVO.java
│ │ │ │ │ │ │ └── BpmProcessListenerSaveReqVO.java
│ │ │ │ │ │ ├── model/
│ │ │ │ │ │ │ ├── BpmModeUpdateBpmnReqVO.java
│ │ │ │ │ │ │ ├── BpmModelMetaInfoVO.java
│ │ │ │ │ │ │ ├── BpmModelRespVO.java
│ │ │ │ │ │ │ ├── BpmModelSaveReqVO.java
│ │ │ │ │ │ │ ├── BpmModelUpdateStateReqVO.java
│ │ │ │ │ │ │ └── simple/
│ │ │ │ │ │ │ ├── BpmSimpleModelNodeVO.java
│ │ │ │ │ │ │ └── BpmSimpleModelUpdateReqVO.java
│ │ │ │ │ │ └── process/
│ │ │ │ │ │ ├── BpmProcessDefinitionPageReqVO.java
│ │ │ │ │ │ └── BpmProcessDefinitionRespVO.java
│ │ │ │ │ ├── oa/
│ │ │ │ │ │ ├── BpmOALeaveController.http
│ │ │ │ │ │ ├── BpmOALeaveController.java
│ │ │ │ │ │ ├── package-info.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── BpmOALeaveCreateReqVO.java
│ │ │ │ │ │ ├── BpmOALeavePageReqVO.java
│ │ │ │ │ │ └── BpmOALeaveRespVO.java
│ │ │ │ │ └── task/
│ │ │ │ │ ├── BpmProcessInstanceController.http
│ │ │ │ │ ├── BpmProcessInstanceController.java
│ │ │ │ │ ├── BpmProcessInstanceCopyController.java
│ │ │ │ │ ├── BpmTaskController.java
│ │ │ │ │ └── vo/
│ │ │ │ │ ├── activity/
│ │ │ │ │ │ └── BpmActivityRespVO.java
│ │ │ │ │ ├── cc/
│ │ │ │ │ │ └── BpmProcessInstanceCopyRespVO.java
│ │ │ │ │ ├── instance/
│ │ │ │ │ │ ├── BpmApprovalDetailReqVO.java
│ │ │ │ │ │ ├── BpmApprovalDetailRespVO.java
│ │ │ │ │ │ ├── BpmProcessInstanceBpmnModelViewRespVO.java
│ │ │ │ │ │ ├── BpmProcessInstanceCancelReqVO.java
│ │ │ │ │ │ ├── BpmProcessInstanceCopyPageReqVO.java
│ │ │ │ │ │ ├── BpmProcessInstanceCreateReqVO.java
│ │ │ │ │ │ ├── BpmProcessInstancePageReqVO.java
│ │ │ │ │ │ ├── BpmProcessInstanceRespVO.java
│ │ │ │ │ │ └── BpmProcessPrintDataRespVO.java
│ │ │ │ │ └── task/
│ │ │ │ │ ├── BpmTaskApproveReqVO.java
│ │ │ │ │ ├── BpmTaskCopyReqVO.java
│ │ │ │ │ ├── BpmTaskDelegateReqVO.java
│ │ │ │ │ ├── BpmTaskPageReqVO.java
│ │ │ │ │ ├── BpmTaskRejectReqVO.java
│ │ │ │ │ ├── BpmTaskRespVO.java
│ │ │ │ │ ├── BpmTaskReturnReqVO.java
│ │ │ │ │ ├── BpmTaskSignCreateReqVO.java
│ │ │ │ │ ├── BpmTaskSignDeleteReqVO.java
│ │ │ │ │ └── BpmTaskTransferReqVO.java
│ │ │ │ ├── app/
│ │ │ │ │ └── package-info.java
│ │ │ │ └── package-info.java
│ │ │ ├── convert/
│ │ │ │ ├── definition/
│ │ │ │ │ ├── BpmModelConvert.java
│ │ │ │ │ └── BpmProcessDefinitionConvert.java
│ │ │ │ ├── message/
│ │ │ │ │ └── BpmMessageConvert.java
│ │ │ │ ├── package-info.java
│ │ │ │ ├── task/
│ │ │ │ │ ├── BpmProcessInstanceConvert.java
│ │ │ │ │ └── BpmTaskConvert.java
│ │ │ │ └── 《芋道 Spring Boot 对象转换 MapStruct 入门》.md
│ │ │ ├── dal/
│ │ │ │ ├── dataobject/
│ │ │ │ │ ├── definition/
│ │ │ │ │ │ ├── BpmCategoryDO.java
│ │ │ │ │ │ ├── BpmFormDO.java
│ │ │ │ │ │ ├── BpmProcessDefinitionInfoDO.java
│ │ │ │ │ │ ├── BpmProcessExpressionDO.java
│ │ │ │ │ │ ├── BpmProcessListenerDO.java
│ │ │ │ │ │ └── BpmUserGroupDO.java
│ │ │ │ │ ├── oa/
│ │ │ │ │ │ └── BpmOALeaveDO.java
│ │ │ │ │ └── task/
│ │ │ │ │ └── BpmProcessInstanceCopyDO.java
│ │ │ │ ├── mysql/
│ │ │ │ │ ├── category/
│ │ │ │ │ │ └── BpmCategoryMapper.java
│ │ │ │ │ ├── definition/
│ │ │ │ │ │ ├── BpmFormMapper.java
│ │ │ │ │ │ ├── BpmProcessDefinitionInfoMapper.java
│ │ │ │ │ │ ├── BpmProcessExpressionMapper.java
│ │ │ │ │ │ ├── BpmProcessListenerMapper.java
│ │ │ │ │ │ └── BpmUserGroupMapper.java
│ │ │ │ │ ├── oa/
│ │ │ │ │ │ └── BpmOALeaveMapper.java
│ │ │ │ │ └── task/
│ │ │ │ │ └── BpmProcessInstanceCopyMapper.java
│ │ │ │ └── redis/
│ │ │ │ ├── BpmProcessIdRedisDAO.java
│ │ │ │ └── RedisKeyConstants.java
│ │ │ ├── framework/
│ │ │ │ ├── flowable/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── BpmFlowableConfiguration.java
│ │ │ │ │ └── core/
│ │ │ │ │ ├── behavior/
│ │ │ │ │ │ ├── BpmActivityBehaviorFactory.java
│ │ │ │ │ │ ├── BpmParallelMultiInstanceBehavior.java
│ │ │ │ │ │ ├── BpmSequentialMultiInstanceBehavior.java
│ │ │ │ │ │ └── BpmUserTaskActivityBehavior.java
│ │ │ │ │ ├── candidate/
│ │ │ │ │ │ ├── BpmTaskCandidateInvoker.java
│ │ │ │ │ │ ├── BpmTaskCandidateStrategy.java
│ │ │ │ │ │ ├── expression/
│ │ │ │ │ │ │ ├── BpmTaskAssignLeaderExpression.java
│ │ │ │ │ │ │ └── BpmTaskAssignStartUserExpression.java
│ │ │ │ │ │ └── strategy/
│ │ │ │ │ │ ├── dept/
│ │ │ │ │ │ │ ├── AbstractBpmTaskCandidateDeptLeaderStrategy.java
│ │ │ │ │ │ │ ├── BpmTaskCandidateApproveUserSelectStrategy.java
│ │ │ │ │ │ │ ├── BpmTaskCandidateDeptLeaderMultiStrategy.java
│ │ │ │ │ │ │ ├── BpmTaskCandidateDeptLeaderStrategy.java
│ │ │ │ │ │ │ ├── BpmTaskCandidateDeptMemberStrategy.java
│ │ │ │ │ │ │ ├── BpmTaskCandidateStartUserDeptLeaderMultiStrategy.java
│ │ │ │ │ │ │ ├── BpmTaskCandidateStartUserDeptLeaderStrategy.java
│ │ │ │ │ │ │ └── BpmTaskCandidateStartUserSelectStrategy.java
│ │ │ │ │ │ ├── form/
│ │ │ │ │ │ │ ├── BpmTaskCandidateFormDeptLeaderStrategy.java
│ │ │ │ │ │ │ └── BpmTaskCandidateFormUserStrategy.java
│ │ │ │ │ │ ├── other/
│ │ │ │ │ │ │ ├── BpmTaskCandidateAssignEmptyStrategy.java
│ │ │ │ │ │ │ └── BpmTaskCandidateExpressionStrategy.java
│ │ │ │ │ │ └── user/
│ │ │ │ │ │ ├── BpmTaskCandidateGroupStrategy.java
│ │ │ │ │ │ ├── BpmTaskCandidatePostStrategy.java
│ │ │ │ │ │ ├── BpmTaskCandidateRoleStrategy.java
│ │ │ │ │ │ ├── BpmTaskCandidateStartUserStrategy.java
│ │ │ │ │ │ └── BpmTaskCandidateUserStrategy.java
│ │ │ │ │ ├── el/
│ │ │ │ │ │ └── VariableConvertByTypeExpressionFunction.java
│ │ │ │ │ ├── enums/
│ │ │ │ │ │ ├── BpmTaskCandidateStrategyEnum.java
│ │ │ │ │ │ ├── BpmnModelConstants.java
│ │ │ │ │ │ └── BpmnVariableConstants.java
│ │ │ │ │ ├── event/
│ │ │ │ │ │ └── BpmProcessInstanceEventPublisher.java
│ │ │ │ │ ├── listener/
│ │ │ │ │ │ ├── BpmCopyTaskDelegate.java
│ │ │ │ │ │ ├── BpmProcessInstanceEventListener.java
│ │ │ │ │ │ ├── BpmTaskEventListener.java
│ │ │ │ │ │ ├── BpmTriggerTaskDelegate.java
│ │ │ │ │ │ └── demo/
│ │ │ │ │ │ ├── exection/
│ │ │ │ │ │ │ ├── DemoDelegateClassExecutionListener.java
│ │ │ │ │ │ │ ├── DemoDelegateExpressionExecutionListener.java
│ │ │ │ │ │ │ └── DemoSpringExpressionExecutionListener.java
│ │ │ │ │ │ └── task/
│ │ │ │ │ │ ├── DemoDelegateClassTaskListener.java
│ │ │ │ │ │ ├── DemoDelegateExpressionTaskListener.java
│ │ │ │ │ │ └── DemoSpringExpressionTaskListener.java
│ │ │ │ │ └── util/
│ │ │ │ │ ├── BpmHttpRequestUtils.java
│ │ │ │ │ ├── BpmnModelUtils.java
│ │ │ │ │ ├── FlowableUtils.java
│ │ │ │ │ └── SimpleModelUtils.java
│ │ │ │ ├── package-info.java
│ │ │ │ ├── rpc/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── RpcConfiguration.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── security/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── SecurityConfiguration.java
│ │ │ │ │ └── core/
│ │ │ │ │ └── package-info.java
│ │ │ │ └── web/
│ │ │ │ ├── config/
│ │ │ │ │ └── BpmWebConfiguration.java
│ │ │ │ ├── core/
│ │ │ │ │ └── FlowableWebFilter.java
│ │ │ │ └── package-info.java
│ │ │ ├── package-info.java
│ │ │ └── service/
│ │ │ ├── definition/
│ │ │ │ ├── BpmCategoryService.java
│ │ │ │ ├── BpmCategoryServiceImpl.java
│ │ │ │ ├── BpmFormService.java
│ │ │ │ ├── BpmFormServiceImpl.java
│ │ │ │ ├── BpmModelService.java
│ │ │ │ ├── BpmModelServiceImpl.java
│ │ │ │ ├── BpmProcessDefinitionService.java
│ │ │ │ ├── BpmProcessDefinitionServiceImpl.java
│ │ │ │ ├── BpmProcessExpressionService.java
│ │ │ │ ├── BpmProcessExpressionServiceImpl.java
│ │ │ │ ├── BpmProcessListenerService.java
│ │ │ │ ├── BpmProcessListenerServiceImpl.java
│ │ │ │ ├── BpmUserGroupService.java
│ │ │ │ ├── BpmUserGroupServiceImpl.java
│ │ │ │ └── dto/
│ │ │ │ ├── BpmFormFieldRespDTO.java
│ │ │ │ ├── BpmModelMetaInfoRespDTO.java
│ │ │ │ └── BpmProcessDefinitionCreateReqDTO.java
│ │ │ ├── message/
│ │ │ │ ├── BpmMessageService.java
│ │ │ │ ├── BpmMessageServiceImpl.java
│ │ │ │ └── dto/
│ │ │ │ ├── BpmMessageSendWhenProcessInstanceApproveReqDTO.java
│ │ │ │ ├── BpmMessageSendWhenProcessInstanceRejectReqDTO.java
│ │ │ │ ├── BpmMessageSendWhenTaskCreatedReqDTO.java
│ │ │ │ └── BpmMessageSendWhenTaskTimeoutReqDTO.java
│ │ │ ├── oa/
│ │ │ │ ├── BpmOALeaveService.java
│ │ │ │ ├── BpmOALeaveServiceImpl.java
│ │ │ │ └── listener/
│ │ │ │ └── BpmOALeaveStatusListener.java
│ │ │ └── task/
│ │ │ ├── BpmProcessInstanceCopyService.java
│ │ │ ├── BpmProcessInstanceCopyServiceImpl.java
│ │ │ ├── BpmProcessInstanceService.java
│ │ │ ├── BpmProcessInstanceServiceImpl.java
│ │ │ ├── BpmTaskService.java
│ │ │ ├── BpmTaskServiceImpl.java
│ │ │ ├── listener/
│ │ │ │ ├── BpmCallActivityListener.java
│ │ │ │ └── BpmUserTaskListener.java
│ │ │ └── trigger/
│ │ │ ├── BpmTrigger.java
│ │ │ ├── form/
│ │ │ │ ├── BpmFormDeleteTrigger.java
│ │ │ │ └── BpmFormUpdateTrigger.java
│ │ │ └── http/
│ │ │ ├── BpmAbstractHttpRequestTrigger.java
│ │ │ ├── BpmHttpCallbackTrigger.java
│ │ │ └── BpmSyncHttpRequestTrigger.java
│ │ └── resources/
│ │ ├── application-dev.yaml
│ │ ├── application-local.yaml
│ │ ├── application.yaml
│ │ └── logback-spring.xml
│ └── test/
│ ├── java/
│ │ └── cn/
│ │ └── iocoder/
│ │ └── yudao/
│ │ └── module/
│ │ └── bpm/
│ │ ├── framework/
│ │ │ └── flowable/
│ │ │ └── core/
│ │ │ └── candidate/
│ │ │ ├── BpmTaskCandidateInvokerTest.java
│ │ │ ├── expression/
│ │ │ │ └── BpmTaskAssignLeaderExpressionTest.java
│ │ │ └── strategy/
│ │ │ ├── dept/
│ │ │ │ ├── BpmTaskCandidateDeptLeaderMultiStrategyTest.java
│ │ │ │ ├── BpmTaskCandidateDeptLeaderStrategyTest.java
│ │ │ │ ├── BpmTaskCandidateDeptMemberStrategyTest.java
│ │ │ │ ├── BpmTaskCandidateStartUserDeptLeaderMultiStrategyTest.java
│ │ │ │ ├── BpmTaskCandidateStartUserDeptLeaderStrategyTest.java
│ │ │ │ └── BpmTaskCandidateStartUserSelectStrategyTest.java
│ │ │ ├── other/
│ │ │ │ ├── BpmTaskCandidateAssignEmptyStrategyTest.java
│ │ │ │ └── BpmTaskCandidateExpressionStrategyTest.java
│ │ │ └── user/
│ │ │ ├── BpmTaskCandidateGroupStrategyTest.java
│ │ │ ├── BpmTaskCandidatePostStrategyTest.java
│ │ │ ├── BpmTaskCandidateRoleStrategyTest.java
│ │ │ ├── BpmTaskCandidateStartUserStrategyTest.java
│ │ │ └── BpmTaskCandidateUserStrategyTest.java
│ │ └── service/
│ │ ├── category/
│ │ │ └── BpmCategoryServiceImplTest.java
│ │ └── definition/
│ │ ├── BpmFormServiceTest.java
│ │ └── BpmUserGroupServiceTest.java
│ └── resources/
│ ├── application-unit-test.yaml
│ ├── logback.xml
│ └── sql/
│ ├── clean.sql
│ └── create_tables.sql
├── yudao-module-crm/
│ ├── pom.xml
│ ├── yudao-module-crm-api/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── cn/
│ │ └── iocoder/
│ │ └── yudao/
│ │ └── module/
│ │ └── crm/
│ │ ├── api/
│ │ │ └── package-info.java
│ │ └── enums/
│ │ ├── ApiConstants.java
│ │ ├── DictTypeConstants.java
│ │ ├── ErrorCodeConstants.java
│ │ ├── LogRecordConstants.java
│ │ ├── business/
│ │ │ └── CrmBusinessEndStatusEnum.java
│ │ ├── common/
│ │ │ ├── CrmAuditStatusEnum.java
│ │ │ ├── CrmBizTypeEnum.java
│ │ │ └── CrmSceneTypeEnum.java
│ │ ├── customer/
│ │ │ ├── CrmCustomerLevelEnum.java
│ │ │ └── CrmCustomerLimitConfigTypeEnum.java
│ │ ├── permission/
│ │ │ └── CrmPermissionLevelEnum.java
│ │ ├── product/
│ │ │ └── CrmProductStatusEnum.java
│ │ └── receivable/
│ │ └── CrmReceivableReturnTypeEnum.java
│ └── yudao-module-crm-server/
│ ├── Dockerfile
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── cn/
│ │ │ └── iocoder/
│ │ │ └── yudao/
│ │ │ └── module/
│ │ │ └── crm/
│ │ │ ├── CrmServerApplication.java
│ │ │ ├── api/
│ │ │ │ └── package-info.java
│ │ │ ├── controller/
│ │ │ │ ├── admin/
│ │ │ │ │ ├── business/
│ │ │ │ │ │ ├── CrmBusinessController.java
│ │ │ │ │ │ ├── CrmBusinessStatusController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── business/
│ │ │ │ │ │ │ ├── CrmBusinessPageReqVO.java
│ │ │ │ │ │ │ ├── CrmBusinessRespVO.java
│ │ │ │ │ │ │ ├── CrmBusinessSaveReqVO.java
│ │ │ │ │ │ │ ├── CrmBusinessTransferReqVO.java
│ │ │ │ │ │ │ └── CrmBusinessUpdateStatusReqVO.java
│ │ │ │ │ │ └── status/
│ │ │ │ │ │ ├── CrmBusinessStatusRespVO.java
│ │ │ │ │ │ └── CrmBusinessStatusSaveReqVO.java
│ │ │ │ │ ├── clue/
│ │ │ │ │ │ ├── CrmClueController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── CrmCluePageReqVO.java
│ │ │ │ │ │ ├── CrmClueRespVO.java
│ │ │ │ │ │ ├── CrmClueSaveReqVO.java
│ │ │ │ │ │ └── CrmClueTransferReqVO.java
│ │ │ │ │ ├── contact/
│ │ │ │ │ │ ├── CrmContactController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── CrmContactBusiness2ReqVO.java
│ │ │ │ │ │ ├── CrmContactBusinessReqVO.java
│ │ │ │ │ │ ├── CrmContactPageReqVO.java
│ │ │ │ │ │ ├── CrmContactRespVO.java
│ │ │ │ │ │ ├── CrmContactSaveReqVO.java
│ │ │ │ │ │ └── CrmContactTransferReqVO.java
│ │ │ │ │ ├── contract/
│ │ │ │ │ │ ├── CrmContractConfigController.java
│ │ │ │ │ │ ├── CrmContractController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── CrmContractConfigRespVO.java
│ │ │ │ │ │ │ └── CrmContractConfigSaveReqVO.java
│ │ │ │ │ │ └── contract/
│ │ │ │ │ │ ├── CrmContractPageReqVO.java
│ │ │ │ │ │ ├── CrmContractRespVO.java
│ │ │ │ │ │ ├── CrmContractSaveReqVO.java
│ │ │ │ │ │ └── CrmContractTransferReqVO.java
│ │ │ │ │ ├── customer/
│ │ │ │ │ │ ├── CrmCustomerController.java
│ │ │ │ │ │ ├── CrmCustomerLimitConfigController.java
│ │ │ │ │ │ ├── CrmCustomerPoolConfigController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── customer/
│ │ │ │ │ │ │ ├── CrmCustomerDistributeReqVO.java
│ │ │ │ │ │ │ ├── CrmCustomerImportExcelVO.java
│ │ │ │ │ │ │ ├── CrmCustomerImportReqVO.java
│ │ │ │ │ │ │ ├── CrmCustomerImportRespVO.java
│ │ │ │ │ │ │ ├── CrmCustomerLockReqVO.java
│ │ │ │ │ │ │ ├── CrmCustomerPageReqVO.java
│ │ │ │ │ │ │ ├── CrmCustomerRespVO.java
│ │ │ │ │ │ │ ├── CrmCustomerSaveReqVO.java
│ │ │ │ │ │ │ └── CrmCustomerTransferReqVO.java
│ │ │ │ │ │ ├── limitconfig/
│ │ │ │ │ │ │ ├── CrmCustomerLimitConfigPageReqVO.java
│ │ │ │ │ │ │ ├── CrmCustomerLimitConfigRespVO.java
│ │ │ │ │ │ │ └── CrmCustomerLimitConfigSaveReqVO.java
│ │ │ │ │ │ └── poolconfig/
│ │ │ │ │ │ ├── CrmCustomerPoolConfigRespVO.java
│ │ │ │ │ │ └── CrmCustomerPoolConfigSaveReqVO.java
│ │ │ │ │ ├── followup/
│ │ │ │ │ │ ├── CrmFollowUpRecordController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── CrmFollowUpRecordPageReqVO.java
│ │ │ │ │ │ ├── CrmFollowUpRecordRespVO.java
│ │ │ │ │ │ └── CrmFollowUpRecordSaveReqVO.java
│ │ │ │ │ ├── operatelog/
│ │ │ │ │ │ ├── CrmOperateLogController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── CrmOperateLogPageReqVO.java
│ │ │ │ │ │ └── CrmOperateLogRespVO.java
│ │ │ │ │ ├── permission/
│ │ │ │ │ │ ├── CrmPermissionController.http
│ │ │ │ │ │ ├── CrmPermissionController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── CrmPermissionRespVO.java
│ │ │ │ │ │ ├── CrmPermissionSaveReqVO.java
│ │ │ │ │ │ └── CrmPermissionUpdateReqVO.java
│ │ │ │ │ ├── product/
│ │ │ │ │ │ ├── CrmProductCategoryController.java
│ │ │ │ │ │ ├── CrmProductController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── category/
│ │ │ │ │ │ │ ├── CrmProductCategoryCreateReqVO.java
│ │ │ │ │ │ │ ├── CrmProductCategoryListReqVO.java
│ │ │ │ │ │ │ └── CrmProductCategoryRespVO.java
│ │ │ │ │ │ └── product/
│ │ │ │ │ │ ├── CrmProductPageReqVO.java
│ │ │ │ │ │ ├── CrmProductRespVO.java
│ │ │ │ │ │ └── CrmProductSaveReqVO.java
│ │ │ │ │ ├── receivable/
│ │ │ │ │ │ ├── CrmReceivableController.java
│ │ │ │ │ │ ├── CrmReceivablePlanController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── plan/
│ │ │ │ │ │ │ ├── CrmReceivablePlanPageReqVO.java
│ │ │ │ │ │ │ ├── CrmReceivablePlanRespVO.java
│ │ │ │ │ │ │ └── CrmReceivablePlanSaveReqVO.java
│ │ │ │ │ │ └── receivable/
│ │ │ │ │ │ ├── CrmReceivablePageReqVO.java
│ │ │ │ │ │ ├── CrmReceivableRespVO.java
│ │ │ │ │ │ └── CrmReceivableSaveReqVO.java
│ │ │ │ │ └── statistics/
│ │ │ │ │ ├── CrmStatisticsCustomerController.http
│ │ │ │ │ ├── CrmStatisticsCustomerController.java
│ │ │ │ │ ├── CrmStatisticsFunnelController.java
│ │ │ │ │ ├── CrmStatisticsPerformanceController.java
│ │ │ │ │ ├── CrmStatisticsPortraitController.java
│ │ │ │ │ ├── CrmStatisticsRankController.http
│ │ │ │ │ ├── CrmStatisticsRankController.java
│ │ │ │ │ └── vo/
│ │ │ │ │ ├── customer/
│ │ │ │ │ │ ├── CrmStatisticsCustomerByUserBaseRespVO.java
│ │ │ │ │ │ ├── CrmStatisticsCustomerContractSummaryRespVO.java
│ │ │ │ │ │ ├── CrmStatisticsCustomerDealCycleByAreaRespVO.java
│ │ │ │ │ │ ├── CrmStatisticsCustomerDealCycleByDateRespVO.java
│ │ │ │ │ │ ├── CrmStatisticsCustomerDealCycleByProductRespVO.java
│ │ │ │ │ │ ├── CrmStatisticsCustomerDealCycleByUserRespVO.java
│ │ │ │ │ │ ├── CrmStatisticsCustomerReqVO.java
│ │ │ │ │ │ ├── CrmStatisticsCustomerSummaryByDateRespVO.java
│ │ │ │ │ │ ├── CrmStatisticsCustomerSummaryByUserRespVO.java
│ │ │ │ │ │ ├── CrmStatisticsFollowUpSummaryByDateRespVO.java
│ │ │ │ │ │ ├── CrmStatisticsFollowUpSummaryByTypeRespVO.java
│ │ │ │ │ │ ├── CrmStatisticsFollowUpSummaryByUserRespVO.java
│ │ │ │ │ │ ├── CrmStatisticsPoolSummaryByDateRespVO.java
│ │ │ │ │ │ └── CrmStatisticsPoolSummaryByUserRespVO.java
│ │ │ │ │ ├── funnel/
│ │ │ │ │ │ ├── CrmStatisticFunnelSummaryRespVO.java
│ │ │ │ │ │ ├── CrmStatisticsBusinessInversionRateSummaryByDateRespVO.java
│ │ │ │ │ │ ├── CrmStatisticsBusinessSummaryByDateRespVO.java
│ │ │ │ │ │ ├── CrmStatisticsBusinessSummaryByEndStatusRespVO.java
│ │ │ │ │ │ └── CrmStatisticsFunnelReqVO.java
│ │ │ │ │ ├── performance/
│ │ │ │ │ │ ├── CrmStatisticsPerformanceReqVO.java
│ │ │ │ │ │ └── CrmStatisticsPerformanceRespVO.java
│ │ │ │ │ ├── portrait/
│ │ │ │ │ │ ├── CrmStatisticCustomerAreaRespVO.java
│ │ │ │ │ │ ├── CrmStatisticCustomerIndustryRespVO.java
│ │ │ │ │ │ ├── CrmStatisticCustomerLevelRespVO.java
│ │ │ │ │ │ ├── CrmStatisticCustomerSourceRespVO.java
│ │ │ │ │ │ └── CrmStatisticsPortraitReqVO.java
│ │ │ │ │ └── rank/
│ │ │ │ │ ├── CrmStatisticsRankReqVO.java
│ │ │ │ │ └── CrmStatisticsRankRespVO.java
│ │ │ │ ├── app/
│ │ │ │ │ └── package-info.java
│ │ │ │ └── package-info.java
│ │ │ ├── convert/
│ │ │ │ ├── package-info.java
│ │ │ │ └── 《芋道 Spring Boot 对象转换 MapStruct 入门》.md
│ │ │ ├── dal/
│ │ │ │ ├── dataobject/
│ │ │ │ │ ├── business/
│ │ │ │ │ │ ├── CrmBusinessDO.java
│ │ │ │ │ │ ├── CrmBusinessProductDO.java
│ │ │ │ │ │ ├── CrmBusinessStatusDO.java
│ │ │ │ │ │ └── CrmBusinessStatusTypeDO.java
│ │ │ │ │ ├── clue/
│ │ │ │ │ │ ├── CrmClueDO.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ ├── contact/
│ │ │ │ │ │ ├── CrmContactBusinessDO.java
│ │ │ │ │ │ ├── CrmContactDO.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ ├── contract/
│ │ │ │ │ │ ├── CrmContractConfigDO.java
│ │ │ │ │ │ ├── CrmContractDO.java
│ │ │ │ │ │ └── CrmContractProductDO.java
│ │ │ │ │ ├── customer/
│ │ │ │ │ │ ├── CrmCustomerDO.java
│ │ │ │ │ │ ├── CrmCustomerLimitConfigDO.java
│ │ │ │ │ │ └── CrmCustomerPoolConfigDO.java
│ │ │ │ │ ├── followup/
│ │ │ │ │ │ └── CrmFollowUpRecordDO.java
│ │ │ │ │ ├── permission/
│ │ │ │ │ │ └── CrmPermissionDO.java
│ │ │ │ │ ├── product/
│ │ │ │ │ │ ├── CrmProductCategoryDO.java
│ │ │ │ │ │ ├── CrmProductDO.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ └── receivable/
│ │ │ │ │ ├── CrmReceivableDO.java
│ │ │ │ │ └── CrmReceivablePlanDO.java
│ │ │ │ ├── mysql/
│ │ │ │ │ ├── business/
│ │ │ │ │ │ ├── CrmBusinessMapper.java
│ │ │ │ │ │ ├── CrmBusinessProductMapper.java
│ │ │ │ │ │ ├── CrmBusinessStatusMapper.java
│ │ │ │ │ │ └── CrmBusinessStatusTypeMapper.java
│ │ │ │ │ ├── clue/
│ │ │ │ │ │ ├── CrmClueMapper.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ ├── contact/
│ │ │ │ │ │ ├── CrmContactBusinessMapper.java
│ │ │ │ │ │ └── CrmContactMapper.java
│ │ │ │ │ ├── contract/
│ │ │ │ │ │ ├── CrmContractConfigMapper.java
│ │ │ │ │ │ ├── CrmContractMapper.java
│ │ │ │ │ │ └── CrmContractProductMapper.java
│ │ │ │ │ ├── customer/
│ │ │ │ │ │ ├── CrmCustomerLimitConfigMapper.java
│ │ │ │ │ │ ├── CrmCustomerMapper.java
│ │ │ │ │ │ └── CrmCustomerPoolConfigMapper.java
│ │ │ │ │ ├── followup/
│ │ │ │ │ │ └── CrmFollowUpRecordMapper.java
│ │ │ │ │ ├── permission/
│ │ │ │ │ │ ├── CrmPermissionMapper.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ ├── product/
│ │ │ │ │ │ ├── CrmProductCategoryMapper.java
│ │ │ │ │ │ └── CrmProductMapper.java
│ │ │ │ │ ├── receivable/
│ │ │ │ │ │ ├── CrmReceivableMapper.java
│ │ │ │ │ │ └── CrmReceivablePlanMapper.java
│ │ │ │ │ └── statistics/
│ │ │ │ │ ├── CrmStatisticsCustomerMapper.java
│ │ │ │ │ ├── CrmStatisticsFunnelMapper.java
│ │ │ │ │ ├── CrmStatisticsPerformanceMapper.java
│ │ │ │ │ ├── CrmStatisticsPortraitMapper.java
│ │ │ │ │ └── CrmStatisticsRankMapper.java
│ │ │ │ └── redis/
│ │ │ │ ├── RedisKeyConstants.java
│ │ │ │ └── no/
│ │ │ │ └── CrmNoRedisDAO.java
│ │ │ ├── framework/
│ │ │ │ ├── excel/
│ │ │ │ │ ├── core/
│ │ │ │ │ │ └── AreaExcelColumnSelectFunction.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── operatelog/
│ │ │ │ │ ├── core/
│ │ │ │ │ │ ├── CrmBusinessParseFunction.java
│ │ │ │ │ │ ├── CrmContactParseFunction.java
│ │ │ │ │ │ ├── CrmContractParseFunction.java
│ │ │ │ │ │ ├── CrmCustomerIndustryParseFunction.java
│ │ │ │ │ │ ├── CrmCustomerLevelParseFunction.java
│ │ │ │ │ │ ├── CrmCustomerParseFunction.java
│ │ │ │ │ │ ├── CrmCustomerSourceParseFunction.java
│ │ │ │ │ │ ├── CrmProductStatusParseFunction.java
│ │ │ │ │ │ ├── CrmProductUnitParseFunction.java
│ │ │ │ │ │ ├── CrmReceivablePlanParseFunction.java
│ │ │ │ │ │ ├── CrmReceivableReturnTypeParseFunction.java
│ │ │ │ │ │ ├── SysAdminUserParseFunction.java
│ │ │ │ │ │ ├── SysAreaParseFunction.java
│ │ │ │ │ │ ├── SysBooleanParseFunction.java
│ │ │ │ │ │ ├── SysDeptParseFunction.java
│ │ │ │ │ │ └── SysSexParseFunction.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── package-info.java
│ │ │ │ ├── permission/
│ │ │ │ │ ├── core/
│ │ │ │ │ │ ├── annotations/
│ │ │ │ │ │ │ └── CrmPermission.java
│ │ │ │ │ │ ├── aop/
│ │ │ │ │ │ │ └── CrmPermissionAspect.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── rpc/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── RpcConfiguration.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── security/
│ │ │ │ ├── config/
│ │ │ │ │ └── SecurityConfiguration.java
│ │ │ │ └── core/
│ │ │ │ └── package-info.java
│ │ │ ├── job/
│ │ │ │ ├── customer/
│ │ │ │ │ └── CrmCustomerAutoPutPoolJob.java
│ │ │ │ └── package-info.java
│ │ │ ├── package-info.java
│ │ │ ├── service/
│ │ │ │ ├── business/
│ │ │ │ │ ├── CrmBusinessService.java
│ │ │ │ │ ├── CrmBusinessServiceImpl.java
│ │ │ │ │ ├── CrmBusinessStatusService.java
│ │ │ │ │ └── CrmBusinessStatusServiceImpl.java
│ │ │ │ ├── clue/
│ │ │ │ │ ├── CrmClueService.java
│ │ │ │ │ └── CrmClueServiceImpl.java
│ │ │ │ ├── contact/
│ │ │ │ │ ├── CrmContactBusinessService.java
│ │ │ │ │ ├── CrmContactBusinessServiceImpl.java
│ │ │ │ │ ├── CrmContactService.java
│ │ │ │ │ └── CrmContactServiceImpl.java
│ │ │ │ ├── contract/
│ │ │ │ │ ├── CrmContractConfigService.java
│ │ │ │ │ ├── CrmContractConfigServiceImpl.java
│ │ │ │ │ ├── CrmContractService.java
│ │ │ │ │ ├── CrmContractServiceImpl.java
│ │ │ │ │ └── listener/
│ │ │ │ │ └── CrmContractStatusListener.java
│ │ │ │ ├── customer/
│ │ │ │ │ ├── CrmCustomerLimitConfigService.java
│ │ │ │ │ ├── CrmCustomerLimitConfigServiceImpl.java
│ │ │ │ │ ├── CrmCustomerPoolConfigService.java
│ │ │ │ │ ├── CrmCustomerPoolConfigServiceImpl.java
│ │ │ │ │ ├── CrmCustomerService.java
│ │ │ │ │ ├── CrmCustomerServiceImpl.java
│ │ │ │ │ └── bo/
│ │ │ │ │ └── CrmCustomerCreateReqBO.java
│ │ │ │ ├── followup/
│ │ │ │ │ ├── CrmFollowUpRecordService.java
│ │ │ │ │ ├── CrmFollowUpRecordServiceImpl.java
│ │ │ │ │ └── bo/
│ │ │ │ │ └── CrmFollowUpCreateReqBO.java
│ │ │ │ ├── permission/
│ │ │ │ │ ├── CrmPermissionService.java
│ │ │ │ │ ├── CrmPermissionServiceImpl.java
│ │ │ │ │ └── bo/
│ │ │ │ │ ├── CrmPermissionCreateReqBO.java
│ │ │ │ │ └── CrmPermissionTransferReqBO.java
│ │ │ │ ├── product/
│ │ │ │ │ ├── CrmProductCategoryService.java
│ │ │ │ │ ├── CrmProductCategoryServiceImpl.java
│ │ │ │ │ ├── CrmProductService.java
│ │ │ │ │ └── CrmProductServiceImpl.java
│ │ │ │ ├── receivable/
│ │ │ │ │ ├── CrmReceivablePlanService.java
│ │ │ │ │ ├── CrmReceivablePlanServiceImpl.java
│ │ │ │ │ ├── CrmReceivableService.java
│ │ │ │ │ ├── CrmReceivableServiceImpl.java
│ │ │ │ │ └── listener/
│ │ │ │ │ └── CrmReceivableStatusListener.java
│ │ │ │ └── statistics/
│ │ │ │ ├── CrmStatisticsCustomerService.java
│ │ │ │ ├── CrmStatisticsCustomerServiceImpl.java
│ │ │ │ ├── CrmStatisticsFunnelService.java
│ │ │ │ ├── CrmStatisticsFunnelServiceImpl.java
│ │ │ │ ├── CrmStatisticsPerformanceService.java
│ │ │ │ ├── CrmStatisticsPerformanceServiceImpl.java
│ │ │ │ ├── CrmStatisticsPortraitService.java
│ │ │ │ ├── CrmStatisticsPortraitServiceImpl.java
│ │ │ │ ├── CrmStatisticsRankService.java
│ │ │ │ └── CrmStatisticsRankServiceImpl.java
│ │ │ └── util/
│ │ │ ├── CrmAuditStatusUtils.java
│ │ │ └── CrmPermissionUtils.java
│ │ └── resources/
│ │ ├── application-dev.yaml
│ │ ├── application-local.yaml
│ │ ├── application.yaml
│ │ ├── logback-spring.xml
│ │ └── mapper/
│ │ └── statistics/
│ │ ├── CrmStatisticsCustomerMapper.xml
│ │ ├── CrmStatisticsFunnelMapper.xml
│ │ ├── CrmStatisticsPerformanceMapper.xml
│ │ ├── CrmStatisticsPortraitMapper.xml
│ │ └── CrmStatisticsRankMapper.xml
│ └── test/
│ └── resources/
│ ├── application-unit-test.yaml
│ └── logback.xml
├── yudao-module-erp/
│ ├── pom.xml
│ ├── yudao-module-erp-api/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── cn/
│ │ └── iocoder/
│ │ └── yudao/
│ │ └── module/
│ │ └── erp/
│ │ ├── api/
│ │ │ └── package-info.java
│ │ └── enums/
│ │ ├── ApiConstants.java
│ │ ├── DictTypeConstants.java
│ │ ├── ErpAuditStatus.java
│ │ ├── ErrorCodeConstants.java
│ │ ├── LogRecordConstants.java
│ │ ├── common/
│ │ │ └── ErpBizTypeEnum.java
│ │ └── stock/
│ │ └── ErpStockRecordBizTypeEnum.java
│ └── yudao-module-erp-server/
│ ├── Dockerfile
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cn/
│ │ └── iocoder/
│ │ └── yudao/
│ │ └── module/
│ │ └── erp/
│ │ ├── ErpServerApplication.java
│ │ ├── controller/
│ │ │ ├── admin/
│ │ │ │ ├── finance/
│ │ │ │ │ ├── ErpAccountController.java
│ │ │ │ │ ├── ErpFinancePaymentController.java
│ │ │ │ │ ├── ErpFinanceReceiptController.java
│ │ │ │ │ └── vo/
│ │ │ │ │ ├── account/
│ │ │ │ │ │ ├── ErpAccountPageReqVO.java
│ │ │ │ │ │ ├── ErpAccountRespVO.java
│ │ │ │ │ │ └── ErpAccountSaveReqVO.java
│ │ │ │ │ ├── payment/
│ │ │ │ │ │ ├── ErpFinancePaymentPageReqVO.java
│ │ │ │ │ │ ├── ErpFinancePaymentRespVO.java
│ │ │ │ │ │ └── ErpFinancePaymentSaveReqVO.java
│ │ │ │ │ └── receipt/
│ │ │ │ │ ├── ErpFinanceReceiptPageReqVO.java
│ │ │ │ │ ├── ErpFinanceReceiptRespVO.java
│ │ │ │ │ └── ErpFinanceReceiptSaveReqVO.java
│ │ │ │ ├── product/
│ │ │ │ │ ├── ErpProductCategoryController.java
│ │ │ │ │ ├── ErpProductController.java
│ │ │ │ │ ├── ErpProductUnitController.java
│ │ │ │ │ └── vo/
│ │ │ │ │ ├── category/
│ │ │ │ │ │ ├── ErpProductCategoryListReqVO.java
│ │ │ │ │ │ ├── ErpProductCategoryRespVO.java
│ │ │ │ │ │ └── ErpProductCategorySaveReqVO.java
│ │ │ │ │ ├── product/
│ │ │ │ │ │ ├── ErpProductPageReqVO.java
│ │ │ │ │ │ ├── ErpProductRespVO.java
│ │ │ │ │ │ └── ProductSaveReqVO.java
│ │ │ │ │ └── unit/
│ │ │ │ │ ├── ErpProductUnitPageReqVO.java
│ │ │ │ │ ├── ErpProductUnitRespVO.java
│ │ │ │ │ └── ErpProductUnitSaveReqVO.java
│ │ │ │ ├── purchase/
│ │ │ │ │ ├── ErpPurchaseInController.java
│ │ │ │ │ ├── ErpPurchaseOrderController.java
│ │ │ │ │ ├── ErpPurchaseReturnController.java
│ │ │ │ │ ├── ErpSupplierController.java
│ │ │ │ │ └── vo/
│ │ │ │ │ ├── in/
│ │ │ │ │ │ ├── ErpPurchaseInPageReqVO.java
│ │ │ │ │ │ ├── ErpPurchaseInRespVO.java
│ │ │ │ │ │ └── ErpPurchaseInSaveReqVO.java
│ │ │ │ │ ├── order/
│ │ │ │ │ │ ├── ErpPurchaseOrderPageReqVO.java
│ │ │ │ │ │ ├── ErpPurchaseOrderRespVO.java
│ │ │ │ │ │ └── ErpPurchaseOrderSaveReqVO.java
│ │ │ │ │ ├── returns/
│ │ │ │ │ │ ├── ErpPurchaseReturnPageReqVO.java
│ │ │ │ │ │ ├── ErpPurchaseReturnRespVO.java
│ │ │ │ │ │ └── ErpPurchaseReturnSaveReqVO.java
│ │ │ │ │ └── supplier/
│ │ │ │ │ ├── ErpSupplierPageReqVO.java
│ │ │ │ │ ├── ErpSupplierRespVO.java
│ │ │ │ │ └── ErpSupplierSaveReqVO.java
│ │ │ │ ├── sale/
│ │ │ │ │ ├── ErpCustomerController.java
│ │ │ │ │ ├── ErpSaleOrderController.java
│ │ │ │ │ ├── ErpSaleOutController.java
│ │ │ │ │ ├── ErpSaleReturnController.java
│ │ │ │ │ └── vo/
│ │ │ │ │ ├── customer/
│ │ │ │ │ │ ├── ErpCustomerPageReqVO.java
│ │ │ │ │ │ ├── ErpCustomerRespVO.java
│ │ │ │ │ │ └── ErpCustomerSaveReqVO.java
│ │ │ │ │ ├── order/
│ │ │ │ │ │ ├── ErpSaleOrderPageReqVO.java
│ │ │ │ │ │ ├── ErpSaleOrderRespVO.java
│ │ │ │ │ │ └── ErpSaleOrderSaveReqVO.java
│ │ │ │ │ ├── out/
│ │ │ │ │ │ ├── ErpSaleOutPageReqVO.java
│ │ │ │ │ │ ├── ErpSaleOutRespVO.java
│ │ │ │ │ │ └── ErpSaleOutSaveReqVO.java
│ │ │ │ │ └── returns/
│ │ │ │ │ ├── ErpSaleReturnPageReqVO.java
│ │ │ │ │ ├── ErpSaleReturnRespVO.java
│ │ │ │ │ └── ErpSaleReturnSaveReqVO.java
│ │ │ │ ├── statistics/
│ │ │ │ │ ├── ErpPurchaseStatisticsController.java
│ │ │ │ │ ├── ErpSaleStatisticsController.http
│ │ │ │ │ ├── ErpSaleStatisticsController.java
│ │ │ │ │ └── vo/
│ │ │ │ │ ├── purchase/
│ │ │ │ │ │ ├── ErpPurchaseSummaryRespVO.java
│ │ │ │ │ │ └── ErpPurchaseTimeSummaryRespVO.java
│ │ │ │ │ └── sale/
│ │ │ │ │ ├── ErpSaleSummaryRespVO.java
│ │ │ │ │ └── ErpSaleTimeSummaryRespVO.java
│ │ │ │ └── stock/
│ │ │ │ ├── ErpStockCheckController.java
│ │ │ │ ├── ErpStockController.java
│ │ │ │ ├── ErpStockInController.java
│ │ │ │ ├── ErpStockMoveController.java
│ │ │ │ ├── ErpStockOutController.java
│ │ │ │ ├── ErpStockRecordController.java
│ │ │ │ ├── ErpWarehouseController.java
│ │ │ │ └── vo/
│ │ │ │ ├── check/
│ │ │ │ │ ├── ErpStockCheckPageReqVO.java
│ │ │ │ │ ├── ErpStockCheckRespVO.java
│ │ │ │ │ └── ErpStockCheckSaveReqVO.java
│ │ │ │ ├── in/
│ │ │ │ │ ├── ErpStockInPageReqVO.java
│ │ │ │ │ ├── ErpStockInRespVO.java
│ │ │ │ │ └── ErpStockInSaveReqVO.java
│ │ │ │ ├── move/
│ │ │ │ │ ├── ErpStockMovePageReqVO.java
│ │ │ │ │ ├── ErpStockMoveRespVO.java
│ │ │ │ │ └── ErpStockMoveSaveReqVO.java
│ │ │ │ ├── out/
│ │ │ │ │ ├── ErpStockOutPageReqVO.java
│ │ │ │ │ ├── ErpStockOutRespVO.java
│ │ │ │ │ └── ErpStockOutSaveReqVO.java
│ │ │ │ ├── record/
│ │ │ │ │ ├── ErpStockRecordPageReqVO.java
│ │ │ │ │ └── ErpStockRecordRespVO.java
│ │ │ │ ├── stock/
│ │ │ │ │ ├── ErpStockPageReqVO.java
│ │ │ │ │ └── ErpStockRespVO.java
│ │ │ │ └── warehouse/
│ │ │ │ ├── ErpWarehousePageReqVO.java
│ │ │ │ ├── ErpWarehouseRespVO.java
│ │ │ │ └── ErpWarehouseSaveReqVO.java
│ │ │ └── package-info.java
│ │ ├── dal/
│ │ │ ├── dataobject/
│ │ │ │ ├── finance/
│ │ │ │ │ ├── ErpAccountDO.java
│ │ │ │ │ ├── ErpFinancePaymentDO.java
│ │ │ │ │ ├── ErpFinancePaymentItemDO.java
│ │ │ │ │ ├── ErpFinanceReceiptDO.java
│ │ │ │ │ └── ErpFinanceReceiptItemDO.java
│ │ │ │ ├── product/
│ │ │ │ │ ├── ErpProductCategoryDO.java
│ │ │ │ │ ├── ErpProductDO.java
│ │ │ │ │ └── ErpProductUnitDO.java
│ │ │ │ ├── purchase/
│ │ │ │ │ ├── ErpPurchaseInDO.java
│ │ │ │ │ ├── ErpPurchaseInItemDO.java
│ │ │ │ │ ├── ErpPurchaseOrderDO.java
│ │ │ │ │ ├── ErpPurchaseOrderItemDO.java
│ │ │ │ │ ├── ErpPurchaseReturnDO.java
│ │ │ │ │ ├── ErpPurchaseReturnItemDO.java
│ │ │ │ │ └── ErpSupplierDO.java
│ │ │ │ ├── sale/
│ │ │ │ │ ├── ErpCustomerDO.java
│ │ │ │ │ ├── ErpSaleOrderDO.java
│ │ │ │ │ ├── ErpSaleOrderItemDO.java
│ │ │ │ │ ├── ErpSaleOutDO.java
│ │ │ │ │ ├── ErpSaleOutItemDO.java
│ │ │ │ │ ├── ErpSaleReturnDO.java
│ │ │ │ │ └── ErpSaleReturnItemDO.java
│ │ │ │ └── stock/
│ │ │ │ ├── ErpStockCheckDO.java
│ │ │ │ ├── ErpStockCheckItemDO.java
│ │ │ │ ├── ErpStockDO.java
│ │ │ │ ├── ErpStockInDO.java
│ │ │ │ ├── ErpStockInItemDO.java
│ │ │ │ ├── ErpStockMoveDO.java
│ │ │ │ ├── ErpStockMoveItemDO.java
│ │ │ │ ├── ErpStockOutDO.java
│ │ │ │ ├── ErpStockOutItemDO.java
│ │ │ │ ├── ErpStockRecordDO.java
│ │ │ │ └── ErpWarehouseDO.java
│ │ │ ├── mysql/
│ │ │ │ ├── finance/
│ │ │ │ │ ├── ErpAccountMapper.java
│ │ │ │ │ ├── ErpFinancePaymentItemMapper.java
│ │ │ │ │ ├── ErpFinancePaymentMapper.java
│ │ │ │ │ ├── ErpFinanceReceiptItemMapper.java
│ │ │ │ │ └── ErpFinanceReceiptMapper.java
│ │ │ │ ├── product/
│ │ │ │ │ ├── ErpProductCategoryMapper.java
│ │ │ │ │ ├── ErpProductMapper.java
│ │ │ │ │ └── ErpProductUnitMapper.java
│ │ │ │ ├── purchase/
│ │ │ │ │ ├── ErpPurchaseInItemMapper.java
│ │ │ │ │ ├── ErpPurchaseInMapper.java
│ │ │ │ │ ├── ErpPurchaseOrderItemMapper.java
│ │ │ │ │ ├── ErpPurchaseOrderMapper.java
│ │ │ │ │ ├── ErpPurchaseReturnItemMapper.java
│ │ │ │ │ ├── ErpPurchaseReturnMapper.java
│ │ │ │ │ └── ErpSupplierMapper.java
│ │ │ │ ├── sale/
│ │ │ │ │ ├── ErpCustomerMapper.java
│ │ │ │ │ ├── ErpSaleOrderItemMapper.java
│ │ │ │ │ ├── ErpSaleOrderMapper.java
│ │ │ │ │ ├── ErpSaleOutItemMapper.java
│ │ │ │ │ ├── ErpSaleOutMapper.java
│ │ │ │ │ ├── ErpSaleReturnItemMapper.java
│ │ │ │ │ └── ErpSaleReturnMapper.java
│ │ │ │ ├── statistics/
│ │ │ │ │ ├── ErpPurchaseStatisticsMapper.java
│ │ │ │ │ └── ErpSaleStatisticsMapper.java
│ │ │ │ └── stock/
│ │ │ │ ├── ErpStockCheckItemMapper.java
│ │ │ │ ├── ErpStockCheckMapper.java
│ │ │ │ ├── ErpStockInItemMapper.java
│ │ │ │ ├── ErpStockInMapper.java
│ │ │ │ ├── ErpStockMapper.java
│ │ │ │ ├── ErpStockMoveItemMapper.java
│ │ │ │ ├── ErpStockMoveMapper.java
│ │ │ │ ├── ErpStockOutItemMapper.java
│ │ │ │ ├── ErpStockOutMapper.java
│ │ │ │ ├── ErpStockRecordMapper.java
│ │ │ │ └── ErpWarehouseMapper.java
│ │ │ └── redis/
│ │ │ ├── RedisKeyConstants.java
│ │ │ └── no/
│ │ │ └── ErpNoRedisDAO.java
│ │ ├── framework/
│ │ │ ├── package-info.java
│ │ │ ├── rpc/
│ │ │ │ ├── config/
│ │ │ │ │ └── RpcConfiguration.java
│ │ │ │ └── package-info.java
│ │ │ └── security/
│ │ │ ├── config/
│ │ │ │ └── SecurityConfiguration.java
│ │ │ └── core/
│ │ │ └── package-info.java
│ │ ├── package-info.java
│ │ └── service/
│ │ ├── finance/
│ │ │ ├── ErpAccountService.java
│ │ │ ├── ErpAccountServiceImpl.java
│ │ │ ├── ErpFinancePaymentService.java
│ │ │ ├── ErpFinancePaymentServiceImpl.java
│ │ │ ├── ErpFinanceReceiptService.java
│ │ │ └── ErpFinanceReceiptServiceImpl.java
│ │ ├── product/
│ │ │ ├── ErpProductCategoryService.java
│ │ │ ├── ErpProductCategoryServiceImpl.java
│ │ │ ├── ErpProductService.java
│ │ │ ├── ErpProductServiceImpl.java
│ │ │ ├── ErpProductUnitService.java
│ │ │ └── ErpProductUnitServiceImpl.java
│ │ ├── purchase/
│ │ │ ├── ErpPurchaseInService.java
│ │ │ ├── ErpPurchaseInServiceImpl.java
│ │ │ ├── ErpPurchaseOrderService.java
│ │ │ ├── ErpPurchaseOrderServiceImpl.java
│ │ │ ├── ErpPurchaseReturnService.java
│ │ │ ├── ErpPurchaseReturnServiceImpl.java
│ │ │ ├── ErpSupplierService.java
│ │ │ └── ErpSupplierServiceImpl.java
│ │ ├── sale/
│ │ │ ├── ErpCustomerService.java
│ │ │ ├── ErpCustomerServiceImpl.java
│ │ │ ├── ErpSaleOrderService.java
│ │ │ ├── ErpSaleOrderServiceImpl.java
│ │ │ ├── ErpSaleOutService.java
│ │ │ ├── ErpSaleOutServiceImpl.java
│ │ │ ├── ErpSaleReturnService.java
│ │ │ └── ErpSaleReturnServiceImpl.java
│ │ ├── statistics/
│ │ │ ├── ErpPurchaseStatisticsService.java
│ │ │ ├── ErpPurchaseStatisticsServiceImpl.java
│ │ │ ├── ErpSaleStatisticsService.java
│ │ │ └── ErpSaleStatisticsServiceImpl.java
│ │ └── stock/
│ │ ├── ErpStockCheckService.java
│ │ ├── ErpStockCheckServiceImpl.java
│ │ ├── ErpStockInService.java
│ │ ├── ErpStockInServiceImpl.java
│ │ ├── ErpStockMoveService.java
│ │ ├── ErpStockMoveServiceImpl.java
│ │ ├── ErpStockOutService.java
│ │ ├── ErpStockOutServiceImpl.java
│ │ ├── ErpStockRecordService.java
│ │ ├── ErpStockRecordServiceImpl.java
│ │ ├── ErpStockService.java
│ │ ├── ErpStockServiceImpl.java
│ │ ├── ErpWarehouseService.java
│ │ ├── ErpWarehouseServiceImpl.java
│ │ └── bo/
│ │ └── ErpStockRecordCreateReqBO.java
│ └── resources/
│ ├── application-dev.yaml
│ ├── application-local.yaml
│ ├── application.yaml
│ ├── logback-spring.xml
│ └── mapper/
│ └── statistics/
│ ├── ErpPurchaseStatisticsMapper.xml
│ └── ErpSaleStatisticsMapper.xml
├── yudao-module-infra/
│ ├── pom.xml
│ ├── yudao-module-infra-api/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── cn/
│ │ └── iocoder/
│ │ └── yudao/
│ │ └── module/
│ │ └── infra/
│ │ ├── api/
│ │ │ ├── config/
│ │ │ │ └── ConfigApi.java
│ │ │ ├── file/
│ │ │ │ ├── FileApi.java
│ │ │ │ └── dto/
│ │ │ │ └── FileCreateReqDTO.java
│ │ │ ├── package-info.java
│ │ │ └── websocket/
│ │ │ ├── WebSocketSenderApi.java
│ │ │ └── dto/
│ │ │ └── WebSocketSendReqDTO.java
│ │ └── enums/
│ │ ├── ApiConstants.java
│ │ ├── DictTypeConstants.java
│ │ ├── ErrorCodeConstants.java
│ │ ├── codegen/
│ │ │ ├── CodegenColumnHtmlTypeEnum.java
│ │ │ ├── CodegenColumnListConditionEnum.java
│ │ │ ├── CodegenFrontTypeEnum.java
│ │ │ ├── CodegenSceneEnum.java
│ │ │ ├── CodegenTemplateTypeEnum.java
│ │ │ └── CodegenVOTypeEnum.java
│ │ ├── config/
│ │ │ └── ConfigTypeEnum.java
│ │ ├── logger/
│ │ │ └── ApiErrorLogProcessStatusEnum.java
│ │ └── package-info.java
│ └── yudao-module-infra-server/
│ ├── Dockerfile
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── cn/
│ │ │ └── iocoder/
│ │ │ └── yudao/
│ │ │ └── module/
│ │ │ └── infra/
│ │ │ ├── InfraServerApplication.java
│ │ │ ├── api/
│ │ │ │ ├── config/
│ │ │ │ │ └── ConfigApiImpl.java
│ │ │ │ ├── file/
│ │ │ │ │ └── FileApiImpl.java
│ │ │ │ ├── logger/
│ │ │ │ │ ├── ApiAccessLogApiImpl.java
│ │ │ │ │ └── ApiErrorLogApiImpl.java
│ │ │ │ ├── package-info.java
│ │ │ │ └── websocket/
│ │ │ │ └── WebSocketSenderApiImpl.java
│ │ │ ├── controller/
│ │ │ │ ├── admin/
│ │ │ │ │ ├── codegen/
│ │ │ │ │ │ ├── CodegenController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── CodegenCreateListReqVO.java
│ │ │ │ │ │ ├── CodegenDetailRespVO.java
│ │ │ │ │ │ ├── CodegenPreviewRespVO.java
│ │ │ │ │ │ ├── CodegenUpdateReqVO.java
│ │ │ │ │ │ ├── column/
│ │ │ │ │ │ │ ├── CodegenColumnRespVO.java
│ │ │ │ │ │ │ └── CodegenColumnSaveReqVO.java
│ │ │ │ │ │ └── table/
│ │ │ │ │ │ ├── CodegenTablePageReqVO.java
│ │ │ │ │ │ ├── CodegenTableRespVO.java
│ │ │ │ │ │ ├── CodegenTableSaveReqVO.java
│ │ │ │ │ │ └── DatabaseTableRespVO.java
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── ConfigController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── ConfigPageReqVO.java
│ │ │ │ │ │ ├── ConfigRespVO.java
│ │ │ │ │ │ └── ConfigSaveReqVO.java
│ │ │ │ │ ├── db/
│ │ │ │ │ │ ├── DataSourceConfigController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── DataSourceConfigRespVO.java
│ │ │ │ │ │ └── DataSourceConfigSaveReqVO.java
│ │ │ │ │ ├── demo/
│ │ │ │ │ │ ├── demo01/
│ │ │ │ │ │ │ ├── Demo01ContactController.java
│ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ ├── Demo01ContactPageReqVO.java
│ │ │ │ │ │ │ ├── Demo01ContactRespVO.java
│ │ │ │ │ │ │ └── Demo01ContactSaveReqVO.java
│ │ │ │ │ │ ├── demo02/
│ │ │ │ │ │ │ ├── Demo02CategoryController.java
│ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ ├── Demo02CategoryListReqVO.java
│ │ │ │ │ │ │ ├── Demo02CategoryRespVO.java
│ │ │ │ │ │ │ └── Demo02CategorySaveReqVO.java
│ │ │ │ │ │ ├── demo03/
│ │ │ │ │ │ │ ├── erp/
│ │ │ │ │ │ │ │ ├── Demo03StudentErpController.java
│ │ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ │ ├── Demo03StudentErpPageReqVO.java
│ │ │ │ │ │ │ │ ├── Demo03StudentErpRespVO.java
│ │ │ │ │ │ │ │ └── Demo03StudentErpSaveReqVO.java
│ │ │ │ │ │ │ ├── inner/
│ │ │ │ │ │ │ │ ├── Demo03StudentInnerController.java
│ │ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ │ ├── Demo03StudentInnerPageReqVO.java
│ │ │ │ │ │ │ │ ├── Demo03StudentInnerRespVO.java
│ │ │ │ │ │ │ │ └── Demo03StudentInnerSaveReqVO.java
│ │ │ │ │ │ │ └── normal/
│ │ │ │ │ │ │ ├── Demo03StudentNormalController.java
│ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ ├── Demo03StudentNormalPageReqVO.java
│ │ │ │ │ │ │ ├── Demo03StudentNormalRespVO.java
│ │ │ │ │ │ │ └── Demo03StudentNormalSaveReqVO.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ ├── file/
│ │ │ │ │ │ ├── FileConfigController.http
│ │ │ │ │ │ ├── FileConfigController.java
│ │ │ │ │ │ ├── FileController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── FileConfigPageReqVO.java
│ │ │ │ │ │ │ ├── FileConfigRespVO.java
│ │ │ │ │ │ │ └── FileConfigSaveReqVO.java
│ │ │ │ │ │ └── file/
│ │ │ │ │ │ ├── FileCreateReqVO.java
│ │ │ │ │ │ ├── FilePageReqVO.java
│ │ │ │ │ │ ├── FilePresignedUrlRespVO.java
│ │ │ │ │ │ ├── FileRespVO.java
│ │ │ │ │ │ └── FileUploadReqVO.java
│ │ │ │ │ ├── logger/
│ │ │ │ │ │ ├── ApiAccessLogController.java
│ │ │ │ │ │ ├── ApiErrorLogController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── apiaccesslog/
│ │ │ │ │ │ │ ├── ApiAccessLogPageReqVO.java
│ │ │ │ │ │ │ └── ApiAccessLogRespVO.java
│ │ │ │ │ │ └── apierrorlog/
│ │ │ │ │ │ ├── ApiErrorLogPageReqVO.java
│ │ │ │ │ │ └── ApiErrorLogRespVO.java
│ │ │ │ │ └── redis/
│ │ │ │ │ ├── RedisController.http
│ │ │ │ │ ├── RedisController.java
│ │ │ │ │ └── vo/
│ │ │ │ │ └── RedisMonitorRespVO.java
│ │ │ │ ├── app/
│ │ │ │ │ ├── file/
│ │ │ │ │ │ ├── AppFileController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ └── AppFileUploadReqVO.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── package-info.java
│ │ │ ├── convert/
│ │ │ │ ├── codegen/
│ │ │ │ │ └── CodegenConvert.java
│ │ │ │ ├── config/
│ │ │ │ │ └── ConfigConvert.java
│ │ │ │ ├── file/
│ │ │ │ │ └── FileConfigConvert.java
│ │ │ │ ├── package-info.java
│ │ │ │ ├── redis/
│ │ │ │ │ └── RedisConvert.java
│ │ │ │ └── 《芋道 Spring Boot 对象转换 MapStruct 入门》.md
│ │ │ ├── dal/
│ │ │ │ ├── dataobject/
│ │ │ │ │ ├── codegen/
│ │ │ │ │ │ ├── CodegenColumnDO.java
│ │ │ │ │ │ └── CodegenTableDO.java
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── ConfigDO.java
│ │ │ │ │ ├── db/
│ │ │ │ │ │ └── DataSourceConfigDO.java
│ │ │ │ │ ├── demo/
│ │ │ │ │ │ ├── demo01/
│ │ │ │ │ │ │ └── Demo01ContactDO.java
│ │ │ │ │ │ ├── demo02/
│ │ │ │ │ │ │ └── Demo02CategoryDO.java
│ │ │ │ │ │ └── demo03/
│ │ │ │ │ │ ├── Demo03CourseDO.java
│ │ │ │ │ │ ├── Demo03GradeDO.java
│ │ │ │ │ │ └── Demo03StudentDO.java
│ │ │ │ │ ├── file/
│ │ │ │ │ │ ├── FileConfigDO.java
│ │ │ │ │ │ ├── FileContentDO.java
│ │ │ │ │ │ └── FileDO.java
│ │ │ │ │ └── logger/
│ │ │ │ │ ├── ApiAccessLogDO.java
│ │ │ │ │ └── ApiErrorLogDO.java
│ │ │ │ └── mysql/
│ │ │ │ ├── codegen/
│ │ │ │ │ ├── CodegenColumnMapper.java
│ │ │ │ │ └── CodegenTableMapper.java
│ │ │ │ ├── config/
│ │ │ │ │ └── ConfigMapper.java
│ │ │ │ ├── db/
│ │ │ │ │ └── DataSourceConfigMapper.java
│ │ │ │ ├── demo/
│ │ │ │ │ ├── demo01/
│ │ │ │ │ │ └── Demo01ContactMapper.java
│ │ │ │ │ ├── demo02/
│ │ │ │ │ │ └── Demo02CategoryMapper.java
│ │ │ │ │ └── demo03/
│ │ │ │ │ ├── erp/
│ │ │ │ │ │ ├── Demo03CourseErpMapper.java
│ │ │ │ │ │ ├── Demo03GradeErpMapper.java
│ │ │ │ │ │ └── Demo03StudentErpMapper.java
│ │ │ │ │ ├── inner/
│ │ │ │ │ │ ├── Demo03CourseInnerMapper.java
│ │ │ │ │ │ ├── Demo03GradeInnerMapper.java
│ │ │ │ │ │ └── Demo03StudentInnerMapper.java
│ │ │ │ │ └── normal/
│ │ │ │ │ ├── Demo03CourseNormalMapper.java
│ │ │ │ │ ├── Demo03GradeNormalMapper.java
│ │ │ │ │ └── Demo03StudentNormalMapper.java
│ │ │ │ ├── file/
│ │ │ │ │ ├── FileConfigMapper.java
│ │ │ │ │ ├── FileContentMapper.java
│ │ │ │ │ └── FileMapper.java
│ │ │ │ └── logger/
│ │ │ │ ├── ApiAccessLogMapper.java
│ │ │ │ └── ApiErrorLogMapper.java
│ │ │ ├── framework/
│ │ │ │ ├── codegen/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── CodegenConfiguration.java
│ │ │ │ │ │ └── CodegenProperties.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── file/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── YudaoFileAutoConfiguration.java
│ │ │ │ │ ├── core/
│ │ │ │ │ │ ├── client/
│ │ │ │ │ │ │ ├── AbstractFileClient.java
│ │ │ │ │ │ │ ├── FileClient.java
│ │ │ │ │ │ │ ├── FileClientConfig.java
│ │ │ │ │ │ │ ├── FileClientFactory.java
│ │ │ │ │ │ │ ├── FileClientFactoryImpl.java
│ │ │ │ │ │ │ ├── db/
│ │ │ │ │ │ │ │ ├── DBFileClient.java
│ │ │ │ │ │ │ │ └── DBFileClientConfig.java
│ │ │ │ │ │ │ ├── ftp/
│ │ │ │ │ │ │ │ ├── FtpFileClient.java
│ │ │ │ │ │ │ │ └── FtpFileClientConfig.java
│ │ │ │ │ │ │ ├── local/
│ │ │ │ │ │ │ │ ├── LocalFileClient.java
│ │ │ │ │ │ │ │ └── LocalFileClientConfig.java
│ │ │ │ │ │ │ ├── s3/
│ │ │ │ │ │ │ │ ├── S3FileClient.java
│ │ │ │ │ │ │ │ └── S3FileClientConfig.java
│ │ │ │ │ │ │ └── sftp/
│ │ │ │ │ │ │ ├── SftpFileClient.java
│ │ │ │ │ │ │ └── SftpFileClientConfig.java
│ │ │ │ │ │ ├── enums/
│ │ │ │ │ │ │ └── FileStorageEnum.java
│ │ │ │ │ │ └── utils/
│ │ │ │ │ │ └── FileTypeUtils.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── monitor/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── AdminServerConfiguration.java
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ └── 《芋道 Spring Boot 监控工具 Admin 入门》.md
│ │ │ │ ├── package-info.java
│ │ │ │ ├── rpc/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── RpcConfiguration.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── security/
│ │ │ │ ├── config/
│ │ │ │ │ └── SecurityConfiguration.java
│ │ │ │ └── core/
│ │ │ │ └── package-info.java
│ │ │ ├── job/
│ │ │ │ ├── logger/
│ │ │ │ │ ├── AccessLogCleanJob.java
│ │ │ │ │ └── ErrorLogCleanJob.java
│ │ │ │ └── package-info.java
│ │ │ ├── mq/
│ │ │ │ ├── consumer/
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── message/
│ │ │ │ │ └── package-info.java
│ │ │ │ └── producer/
│ │ │ │ └── package-info.java
│ │ │ ├── package-info.java
│ │ │ ├── service/
│ │ │ │ ├── codegen/
│ │ │ │ │ ├── CodegenService.java
│ │ │ │ │ ├── CodegenServiceImpl.java
│ │ │ │ │ └── inner/
│ │ │ │ │ ├── CodegenBuilder.java
│ │ │ │ │ └── CodegenEngine.java
│ │ │ │ ├── config/
│ │ │ │ │ ├── ConfigService.java
│ │ │ │ │ └── ConfigServiceImpl.java
│ │ │ │ ├── db/
│ │ │ │ │ ├── DataSourceConfigService.java
│ │ │ │ │ ├── DataSourceConfigServiceImpl.java
│ │ │ │ │ ├── DatabaseTableService.java
│ │ │ │ │ └── DatabaseTableServiceImpl.java
│ │ │ │ ├── demo/
│ │ │ │ │ ├── demo01/
│ │ │ │ │ │ ├── Demo01ContactService.java
│ │ │ │ │ │ └── Demo01ContactServiceImpl.java
│ │ │ │ │ ├── demo02/
│ │ │ │ │ │ ├── Demo02CategoryService.java
│ │ │ │ │ │ └── Demo02CategoryServiceImpl.java
│ │ │ │ │ └── demo03/
│ │ │ │ │ ├── erp/
│ │ │ │ │ │ ├── Demo03StudentErpService.java
│ │ │ │ │ │ └── Demo03StudentErpServiceImpl.java
│ │ │ │ │ ├── inner/
│ │ │ │ │ │ ├── Demo03StudentInnerService.java
│ │ │ │ │ │ └── Demo03StudentInnerServiceImpl.java
│ │ │ │ │ └── normal/
│ │ │ │ │ ├── Demo03StudentNormalService.java
│ │ │ │ │ └── Demo03StudentNormalServiceImpl.java
│ │ │ │ ├── file/
│ │ │ │ │ ├── FileConfigService.java
│ │ │ │ │ ├── FileConfigServiceImpl.java
│ │ │ │ │ ├── FileService.java
│ │ │ │ │ └── FileServiceImpl.java
│ │ │ │ └── logger/
│ │ │ │ ├── ApiAccessLogService.java
│ │ │ │ ├── ApiAccessLogServiceImpl.java
│ │ │ │ ├── ApiErrorLogService.java
│ │ │ │ └── ApiErrorLogServiceImpl.java
│ │ │ └── websocket/
│ │ │ ├── DemoWebSocketMessageListener.java
│ │ │ └── message/
│ │ │ ├── DemoReceiveMessage.java
│ │ │ └── DemoSendMessage.java
│ │ └── resources/
│ │ ├── application-dev.yaml
│ │ ├── application-local.yaml
│ │ ├── application.yaml
│ │ ├── codegen/
│ │ │ ├── java/
│ │ │ │ ├── controller/
│ │ │ │ │ ├── controller.vm
│ │ │ │ │ └── vo/
│ │ │ │ │ ├── listReqVO.vm
│ │ │ │ │ ├── pageReqVO.vm
│ │ │ │ │ ├── respVO.vm
│ │ │ │ │ └── saveReqVO.vm
│ │ │ │ ├── dal/
│ │ │ │ │ ├── do.vm
│ │ │ │ │ ├── do_sub.vm
│ │ │ │ │ ├── mapper.vm
│ │ │ │ │ ├── mapper.xml.vm
│ │ │ │ │ └── mapper_sub.vm
│ │ │ │ ├── enums/
│ │ │ │ │ └── errorcode.vm
│ │ │ │ ├── service/
│ │ │ │ │ ├── service.vm
│ │ │ │ │ └── serviceImpl.vm
│ │ │ │ └── test/
│ │ │ │ └── serviceTest.vm
│ │ │ ├── sql/
│ │ │ │ ├── h2.vm
│ │ │ │ └── sql.vm
│ │ │ ├── vue/
│ │ │ │ ├── api/
│ │ │ │ │ └── api.js.vm
│ │ │ │ └── views/
│ │ │ │ ├── components/
│ │ │ │ │ ├── form_sub_erp.vue.vm
│ │ │ │ │ ├── form_sub_inner.vue.vm
│ │ │ │ │ ├── form_sub_normal.vue.vm
│ │ │ │ │ ├── list_sub_erp.vue.vm
│ │ │ │ │ └── list_sub_inner.vue.vm
│ │ │ │ ├── form.vue.vm
│ │ │ │ └── index.vue.vm
│ │ │ ├── vue3/
│ │ │ │ ├── api/
│ │ │ │ │ └── api.ts.vm
│ │ │ │ └── views/
│ │ │ │ ├── components/
│ │ │ │ │ ├── form_sub_erp.vue.vm
│ │ │ │ │ ├── form_sub_inner.vue.vm
│ │ │ │ │ ├── form_sub_normal.vue.vm
│ │ │ │ │ ├── list_sub_erp.vue.vm
│ │ │ │ │ └── list_sub_inner.vue.vm
│ │ │ │ ├── form.vue.vm
│ │ │ │ └── index.vue.vm
│ │ │ ├── vue3_admin_uniapp/
│ │ │ │ ├── components/
│ │ │ │ │ └── search-form.vue.vm
│ │ │ │ └── views/
│ │ │ │ ├── detail/
│ │ │ │ │ └── index.vue.vm
│ │ │ │ ├── form/
│ │ │ │ │ └── index.vue.vm
│ │ │ │ └── index.vue.vm
│ │ │ ├── vue3_vben/
│ │ │ │ ├── api/
│ │ │ │ │ └── api.ts.vm
│ │ │ │ └── views/
│ │ │ │ ├── data.ts.vm
│ │ │ │ ├── form.vue.vm
│ │ │ │ └── index.vue.vm
│ │ │ ├── vue3_vben5_antd/
│ │ │ │ ├── general/
│ │ │ │ │ ├── api/
│ │ │ │ │ │ └── api.ts.vm
│ │ │ │ │ └── views/
│ │ │ │ │ ├── form.vue.vm
│ │ │ │ │ ├── index.vue.vm
│ │ │ │ │ └── modules/
│ │ │ │ │ ├── form_sub_erp.vue.vm
│ │ │ │ │ ├── form_sub_inner.vue.vm
│ │ │ │ │ ├── form_sub_normal.vue.vm
│ │ │ │ │ ├── list_sub_erp.vue.vm
│ │ │ │ │ └── list_sub_inner.vue.vm
│ │ │ │ └── schema/
│ │ │ │ ├── api/
│ │ │ │ │ └── api.ts.vm
│ │ │ │ └── views/
│ │ │ │ ├── data.ts.vm
│ │ │ │ ├── form.vue.vm
│ │ │ │ ├── index.vue.vm
│ │ │ │ └── modules/
│ │ │ │ ├── form_sub_erp.vue.vm
│ │ │ │ ├── form_sub_inner.vue.vm
│ │ │ │ ├── form_sub_normal.vue.vm
│ │ │ │ ├── list_sub_erp.vue.vm
│ │ │ │ └── list_sub_inner.vue.vm
│ │ │ └── vue3_vben5_ele/
│ │ │ ├── general/
│ │ │ │ ├── api/
│ │ │ │ │ └── api.ts.vm
│ │ │ │ └── views/
│ │ │ │ ├── form.vue.vm
│ │ │ │ ├── index.vue.vm
│ │ │ │ └── modules/
│ │ │ │ ├── form_sub_erp.vue.vm
│ │ │ │ ├── form_sub_inner.vue.vm
│ │ │ │ ├── form_sub_normal.vue.vm
│ │ │ │ ├── list_sub_erp.vue.vm
│ │ │ │ └── list_sub_inner.vue.vm
│ │ │ └── schema/
│ │ │ ├── api/
│ │ │ │ └── api.ts.vm
│ │ │ └── views/
│ │ │ ├── data.ts.vm
│ │ │ ├── form.vue.vm
│ │ │ ├── index.vue.vm
│ │ │ └── modules/
│ │ │ ├── form_sub_erp.vue.vm
│ │ │ ├── form_sub_inner.vue.vm
│ │ │ ├── form_sub_normal.vue.vm
│ │ │ ├── list_sub_erp.vue.vm
│ │ │ └── list_sub_inner.vue.vm
│ │ └── logback-spring.xml
│ └── test/
│ ├── java/
│ │ └── cn/
│ │ └── iocoder/
│ │ └── yudao/
│ │ └── module/
│ │ └── infra/
│ │ ├── framework/
│ │ │ └── file/
│ │ │ └── core/
│ │ │ ├── ftp/
│ │ │ │ └── FtpFileClientTest.java
│ │ │ ├── local/
│ │ │ │ └── LocalFileClientTest.java
│ │ │ ├── s3/
│ │ │ │ └── S3FileClientTest.java
│ │ │ └── sftp/
│ │ │ └── SftpFileClientTest.java
│ │ └── service/
│ │ ├── DefaultDatabaseQueryTest.java
│ │ ├── codegen/
│ │ │ ├── CodegenServiceImplTest.java
│ │
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitee/ISSUE_TEMPLATE.zh-CN.md
================================================
碰到问题,请在 <https://gitee.com/zhijiantianya/yudao-cloud/issues> 搜索是否存在相似的 issue。
不按照模板提交的 issue,会被系统自动删除。
### 基本信息
- ruoyi-vue-pro 版本:
- 操作系统:
- 数据库:
### 你猜测可能的原因
(必填)我花费了 2-4 小时自查,发现可能的原因是:xxxxxx
### 复现步骤
第一步,
第二步,
第三步,
### 报错信息
带上必要的截图
================================================
FILE: .github/ISSUE_TEMPLATE/question.md
================================================
---
name: 问题反馈
about: 请详细描述,以便更高快的获得到解决
title: ''
labels: ''
assignees: ''
---
碰到问题,请在 <https://github.com/YunaiV/yudao-cloud/issues> 搜索是否存在相似的 issue。
不按照模板提交的 issue,会被系统自动删除。
### 基本信息
- ruoyi-vue-pro 版本:
- 操作系统:
- 数据库:
### 你猜测可能的原因
(必填)我花费了 2-4 小时自查,发现可能的原因是:xxxxxx
### 复现步骤
第一步,
第二步,
第三步,
### 报错信息
带上必要的截图
================================================
FILE: .github/workflows/maven.yml
================================================
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
name: Java CI with Maven
on:
push:
branches: [ master ]
# pull_request:
# branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
java: [ '8', '11', '17' ]
steps:
- uses: actions/checkout@v2
- name: Set up JDK ${{ matrix.Java }}
uses: actions/setup-java@v2
with:
java-version: ${{ matrix.java }}
distribution: 'temurin'
cache: maven
- name: Build with Maven
run: mvn -B package --file pom.xml -Dmaven.test.skip=true
================================================
FILE: .gitignore
================================================
# 查看更多 .gitignore 配置 -> https://help.github.com/articles/ignoring-files/
target/
!.mvn/wrapper/maven-wrapper.jar
.flattened-pom.xml
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
*.class
target/*
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
/build/
### admin-web ###
# dependencies
**/node_modules
# roadhog-api-doc ignore
/src/utils/request-temp.js
_roadhog-api-doc
# production
/dist
/.vscode
# misc
.DS_Store
npm-debug.log*
yarn-error.log
/coverage
.idea
yarn.lock
package-lock.json
*bak
.vscode
# visual studio code
.history
*.log
functions/mock
.temp/**
# umi
.umi
.umi-production
# screenshot
screenshot
.firebase
sessionStore
================================================
FILE: LICENSE
================================================
The MIT License (MIT)
Copyright (c) 2021 yudao-cloud
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
================================================
FILE: README.md
================================================
<p align="center">
<img src="https://img.shields.io/badge/Spring%20Cloud-2021-blue.svg" alt="Coverage Status">
<img src="https://img.shields.io/badge/Spring%20Boot-2.7.18-blue.svg" alt="Downloads">
<img src="https://img.shields.io/badge/Vue-3.2-blue.svg" alt="Downloads">
<img src="https://img.shields.io/github/license/YunaiV/yudao-cloud" alt="Downloads" />
</p>
**严肃声明:现在、未来都不会有商业版本,所有代码全部开源!!**
**「我喜欢写代码,乐此不疲」**
**「我喜欢做开源,以此为乐」**
我 🐶 在上海艰苦奋斗,早中晚在 top3 大厂认真搬砖,夜里为开源做贡献。
如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。
可参考 [《迁移文档》](https://cloud.iocoder.cn/migrate-module/) ,只需要 5-10 分钟,即可将【完整版】按需迁移到【精简版】
## 🐶 新手必读
* 演示地址【Vue3 + element-plus】:<http://dashboard-vue3.yudao.iocoder.cn>
* 演示地址【Vue3 + vben(ant-design-vue)】:<http://dashboard-vben.yudao.iocoder.cn>
* 演示地址【Vue2 + element-ui】:<http://dashboard.yudao.iocoder.cn>
* 启动文档:<https://cloud.iocoder.cn/quick-start/>
* 视频教程:<https://cloud.iocoder.cn/video/>
## 🐰 版本说明
| 版本 | JDK 8 + Spring Boot 2.7 | JDK 17/21 + Spring Boot 3.2 |
|-----------------------------------------------------------------------|--------------------------------------------------------------------------|--------------------------------------------------------------------------------------|
| 【完整版】[yudao-cloud](https://gitee.com/zhijiantianya/yudao-cloud) | [`master`](https://gitee.com/zhijiantianya/yudao-cloud/tree/master/) 分支 | [`master-jdk17`](https://gitee.com/zhijiantianya/yudao-cloud/tree/master-jdk17/) 分支 |
| 【精简版】[yudao-cloud-mini](https://gitee.com/yudaocode/yudao-cloud-mini) | [`master`](https://gitee.com/yudaocode/yudao-cloud-mini/tree/master/) 分支 | [`master-jdk17`](https://gitee.com/yudaocode/yudao-cloud-mini/tree/master-jdk17/) 分支 |
* 【完整版】:包括系统功能、基础设施、会员中心、数据报表、工作流程、商城系统、微信公众号、CRM、ERP 等功能
* 【精简版】:只包括系统功能、基础设施功能,不包括会员中心、数据报表、工作流程、商城系统、微信公众号、CRM、ERP 等功能
可参考 [《迁移文档》](https://cloud.iocoder.cn/migrate-module/) ,只需要 5-10 分钟,即可将【完整版】按需迁移到【精简版】
## 🐯 平台简介
**芋道**,以开发者为中心,打造中国第一流的快速开发平台,全部开源,个人与企业可 100% 免费使用。
> 有任何问题,或者想要的功能,可以在 _Issues_ 中提给艿艿。
>
> 😜 给项目点点 Star 吧,这对我们真的很重要!

* Java 后端:`master` 分支为 JDK 8 + Spring Boot 2.7,`master-jdk17` 分支为 JDK 17/21 + Spring Boot 3.2
* 管理后台的电脑端:Vue3 提供 [element-plus](https://gitee.com/yudaocode/yudao-ui-admin-vue3)、[vben(ant-design-vue)](https://gitee.com/yudaocode/yudao-ui-admin-vben) 两个版本,Vue2 提供 [element-ui](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/yudao-ui-admin) 版本
* 管理后台的移动端:采用 [uni-app](https://github.com/dcloudio/uni-app) 方案,一份代码多终端适配,同时支持 APP、小程序、H5!
* 后端采用 Spring Cloud Alibaba 微服务架构,注册中心 + 配置中心 Nacos,定时任务 XXL-Job,服务保障 Sentinel,服务网关 Gateway,分布式事务 Seata
* 数据库可使用 MySQL、Oracle、PostgreSQL、SQL Server、MariaDB、国产达梦 DM、TiDB 等,基于 MyBatis Plus、Redis + Redisson 操作
* 消息队列可使用 Event、Redis、RabbitMQ、Kafka、RocketMQ 等
* 权限认证使用 Spring Security & Token & Redis,支持多终端、多种用户的认证系统,支持 SSO 单点登录
* 支持加载动态权限菜单,按钮级别权限控制,Redis 缓存提升性能
* 支持 SaaS 多租户,可自定义每个租户的权限,提供透明化的多租户底层封装
* 工作流使用 Flowable,支持动态表单、在线设计流程、会签 / 或签、多种任务分配方式
* 高效率开发,使用代码生成器可以一键生成 Java、Vue 前后端代码、SQL 脚本、接口文档,支持单表、树表、主子表
* 实时通信,采用 Spring WebSocket 实现,内置 Token 身份校验,支持 WebSocket 集群
* 集成微信小程序、微信公众号、企业微信、钉钉等三方登陆,集成支付宝、微信等支付与退款
* 集成阿里云、腾讯云等短信渠道,集成 MinIO、阿里云、腾讯云、七牛云等云存储服务
* 集成报表设计器、大屏设计器,通过拖拽即可生成酷炫的报表与大屏
## 🐳 项目关系

三个项目的功能对比,可见社区共同整理的 [国产开源项目对比](https://www.yuque.com/xiatian-bsgny/lm0ec1/wqf8mn) 表格。
### 后端项目
| 项目 | Star | 简介 |
|-----------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------|
| [ruoyi-vue-pro](https://gitee.com/zhijiantianya/ruoyi-vue-pro) | [](https://gitee.com/zhijiantianya/ruoyi-vue-pro) [](https://github.com/YunaiV/ruoyi-vue-pro) | 基于 Spring Boot 多模块架构 |
| [yudao-cloud](https://gitee.com/zhijiantianya/yudao-cloud) | [](https://gitee.com/zhijiantianya/yudao-cloud) [](https://github.com/YunaiV/yudao-cloud) | 基于 Spring Cloud 微服务架构 |
| [Spring-Boot-Labs](https://gitee.com/yudaocode/SpringBoot-Labs) | [](https://gitee.com/zhijiantianya/yudao-cloud) [](https://github.com/yudaocode/SpringBoot-Labs) | 系统学习 Spring Boot & Cloud 专栏 |
### 前端项目
| 项目 | Star | 简介 |
|----------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------|
| [yudao-ui-admin-vue3](https://gitee.com/yudaocode/yudao-ui-admin-vue3) | [](https://gitee.com/yudaocode/yudao-ui-admin-vue3) [](https://github.com/yudaocode/yudao-ui-admin-vue3) | 基于 Vue3 + element-plus 实现的管理后台 |
| [yudao-ui-admin-vben](https://gitee.com/yudaocode/yudao-ui-admin-vben) | [](https://gitee.com/yudaocode/yudao-ui-admin-vben) [](https://github.com/yudaocode/yudao-ui-admin-vben) | 基于 Vue3 + vben(ant-design-vue) 实现的管理后台 |
| [yudao-mall-uniapp](https://gitee.com/yudaocode/yudao-mall-uniapp) | [](https://gitee.com/yudaocode/yudao-mall-uniapp) [](https://github.com/yudaocode/yudao-mall-uniapp) | 基于 uni-app 实现的商城小程序 |
| [yudao-ui-admin-vue2](https://gitee.com/yudaocode/yudao-ui-admin-vue2) | [](https://gitee.com/yudaocode/yudao-ui-admin-vue2) [](https://github.com/yudaocode/yudao-ui-admin-vue2) | 基于 Vue2 + element-ui 实现的管理后台 |
| [yudao-ui-admin-uniapp](https://gitee.com/yudaocode/yudao-ui-admin-uniapp) | [](https://gitee.com/yudaocode/yudao-ui-admin-uniapp) [](https://github.com/yudaocode/yudao-ui-admin-uniapp) | 基于 Vue2 + element-ui 实现的管理后台 |
| [yudao-ui-go-view](https://gitee.com/yudaocode/yudao-ui-go-view) | [](https://gitee.com/yudaocode/yudao-ui-go-view) [](https://github.com/yudaocode/yudao-ui-go-view) | 基于 Vue3 + naive-ui 实现的大屏报表 |
## 😎 开源协议
**为什么推荐使用本项目?**
① 本项目采用比 Apache 2.0 更宽松的 [MIT License](https://gitee.com/zhijiantianya/ruoyi-vue-pro/blob/master/LICENSE) 开源协议,个人与企业可 100% 免费使用,不用保留类作者、Copyright 信息。
② 代码全部开源,不会像其他项目一样,只开源部分代码,让你无法了解整个项目的架构设计。[国产开源项目对比](https://www.yuque.com/xiatian-bsgny/lm0ec1/wqf8mn)

③ 代码整洁、架构整洁,遵循《阿里巴巴 Java 开发手册》规范,代码注释详细,113770 行 Java 代码,42462 行代码注释。
## 🤝 项目外包
我们也是接外包滴,如果你有项目想要外包,可以微信联系【**Aix9975**】。
团队包含专业的项目经理、架构师、前端工程师、后端工程师、测试工程师、运维工程师,可以提供全流程的外包服务。
项目可以是商城、SCRM 系统、OA 系统、物流系统、ERP 系统、CMS 系统、HIS 系统、支付系统、IM 聊天、微信公众号、微信小程序等等。
## 🐼 内置功能
系统内置多种多种业务功能,可以用于快速你的业务系统:

* 通用模块(必选):系统功能、基础设施
* 通用模块(可选):工作流程、支付系统、数据报表、会员中心
* 业务系统(按需):ERP 系统、CRM 系统、商城系统、微信公众号、AI 大模型
> 友情提示:本项目基于 RuoYi-Vue 修改,**重构优化**后端的代码,**美化**前端的界面。
>
> * 额外新增的功能,我们使用 🚀 标记。
> * 重新实现的功能,我们使用 ⭐️ 标记。
🙂 所有功能,都通过 **单元测试** 保证高质量。
### 系统功能
| | 功能 | 描述 |
|-----|-------|---------------------------------|
| | 用户管理 | 用户是系统操作者,该功能主要完成系统用户配置 |
| ⭐️ | 在线用户 | 当前系统中活跃用户状态监控,支持手动踢下线 |
| | 角色管理 | 角色菜单权限分配、设置角色按机构进行数据范围权限划分 |
| | 菜单管理 | 配置系统菜单、操作权限、按钮权限标识等,本地缓存提供性能 |
| | 部门管理 | 配置系统组织机构(公司、部门、小组),树结构展现支持数据权限 |
| | 岗位管理 | 配置系统用户所属担任职务 |
| 🚀 | 租户管理 | 配置系统租户,支持 SaaS 场景下的多租户功能 |
| 🚀 | 租户套餐 | 配置租户套餐,自定每个租户的菜单、操作、按钮的权限 |
| | 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护 |
| 🚀 | 短信管理 | 短信渠道、短息模板、短信日志,对接阿里云、腾讯云等主流短信平台 |
| 🚀 | 邮件管理 | 邮箱账号、邮件模版、邮件发送日志,支持所有邮件平台 |
| 🚀 | 站内信 | 系统内的消息通知,提供站内信模版、站内信消息 |
| 🚀 | 操作日志 | 系统正常操作日志记录和查询,集成 Swagger 生成日志内容 |
| ⭐️ | 登录日志 | 系统登录日志记录查询,包含登录异常 |
| 🚀 | 错误码管理 | 系统所有错误码的管理,可在线修改错误提示,无需重启服务 |
| | 通知公告 | 系统通知公告信息发布维护 |
| 🚀 | 敏感词 | 配置系统敏感词,支持标签分组 |
| 🚀 | 应用管理 | 管理 SSO 单点登录的应用,支持多种 OAuth2 授权方式 |
| 🚀 | 地区管理 | 展示省份、城市、区镇等城市信息,支持 IP 对应城市 |

### 工作流程

基于 Flowable 构建,可支持信创(国产)数据库,满足中国特色流程操作:
| BPMN 设计器 | 钉钉/飞书设计器 |
|------------------------------|--------------------------------|
|  |  |
> 历经头部企业生产验证,工作流引擎须标配仿钉钉/飞书 + BPMN 双设计器!!!
>
> 前者支持轻量配置简单流程,后者实现复杂场景深度编排
| 功能列表 | 功能描述 | 是否完成 |
|------------|-------------------------------------------------------------------------------------|------|
| SIMPLE 设计器 | 仿钉钉/飞书设计器,支持拖拽搭建表单流程,10 分钟快速完成审批流程配置 | ✅ |
| BPMN 设计器 | 基于 BPMN 标准开发,适配复杂业务场景,满足多层级审批及流程自动化需求 | ✅ |
| 会签 | 同一个审批节点设置多个人(如 A、B、C 三人,三人会同时收到待办任务),需全部同意之后,审批才可到下一审批节点 | ✅ |
| 或签 | 同一个审批节点设置多个人,任意一个人处理后,就能进入下一个节点 | ✅ |
| 依次审批 | (顺序会签)同一个审批节点设置多个人(如 A、B、C 三人),三人按顺序依次收到待办,即 A 先审批,A 提交后 B 才能审批,需全部同意之后,审批才可到下一审批节点 | ✅ |
| 抄送 | 将审批结果通知给抄送人,同一个审批默认排重,不重复抄送给同一人 | ✅ |
| 驳回 | (退回)将审批重置发送给某节点,重新审批。可驳回至发起人、上一节点、任意节点 | ✅ |
| 转办 | A 转给其 B 审批,B 审批后,进入下一节点 | ✅ |
| 委派 | A 转给其 B 审批,B 审批后,转给 A,A 继续审批后进入下一节点 | ✅ |
| 加签 | 允许当前审批人根据需要,自行增加当前节点的审批人,支持向前、向后加签 | ✅ |
| 减签 | (取消加签)在当前审批人操作之前,减少审批人 | ✅ |
| 撤销 | (取消流程)流程发起人,可以对流程进行撤销处理 | ✅ |
| 终止 | 系统管理员,在任意节点终止流程实例 | ✅ |
| 表单权限 | 支持拖拉拽配置表单,每个审批节点可配置只读、编辑、隐藏权限 | ✅ |
| 超时审批 | 配置超时审批时间,超时后自动触发审批通过、不通过、驳回等操作 | ✅ |
| 自动提醒 | 配置提醒时间,到达时间后自动触发短信、邮箱、站内信等通知提醒,支持自定义重复提醒频次 | ✅ |
| 父子流程 | 主流程设置子流程节点,子流程节点会自动触发子流程。子流程结束后,主流程才会执行(继续往下下执行),支持同步子流程、异步子流程 | ✅ |
| 条件分支 | (排它分支)用于在流程中实现决策,即根据条件选择一个分支执行 | ✅ |
| 并行分支 | 允许将流程分成多条分支,不进行条件判断,所有分支都会执行 | ✅ |
| 包容分支 | (条件分支 + 并行分支的结合体)允许基于条件选择多条分支执行,但如果没有任何一个分支满足条件,则可以选择默认分支 | ✅ |
| 路由分支 | 根据条件选择一个分支执行(重定向到指定配置节点),也可以选择默认分支执行(继续往下执行) | ✅ |
| 触发节点 | 执行到该节点,触发 HTTP 请求、HTTP 回调、更新数据、删除数据等 | ✅ |
| 延迟节点 | 执行到该节点,审批等待一段时间再执行,支持固定时长、固定日期等 | ✅ |
| 拓展设置 | 流程前置/后置通知,节点(任务)前置、后置通知,流程报表,自动审批去重,自定流程编号、标题、摘要,流程报表等 | ✅ |
### 支付系统
| | 功能 | 描述 |
|-----|------|---------------------------|
| 🚀 | 应用信息 | 配置商户的应用信息,对接支付宝、微信等多个支付渠道 |
| 🚀 | 支付订单 | 查看用户发起的支付宝、微信等的【支付】订单 |
| 🚀 | 退款订单 | 查看用户发起的支付宝、微信等的【退款】订单 |
| 🚀 | 回调通知 | 查看支付回调业务的【支付】【退款】的通知结果 |
| 🚀 | 接入示例 | 提供接入支付系统的【支付】【退款】的功能实战 |
### 基础设施
| | 功能 | 描述 |
|-----|-----------|----------------------------------------------|
| 🚀 | 代码生成 | 前后端代码的生成(Java、Vue、SQL、单元测试),支持 CRUD 下载 |
| 🚀 | 系统接口 | 基于 Swagger 自动生成相关的 RESTful API 接口文档 |
| 🚀 | 数据库文档 | 基于 Screw 自动生成数据库文档,支持导出 Word、HTML、MD 格式 |
| | 表单构建 | 拖动表单元素生成相应的 HTML 代码,支持导出 JSON、Vue 文件 |
| 🚀 | 配置管理 | 对系统动态配置常用参数,支持 SpringBoot 加载 |
| ⭐️ | 定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志 |
| 🚀 | 文件服务 | 支持将文件存储到 S3(MinIO、阿里云、腾讯云、七牛云)、本地、FTP、数据库等 |
| 🚀 | WebSocket | 提供 WebSocket 接入示例,支持一对一、一对多发送方式 |
| 🚀 | API 日志 | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题 |
| | MySQL 监控 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈 |
| | Redis 监控 | 监控 Redis 数据库的使用情况,使用的 Redis Key 管理 |
| 🚀 | 消息队列 | 基于 Redis 实现消息队列,Stream 提供集群消费,Pub/Sub 提供广播消费 |
| 🚀 | Java 监控 | 基于 Spring Boot Admin 实现 Java 应用的监控 |
| 🚀 | 链路追踪 | 接入 SkyWalking 组件,实现链路追踪 |
| 🚀 | 日志中心 | 接入 SkyWalking 组件,实现日志中心 |
| 🚀 | 服务保障 | 基于 Redis 实现分布式锁、幂等、限流功能,满足高并发场景 |
| 🚀 | 日志服务 | 轻量级日志中心,查看远程服务器的日志 |
| 🚀 | 单元测试 | 基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 |

### 数据报表
| | 功能 | 描述 |
|-----|-------|--------------------|
| 🚀 | 报表设计器 | 支持数据报表、图形报表、打印设计等 |
| 🚀 | 大屏设计器 | 拖拽生成数据大屏,内置几十种图表组件 |
### 微信公众号
| | 功能 | 描述 |
|----|--------|-------------------------------|
| 🚀 | 账号管理 | 配置接入的微信公众号,可支持多个公众号 |
| 🚀 | 数据统计 | 统计公众号的用户增减、累计用户、消息概况、接口分析等数据 |
| 🚀 | 粉丝管理 | 查看已关注、取关的粉丝列表,可对粉丝进行同步、打标签等操作 |
| 🚀 | 消息管理 | 查看粉丝发送的消息列表,可主动回复粉丝消息 |
| 🚀 | 模版消息 | 配置和发送模版消息,用于向粉丝推送通知类消息 |
| 🚀 | 自动回复 | 自动回复粉丝发送的消息,支持关注回复、消息回复、关键字回复 |
| 🚀 | 标签管理 | 对公众号的标签进行创建、查询、修改、删除等操作 |
| 🚀 | 菜单管理 | 自定义公众号的菜单,也可以从公众号同步菜单 |
| 🚀 | 素材管理 | 管理公众号的图片、语音、视频等素材,支持在线播放语音、视频 |
| 🚀 | 图文草稿箱 | 新增常用的图文素材到草稿箱,可发布到公众号 |
| 🚀 | 图文发表记录 | 查看已发布成功的图文素材,支持删除操作 |
### 商城系统
演示地址:<https://cloud.iocoder.cn/mall-preview/>


### 会员中心
| | 功能 | 描述 |
|-----|------|----------------------------------|
| 🚀 | 会员管理 | 会员是 C 端的消费者,该功能用于会员的搜索与管理 |
| 🚀 | 会员标签 | 对会员的标签进行创建、查询、修改、删除等操作 |
| 🚀 | 会员等级 | 对会员的等级、成长值进行管理,可用于订单折扣等会员权益 |
| 🚀 | 会员分组 | 对会员进行分组,用于用户画像、内容推送等运营手段 |
| 🚀 | 积分签到 | 回馈给签到、消费等行为的积分,会员可订单抵现、积分兑换等途径消耗 |
### ERP 系统
演示地址:<https://cloud.iocoder.cn/erp-preview/>

### CRM 系统
演示地址:<https://cloud.iocoder.cn/crm-preview/>

### AI 大模型
演示地址:<https://cloud.iocoder.cn/ai-preview/>


## 🐨 技术栈
### 微服务
| 项目 | 说明 |
|-----------------------|--------------------|
| `yudao-dependencies` | Maven 依赖版本管理 |
| `yudao-framework` | Java 框架拓展 |
| `yudao-server` | 管理后台 + 用户 APP 的服务端 |
| `yudao-module-system` | 系统功能的 Module 模块 |
| `yudao-module-member` | 会员中心的 Module 模块 |
| `yudao-module-infra` | 基础设施的 Module 模块 |
| `yudao-module-bpm` | 工作流程的 Module 模块 |
| `yudao-module-pay` | 支付系统的 Module 模块 |
| `yudao-module-mall` | 商城系统的 Module 模块 |
| `yudao-module-erp` | ERP 系统的 Module 模块 |
| `yudao-module-crm` | CRM 系统的 Module 模块 |
| `yudao-module-ai` | AI 大模型的 Module 模块 |
| `yudao-module-mp` | 微信公众号的 Module 模块 |
| `yudao-module-report` | 大屏报表 Module 模块 |
### 框架
| 框架 | 说明 | 版本 | 学习指南 |
|---------------------------------------------------------------------------------------------|------------------|------------|---------------------------------------------------------------------|
| [Spring Cloud Alibaba](https://github.com/alibaba/spring-cloud-alibaba) | 微服务框架 | 2021.0.4.0 | [文档](https://github.com/YunaiV/SpringBoot-Labs) |
| [Nacos](https://github.com/alibaba/nacos) | 配置中心 & 注册中心 | 2.3.2 | [文档](https://www.iocoder.cn/categories/Nacos/?yudao) |
| [RocketMQ](https://github.com/apache/rocketmq) | 消息队列 | 5.2.0 | [文档](https://www.iocoder.cn/categories/RocketMQ/?yudao) |
| [Sentinel](https://github.com/alibaba/sentinel) | 服务保障 | 1.8.6 | [文档](https://www.iocoder.cn/categories/Sentinel/?yudao) |
| [XXL Job](https://github.com/xuxueli/xxl-job) | 定时任务 | 2.3.1 | [文档](https://www.iocoder.cn/XXL-JOB/good-collection/?yudao) |
| [Spring Cloud Gateway](https://github.com/spring-cloud/spring-cloud-gateway) | 服务网关 | 3.4.1 | [文档](https://www.iocoder.cn/categories/Spring-Cloud-Gateway/?yudao) |
| [Seata](https://github.com/seata/seata) | 分布式事务 | 1.6.1 | [文档](https://www.iocoder.cn/categories/Seata/?yudao) |
| [MySQL](https://www.mysql.com/cn/) | 数据库服务器 | 5.7 / 8.0+ | |
| [Druid](https://github.com/alibaba/druid) | JDBC 连接池、监控组件 | 1.2.23 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) |
| [MyBatis Plus](https://mp.baomidou.com/) | MyBatis 增强工具包 | 3.5.7 | [文档](http://www.iocoder.cn/Spring-Boot/MyBatis/?yudao) |
| [Dynamic Datasource](https://dynamic-datasource.com/) | 动态数据源 | 4.3.1 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) |
| [Redis](https://redis.io/) | key-value 数据库 | 5.0 / 6.0 | |
| [Redisson](https://github.com/redisson/redisson) | Redis 客户端 | 3.32.0 | [文档](http://www.iocoder.cn/Spring-Boot/Redis/?yudao) |
| [Spring MVC](https://github.com/spring-projects/spring-framework/tree/master/spring-webmvc) | MVC 框架 | 5.3.24 | [文档](http://www.iocoder.cn/SpringMVC/MVC/?yudao) |
| [Spring Security](https://github.com/spring-projects/spring-security) | Spring 安全框架 | 5.7.5 | [文档](http://www.iocoder.cn/Spring-Boot/Spring-Security/?yudao) |
| [Hibernate Validator](https://github.com/hibernate/hibernate-validator) | 参数校验组件 | 6.2.5 | [文档](http://www.iocoder.cn/Spring-Boot/Validation/?yudao) |
| [Flowable](https://github.com/flowable/flowable-engine) | 工作流引擎 | 6.8.0 | [文档](https://doc.iocoder.cn/bpm/) |
| [Knife4j](https://gitee.com/xiaoym/knife4j) | Swagger 增强 UI 实现 | 4.5.0 | [文档](http://www.iocoder.cn/Spring-Boot/Swagger/?yudao) |
| [SkyWalking](https://skywalking.apache.org/) | 分布式应用追踪系统 | 8.12.0 | [文档](http://www.iocoder.cn/Spring-Boot/SkyWalking/?yudao) |
| [Spring Boot Admin](https://github.com/codecentric/spring-boot-admin) | Spring Boot 监控平台 | 2.7.10 | [文档](http://www.iocoder.cn/Spring-Boot/Admin/?yudao) |
| [Jackson](https://github.com/FasterXML/jackson) | JSON 工具库 | 2.13.3 | |
| [MapStruct](https://mapstruct.org/) | Java Bean 转换 | 1.6.3 | [文档](http://www.iocoder.cn/Spring-Boot/MapStruct/?yudao) |
| [Lombok](https://projectlombok.org/) | 消除冗长的 Java 代码 | 1.18.34 | [文档](http://www.iocoder.cn/Spring-Boot/Lombok/?yudao) |
| [JUnit](https://junit.org/junit5/) | Java 单元测试框架 | 5.8.2 | - |
| [Mockito](https://github.com/mockito/mockito) | Java Mock 框架 | 4.8.0 | - |
## 🐷 演示图
### 系统功能
| 模块 | biu | biu | biu |
|----------|-----------------------------|---------------------------|--------------------------|
| 登录 & 首页 |  |  |  |
| 用户 & 应用 |  |  |  |
| 租户 & 套餐 |  |  | - |
| 部门 & 岗位 |  |  | - |
| 菜单 & 角色 |  |  | - |
| 审计日志 |  |  | - |
| 短信 |  |  |  |
| 字典 & 敏感词 |  |  |  |
| 错误码 & 通知 |  |  | - |
### 工作流程
| 模块 | biu | biu | biu |
|---------|---------------------------------|---------------------------------|---------------------------------|
| 流程模型 |  |  |  |
| 表单 & 分组 |  |  | - |
| 我的流程 |  |  |  |
| 待办 & 已办 |  |  |  |
| OA 请假 |  |  |  |
### 基础设施
| 模块 | biu | biu | biu |
|---------------|-------------------------------|-----------------------------|---------------------------|
| 代码生成 |  |  | - |
| 文档 |  |  | - |
| 文件 & 配置 |  |  |  |
| 定时任务 |  |  | - |
| API 日志 |  |  | - |
| MySQL & Redis |  |  | - |
| 监控平台 |  |  |  |
### 支付系统
| 模块 | biu | biu | biu |
|---------|---------------------------|---------------------------------|---------------------------------|
| 商家 & 应用 |  |  |  |
| 支付 & 退款 |  |  | --- |
### 数据报表
| 模块 | biu | biu | biu |
|-------|---------------------------------|---------------------------------|---------------------------------------|
| 报表设计器 |  |  |  |
| 大屏设计器 |  |  |  |
### 移动端(管理后台)
| biu | biu | biu |
|----------------------------------|----------------------------------|----------------------------------|
|  |  |  |
|  |  |  |
|  |  |  |
目前已经实现登录、我的、工作台、编辑资料、头像修改、密码修改、常见问题、关于我们等基础功能。
================================================
FILE: lombok.config
================================================
config.stopBubbling = true
lombok.tostring.callsuper=CALL
lombok.equalsandhashcode.callsuper=CALL
lombok.accessors.chain=true
================================================
FILE: pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>
<modules>
<module>yudao-dependencies</module>
<module>yudao-gateway</module>
<module>yudao-framework</module>
<!-- Server 主项目 -->
<module>yudao-server</module>
<!-- 各种 module 拓展 -->
<module>yudao-module-system</module>
<module>yudao-module-infra</module>
<module>yudao-module-member</module>
<module>yudao-module-bpm</module>
<module>yudao-module-pay</module>
<module>yudao-module-report</module>
<module>yudao-module-mp</module>
<module>yudao-module-mall</module>
<module>yudao-module-erp</module>
<module>yudao-module-crm</module>
<!-- 友情提示:基于 Spring AI 实现 LLM 大模型的接入,需要使用 JDK17 版本,详细可见 https://doc.iocoder.cn/ai/build/ -->
<!-- <module>yudao-module-ai</module>-->
<module>yudao-module-iot</module>
</modules>
<name>${project.artifactId}</name>
<description>芋道项目基础脚手架</description>
<url>https://github.com/YunaiV/ruoyi-vue-pro</url>
<properties>
<revision>2026.01-jdk8-SNAPSHOT</revision>
<!-- Maven 相关 -->
<java.version>1.8</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<maven-surefire-plugin.version>3.5.3</maven-surefire-plugin.version>
<maven-compiler-plugin.version>3.14.0</maven-compiler-plugin.version>
<flatten-maven-plugin.version>1.7.2</flatten-maven-plugin.version>
<!-- maven-surefire-plugin 暂时无法通过 bom 的依赖读取(兼容老版本 IDEA 2024 及以前版本) -->
<lombok.version>1.18.42</lombok.version>
<spring.boot.version>2.7.18</spring.boot.version>
<mapstruct.version>1.6.3</mapstruct.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-dependencies</artifactId>
<version>${revision}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
<!-- maven-surefire-plugin 插件,用于运行单元测试。 -->
<!-- 注意,需要使用 3.0.X+,因为要支持 Junit 5 版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
</plugin>
<!-- maven-compiler-plugin 插件,解决 Lombok + MapStruct 组合 -->
<!-- https://stackoverflow.com/questions/33483697/re-run-spring-boot-configuration-annotation-processor-to-update-generated-metada -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>${spring.boot.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<!-- 确保 Lombok 生成的 getter/setter 方法能被 MapStruct 正确识别,
避免出现 No property named “xxx" exists 的编译错误 -->
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>0.2.0</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<!-- 统一 revision 版本 -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>${flatten-maven-plugin.version}</version>
<configuration>
<flattenMode>oss</flattenMode>
<updatePomFile>true</updatePomFile>
</configuration>
<executions>
<execution>
<goals>
<goal>flatten</goal>
</goals>
<id>flatten</id>
<phase>process-resources</phase>
</execution>
<execution>
<goals>
<goal>clean</goal>
</goals>
<id>flatten.clean</id>
<phase>clean</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!-- 使用 huawei / aliyun 的 Maven 源,提升下载速度 -->
<repositories>
<repository>
<id>huaweicloud</id>
<name>huawei</name>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
</repository>
<repository>
<id>aliyunmaven</id>
<name>aliyun</name>
<url>https://maven.aliyun.com/repository/public</url>
</repository>
</repositories>
</project>
================================================
FILE: script/docker/docker-compose.yml
================================================
version: '3'
services:
yudao-gateway:
image: yudao-gateway
container_name: yudao-gateway
environment:
- TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间)
- JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking
- SW_AGENT_NAME=yudao-gateway
- SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/**
- SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址
- SPRING_PROFILES_ACTIVE=test # 指定程序运行环境
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
- SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
volumes:
- /docker/yudao-cloud/logs:/root/logs/
- /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent
restart: always
network_mode: host # 以主机网络环境运行
yudao-system:
image: yudao-module-system-biz
container_name: yudao-system
environment:
- TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间)
- JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking
- SW_AGENT_NAME=yudao-gateway
- SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/**
- SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址
- SPRING_PROFILES_ACTIVE=test # 指定程序运行环境
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
- SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
volumes:
- /docker/yudao-cloud/logs:/root/logs/
- /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent
healthcheck:
test: [ "CMD","curl","-f","http://localhost:48081" ]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
restart: always
network_mode: host
yudao-infra:
image: yudao-module-infra-biz
container_name: yudao-infra
environment:
- TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间)
- JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking
- SW_AGENT_NAME=yudao-gateway
- SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/**
- SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址
- SPRING_PROFILES_ACTIVE=test # 指定程序运行环境
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
- SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
volumes:
- /docker/yudao-cloud/logs:/root/logs/
- /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent
restart: always
network_mode: host
healthcheck:
test: [ "CMD","curl","-f","http://localhost:48082" ]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
depends_on:
yudao-system:
condition: service_healthy
yudao-report:
image: yudao-module-report-biz
container_name: yudao-report
environment:
- TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间)
- JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking
- SW_AGENT_NAME=yudao-gateway
- SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/**
- SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址
- SPRING_PROFILES_ACTIVE=test # 指定程序运行环境
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
- SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
volumes:
- /docker/yudao-cloud/logs:/root/logs/
- /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent
restart: always
network_mode: host
depends_on:
yudao-infra:
condition: service_healthy
yudao-bpm:
image: yudao-module-bpm-biz
container_name: yudao-bpm
environment:
- TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间)
- JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking
- SW_AGENT_NAME=yudao-gateway
- SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/**
- SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址
- SPRING_PROFILES_ACTIVE=test # 指定程序运行环境
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
- SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
volumes:
- /docker/yudao-cloud/logs:/root/logs/
- /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent
restart: always
network_mode: host
depends_on:
yudao-infra:
condition: service_healthy
yudao-pay:
image: yudao-module-pay-biz
container_name: yudao-pay
environment:
- TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间)
- JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking
- SW_AGENT_NAME=yudao-gateway
- SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/**
- SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址
- SPRING_PROFILES_ACTIVE=test # 指定程序运行环境
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
- SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
volumes:
- /docker/yudao-cloud/logs:/root/logs/
- /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent
restart: always
network_mode: host
depends_on:
yudao-infra:
condition: service_healthy
yudao-mp:
image: yudao-module-mp-biz
container_name: yudao-mp
environment:
- TZ=Asia/Shanghai # 配置程序默认时区为上海(中国标准时间)
- JAVA_TOOL_OPTIONS=-javaagent:/data/skywalking/skywalking-agent/skywalking-agent.jar # 配置skywalking
- SW_AGENT_NAME=yudao-gateway
- SW_AGENT_TRACE_IGNORE_PATH=Redisson/PING,/actuator/**,/admin/**
- SW_AGENT_COLLECTOR_BACKEND_SERVICES=[YOUR_SKYWALKING_ADDR] # 请替换 your.skywalking.addr 为你的 skywalking 地址
- SPRING_PROFILES_ACTIVE=test # 指定程序运行环境
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=[YOUR_NACOS_ADDR] # 配置中心地址
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
- SPRING_CLOUD_NACOS_SERVER_ADDR=[YOUR_NACOS_ADDR] # 注册中心地址
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=[YOUR_NAMESPACE] # 命名空间
volumes:
- /docker/yudao-cloud/logs:/root/logs/
- /data/skywalking/skywalking-agent:/data/skywalking/skywalking-agent
restart: always
network_mode: host
depends_on:
yudao-infra:
condition: service_healthy
================================================
FILE: script/idea/http-client.env.json
================================================
{
"local": {
"baseUrl": "http://127.0.0.1:48080/admin-api",
"systemBaseUrl": "http://127.0.0.1:48081/admin-api",
"infaBaseUrl": "http://127.0.0.1:48082/admin-api",
"token": "test1",
"adminTenantId": "1",
"tag": "${HOSTNAME}",
"appApi": "http://127.0.0.1:48080/app-api",
"appToken": "test1",
"appTenentId": "1"
},
"gateway": {
"baseUrl": "http://127.0.0.1:48080/admin-api",
"systemBaseUrl": "http://127.0.0.1:48080/admin-api",
"infaBaseUrl": "http://127.0.0.1:48080/admin-api",
"token": "test1",
"adminTenantId": "1",
"tag": "${HOSTNAME}",
"appApi": "http://127.0.0.1:8888/app-api",
"appToken": "test1",
"appTenentId": "1"
}
}
================================================
FILE: sql/db2/README.md
================================================
暂未适配 IBM DB2 数据库,如果你有需要,可以微信联系 wangwenbin-server 一起建设。
你需要把表结构与数据导入到 DM 数据库,我来测试与适配代码。
================================================
FILE: sql/dm/flowable-patch/src/main/java/liquibase/database/core/DmDatabase.java
================================================
package liquibase.database.core;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import liquibase.CatalogAndSchema;
import liquibase.Scope;
import liquibase.database.AbstractJdbcDatabase;
import liquibase.database.DatabaseConnection;
import liquibase.database.OfflineConnection;
import liquibase.database.jvm.JdbcConnection;
import liquibase.exception.DatabaseException;
import liquibase.exception.UnexpectedLiquibaseException;
import liquibase.exception.ValidationErrors;
import liquibase.executor.ExecutorService;
import liquibase.statement.DatabaseFunction;
import liquibase.statement.SequenceCurrentValueFunction;
import liquibase.statement.SequenceNextValueFunction;
import liquibase.statement.core.RawCallStatement;
import liquibase.statement.core.RawSqlStatement;
import liquibase.structure.DatabaseObject;
import liquibase.structure.core.Catalog;
import liquibase.structure.core.Index;
import liquibase.structure.core.PrimaryKey;
import liquibase.structure.core.Schema;
import liquibase.util.JdbcUtils;
import liquibase.util.StringUtil;
public class DmDatabase extends AbstractJdbcDatabase {
private static final String PRODUCT_NAME = "DM DBMS";
@Override
protected String getDefaultDatabaseProductName() {
return PRODUCT_NAME;
}
/**
* Is this AbstractDatabase subclass the correct one to use for the given connection.
*
* @param conn
*/
@Override
public boolean isCorrectDatabaseImplementation(DatabaseConnection conn) throws DatabaseException {
return PRODUCT_NAME.equalsIgnoreCase(conn.getDatabaseProductName());
}
/**
* If this database understands the given url, return the default driver class name. Otherwise return null.
*
* @param url
*/
@Override
public String getDefaultDriver(String url) {
if(url.startsWith("jdbc:dm")) {
return "dm.jdbc.driver.DmDriver";
}
return null;
}
/**
* Returns an all-lower-case short name of the product. Used for end-user selecting of database type
* such as the DBMS precondition.
*/
@Override
public String getShortName() {
return "dm";
}
@Override
public Integer getDefaultPort() {
return 5236;
}
/**
* Returns whether this database support initially deferrable columns.
*/
@Override
public boolean supportsInitiallyDeferrableColumns() {
return true;
}
@Override
public boolean supportsTablespaces() {
return true;
}
@Override
public int getPriority() {
return PRIORITY_DEFAULT;
}
private static final Pattern PROXY_USER = Pattern.compile(".*(?:thin|oci)\\:(.+)/@.*");
protected final int SHORT_IDENTIFIERS_LENGTH = 30;
protected final int LONG_IDENTIFIERS_LEGNTH = 128;
public static final int ORACLE_12C_MAJOR_VERSION = 12;
private Set<String> reservedWords = new HashSet<>();
private Set<String> userDefinedTypes;
private Map<String, String> savedSessionNlsSettings;
private Boolean canAccessDbaRecycleBin;
private Integer databaseMajorVersion;
private Integer databaseMinorVersion;
/**
* Default constructor for an object that represents the Oracle Database DBMS.
*/
public DmDatabase() {
super.unquotedObjectsAreUppercased = true;
//noinspection HardCodedStringLiteral
super.setCurrentDateTimeFunction("SYSTIMESTAMP");
// Setting list of Oracle's native functions
//noinspection HardCodedStringLiteral
dateFunctions.add(new DatabaseFunction("SYSDATE"));
//noinspection HardCodedStringLiteral
dateFunctions.add(new DatabaseFunction("SYSTIMESTAMP"));
//noinspection HardCodedStringLiteral
dateFunctions.add(new DatabaseFunction("CURRENT_TIMESTAMP"));
//noinspection HardCodedStringLiteral
super.sequenceNextValueFunction = "%s.nextval";
//noinspection HardCodedStringLiteral
super.sequenceCurrentValueFunction = "%s.currval";
}
private void tryProxySession(final String url, final Connection con) {
Matcher m = PROXY_USER.matcher(url);
if (m.matches()) {
Properties props = new Properties();
props.put("PROXY_USER_NAME", m.group(1));
try {
Method method = con.getClass().getMethod("openProxySession", int.class, Properties.class);
method.setAccessible(true);
method.invoke(con, 1, props);
} catch (Exception e) {
Scope.getCurrentScope().getLog(getClass()).info("Could not open proxy session on OracleDatabase: " + e.getCause().getMessage());
}
}
}
@Override
public int getDatabaseMajorVersion() throws DatabaseException {
if (databaseMajorVersion == null) {
return super.getDatabaseMajorVersion();
} else {
return databaseMajorVersion;
}
}
@Override
public int getDatabaseMinorVersion() throws DatabaseException {
if (databaseMinorVersion == null) {
return super.getDatabaseMinorVersion();
} else {
return databaseMinorVersion;
}
}
@Override
public String getJdbcCatalogName(CatalogAndSchema schema) {
return null;
}
@Override
public String getJdbcSchemaName(CatalogAndSchema schema) {
return correctObjectName((schema.getCatalogName() == null) ? schema.getSchemaName() : schema.getCatalogName(), Schema.class);
}
@Override
protected String getAutoIncrementClause(final String generationType, final Boolean defaultOnNull) {
if (StringUtil.isEmpty(generationType)) {
return super.getAutoIncrementClause();
}
String autoIncrementClause = "GENERATED %s AS IDENTITY"; // %s -- [ ALWAYS | BY DEFAULT [ ON NULL ] ]
String generationStrategy = generationType;
if (Boolean.TRUE.equals(defaultOnNull) && generationType.toUpperCase().equals("BY DEFAULT")) {
generationStrategy += " ON NULL";
}
return String.format(autoIncrementClause, generationStrategy);
}
@Override
public String generatePrimaryKeyName(String tableName) {
if (tableName.length() > 27) {
//noinspection HardCodedStringLiteral
return "PK_" + tableName.toUpperCase(Locale.US).substring(0, 27);
} else {
//noinspection HardCodedStringLiteral
return "PK_" + tableName.toUpperCase(Locale.US);
}
}
@Override
public boolean isReservedWord(String objectName) {
return reservedWords.contains(objectName.toUpperCase());
}
@Override
public boolean supportsSequences() {
return true;
}
/**
* Oracle supports catalogs in liquibase terms
*
* @return false
*/
@Override
public boolean supportsSchemas() {
return false;
}
@Override
protected String getConnectionCatalogName() throws DatabaseException {
if (getConnection() instanceof OfflineConnection) {
return getConnection().getCatalog();
}
try {
//noinspection HardCodedStringLiteral
return Scope.getCurrentScope().getSingleton(ExecutorService.class).getExecutor("jdbc", this).queryForObject(new RawCallStatement("select sys_context( 'userenv', 'current_schema' ) from dual"), String.class);
} catch (Exception e) {
//noinspection HardCodedStringLiteral
Scope.getCurrentScope().getLog(getClass()).info("Error getting default schema", e);
}
return null;
}
@Override
public String getDefaultCatalogName() {//NOPMD
return (super.getDefaultCatalogName() == null) ? null : super.getDefaultCatalogName().toUpperCase(Locale.US);
}
/**
* <p>Returns an Oracle date literal with the same value as a string formatted using ISO 8601.</p>
*
* <p>Convert an ISO8601 date string to one of the following results:
* to_date('1995-05-23', 'YYYY-MM-DD')
* to_date('1995-05-23 09:23:59', 'YYYY-MM-DD HH24:MI:SS')</p>
* <p>
* Implementation restriction:<br>
* Currently, only the following subsets of ISO8601 are supported:<br>
* <ul>
* <li>YYYY-MM-DD</li>
* <li>YYYY-MM-DDThh:mm:ss</li>
* </ul>
*/
@Override
public String getDateLiteral(String isoDate) {
String normalLiteral = super.getDateLiteral(isoDate);
if (isDateOnly(isoDate)) {
return "TO_DATE(" + normalLiteral + ", 'YYYY-MM-DD')";
} else if (isTimeOnly(isoDate)) {
return "TO_DATE(" + normalLiteral + ", 'HH24:MI:SS')";
} else if (isTimestamp(isoDate)) {
return "TO_TIMESTAMP(" + normalLiteral + ", 'YYYY-MM-DD HH24:MI:SS.FF')";
} else if (isDateTime(isoDate)) {
int seppos = normalLiteral.lastIndexOf('.');
if (seppos != -1) {
normalLiteral = normalLiteral.substring(0, seppos) + "'";
}
return "TO_DATE(" + normalLiteral + ", 'YYYY-MM-DD HH24:MI:SS')";
}
return "UNSUPPORTED:" + isoDate;
}
@Override
public boolean isSystemObject(DatabaseObject example) {
if (example == null) {
return false;
}
if (this.isLiquibaseObject(example)) {
return false;
}
if (example instanceof Schema) {
//noinspection HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral
if ("SYSTEM".equals(example.getName()) || "SYS".equals(example.getName()) || "CTXSYS".equals(example.getName()) || "XDB".equals(example.getName())) {
return true;
}
//noinspection HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral
if ("SYSTEM".equals(example.getSchema().getCatalogName()) || "SYS".equals(example.getSchema().getCatalogName()) || "CTXSYS".equals(example.getSchema().getCatalogName()) || "XDB".equals(example.getSchema().getCatalogName())) {
return true;
}
} else if (isSystemObject(example.getSchema())) {
return true;
}
if (example instanceof Catalog) {
//noinspection HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral
if (("SYSTEM".equals(example.getName()) || "SYS".equals(example.getName()) || "CTXSYS".equals(example.getName()) || "XDB".equals(example.getName()))) {
return true;
}
} else if (example.getName() != null) {
//noinspection HardCodedStringLiteral
if (example.getName().startsWith("BIN$")) { //oracle deleted table
boolean filteredInOriginalQuery = this.canAccessDbaRecycleBin();
if (!filteredInOriginalQuery) {
filteredInOriginalQuery = StringUtil.trimToEmpty(example.getSchema().getName()).equalsIgnoreCase(this.getConnection().getConnectionUserName());
}
if (filteredInOriginalQuery) {
return !((example instanceof PrimaryKey) || (example instanceof Index) || (example instanceof
liquibase.statement.UniqueConstraint));
} else {
return true;
}
} else //noinspection HardCodedStringLiteral
if (example.getName().startsWith("AQ$")) { //oracle AQ tables
return true;
} else //noinspection HardCodedStringLiteral
if (example.getName().startsWith("DR$")) { //oracle index tables
return true;
} else //noinspection HardCodedStringLiteral
if (example.getName().startsWith("SYS_IOT_OVER")) { //oracle system table
return true;
} else //noinspection HardCodedStringLiteral,HardCodedStringLiteral
if ((example.getName().startsWith("MDRT_") || example.getName().startsWith("MDRS_")) && example.getName().endsWith("$")) {
// CORE-1768 - Oracle creates these for spatial indices and will remove them when the index is removed.
return true;
} else //noinspection HardCodedStringLiteral
if (example.getName().startsWith("MLOG$_")) { //Created by materliaized view logs for every table that is part of a materialized view. Not available for DDL operations.
return true;
} else //noinspection HardCodedStringLiteral
if (example.getName().startsWith("RUPD$_")) { //Created by materialized view log tables using primary keys. Not available for DDL operations.
return true;
} else //noinspection HardCodedStringLiteral
if (example.getName().startsWith("WM$_")) { //Workspace Manager backup tables.
return true;
} else //noinspection HardCodedStringLiteral
if ("CREATE$JAVA$LOB$TABLE".equals(example.getName())) { //This table contains the name of the Java object, the date it was loaded, and has a BLOB column to store the Java object.
return true;
} else //noinspection HardCodedStringLiteral
if ("JAVA$CLASS$MD5$TABLE".equals(example.getName())) { //This is a hash table that tracks the loading of Java objects into a schema.
return true;
} else //noinspection HardCodedStringLiteral
if (example.getName().startsWith("ISEQ$$_")) { //System-generated sequence
return true;
} else //noinspection HardCodedStringLiteral
if (example.getName().startsWith("USLOG$")) { //for update materialized view
return true;
} else if (example.getName().startsWith("SYS_FBA")) { //for Flashback tables
return true;
}
}
return super.isSystemObject(example);
}
@Override
public boolean supportsAutoIncrement() {
// Oracle supports Identity beginning with version 12c
boolean isAutoIncrementSupported = false;
try {
if (getDatabaseMajorVersion() >= 12) {
isAutoIncrementSupported = true;
}
// Returning true will generate create table command with 'IDENTITY' clause, example:
// CREATE TABLE AutoIncTest (IDPrimaryKey NUMBER(19) GENERATED BY DEFAULT AS IDENTITY NOT NULL, TypeID NUMBER(3) NOT NULL, Description NVARCHAR2(50), CONSTRAINT PK_AutoIncTest PRIMARY KEY (IDPrimaryKey));
// While returning false will continue to generate create table command without 'IDENTITY' clause, example:
// CREATE TABLE AutoIncTest (IDPrimaryKey NUMBER(19) NOT NULL, TypeID NUMBER(3) NOT NULL, Description NVARCHAR2(50), CONSTRAINT PK_AutoIncTest PRIMARY KEY (IDPrimaryKey));
} catch (DatabaseException ex) {
isAutoIncrementSupported = false;
}
return isAutoIncrementSupported;
}
// public Set<UniqueConstraint> findUniqueConstraints(String schema) throws DatabaseException {
// Set<UniqueConstraint> returnSet = new HashSet<UniqueConstraint>();
//
// List<Map> maps = new Executor(this).queryForList(new RawSqlStatement("SELECT UC.CONSTRAINT_NAME, UCC.TABLE_NAME, UCC.COLUMN_NAME FROM USER_CONSTRAINTS UC, USER_CONS_COLUMNS UCC WHERE UC.CONSTRAINT_NAME=UCC.CONSTRAINT_NAME AND CONSTRAINT_TYPE='U' ORDER BY UC.CONSTRAINT_NAME"));
//
// UniqueConstraint constraint = null;
// for (Map map : maps) {
// if (constraint == null || !constraint.getName().equals(constraint.getName())) {
// returnSet.add(constraint);
// Table table = new Table((String) map.get("TABLE_NAME"));
// constraint = new UniqueConstraint(map.get("CONSTRAINT_NAME").toString(), table);
// }
// }
// if (constraint != null) {
// returnSet.add(constraint);
// }
//
// return returnSet;
// }
@Override
public boolean supportsRestrictForeignKeys() {
return false;
}
@Override
public int getDataTypeMaxParameters(String dataTypeName) {
//noinspection HardCodedStringLiteral
if ("BINARY_FLOAT".equals(dataTypeName.toUpperCase())) {
return 0;
}
//noinspection HardCodedStringLiteral
if ("BINARY_DOUBLE".equals(dataTypeName.toUpperCase())) {
return 0;
}
return super.getDataTypeMaxParameters(dataTypeName);
}
public String getSystemTableWhereClause(String tableNameColumn) {
List<String> clauses = new ArrayList<String>(Arrays.asList("BIN$",
"AQ$",
"DR$",
"SYS_IOT_OVER",
"MLOG$_",
"RUPD$_",
"WM$_",
"ISEQ$$_",
"USLOG$",
"SYS_FBA"));
for (int i = 0;i<clauses.size(); i++) {
clauses.set(i, tableNameColumn+" NOT LIKE '"+clauses.get(i)+"%'");
}
return "("+ StringUtil.join(clauses, " AND ") + ")";
}
@Override
public boolean jdbcCallsCatalogsSchemas() {
return true;
}
public Set<String> getUserDefinedTypes() {
if (userDefinedTypes == null) {
userDefinedTypes = new HashSet<>();
if ((getConnection() != null) && !(getConnection() instanceof OfflineConnection)) {
try {
try {
//noinspection HardCodedStringLiteral
userDefinedTypes.addAll(Scope.getCurrentScope().getSingleton(ExecutorService.class).getExecutor("jdbc", this).queryForList(new RawSqlStatement("SELECT DISTINCT TYPE_NAME FROM ALL_TYPES"), String.class));
} catch (DatabaseException e) { //fall back to USER_TYPES if the user cannot see ALL_TYPES
//noinspection HardCodedStringLiteral
userDefinedTypes.addAll(Scope.getCurrentScope().getSingleton(ExecutorService.class).getExecutor("jdbc", this).queryForList(new RawSqlStatement("SELECT TYPE_NAME FROM USER_TYPES"), String.class));
}
} catch (DatabaseException e) {
//ignore error
}
}
}
return userDefinedTypes;
}
@Override
public String generateDatabaseFunctionValue(DatabaseFunction databaseFunction) {
//noinspection HardCodedStringLiteral
if ((databaseFunction != null) && "current_timestamp".equalsIgnoreCase(databaseFunction.toString())) {
return databaseFunction.toString();
}
if ((databaseFunction instanceof SequenceNextValueFunction) || (databaseFunction instanceof
SequenceCurrentValueFunction)) {
String quotedSeq = super.generateDatabaseFunctionValue(databaseFunction);
// replace "myschema.my_seq".nextval with "myschema"."my_seq".nextval
return quotedSeq.replaceFirst("\"([^\\.\"]+)\\.([^\\.\"]+)\"", "\"$1\".\"$2\"");
}
return super.generateDatabaseFunctionValue(databaseFunction);
}
@Override
public ValidationErrors validate() {
ValidationErrors errors = super.validate();
DatabaseConnection connection = getConnection();
if ((connection == null) || (connection instanceof OfflineConnection)) {
//noinspection HardCodedStringLiteral
Scope.getCurrentScope().getLog(getClass()).info("Cannot validate offline database");
return errors;
}
if (!canAccessDbaRecycleBin()) {
errors.addWarning(getDbaRecycleBinWarning());
}
return errors;
}
public String getDbaRecycleBinWarning() {
//noinspection HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral,
// HardCodedStringLiteral
//noinspection HardCodedStringLiteral,HardCodedStringLiteral,HardCodedStringLiteral
return "Liquibase needs to access the DBA_RECYCLEBIN table so we can automatically handle the case where " +
"constraints are deleted and restored. Since Oracle doesn't properly restore the original table names " +
"referenced in the constraint, we use the information from the DBA_RECYCLEBIN to automatically correct this" +
" issue.\n" +
"\n" +
"The user you used to connect to the database (" + getConnection().getConnectionUserName() +
") needs to have \"SELECT ON SYS.DBA_RECYCLEBIN\" permissions set before we can perform this operation. " +
"Please run the following SQL to set the appropriate permissions, and try running the command again.\n" +
"\n" +
" GRANT SELECT ON SYS.DBA_RECYCLEBIN TO " + getConnection().getConnectionUserName() + ";";
}
public boolean canAccessDbaRecycleBin() {
if (canAccessDbaRecycleBin == null) {
DatabaseConnection connection = getConnection();
if ((connection == null) || (connection instanceof OfflineConnection)) {
return false;
}
Statement statement = null;
try {
statement = ((JdbcConnection) connection).createStatement();
@SuppressWarnings("HardCodedStringLiteral") ResultSet resultSet = statement.executeQuery("select 1 from dba_recyclebin where 0=1");
resultSet.close(); //don't need to do anything with the result set, just make sure statement ran.
this.canAccessDbaRecycleBin = true;
} catch (Exception e) {
//noinspection HardCodedStringLiteral
if ((e instanceof SQLException) && e.getMessage().startsWith("ORA-00942")) { //ORA-00942: table or view does not exist
this.canAccessDbaRecycleBin = false;
} else {
//noinspection HardCodedStringLiteral
Scope.getCurrentScope().getLog(getClass()).warning("Cannot check dba_recyclebin access", e);
this.canAccessDbaRecycleBin = false;
}
} finally {
JdbcUtils.close(null, statement);
}
}
return canAccessDbaRecycleBin;
}
@Override
public boolean supportsNotNullConstraintNames() {
return true;
}
/**
* Tests if the given String would be a valid identifier in Oracle DBMS. In Oracle, a valid identifier has
* the following form (case-insensitive comparison):
* 1st character: A-Z
* 2..n characters: A-Z0-9$_#
* The maximum length of an identifier differs by Oracle version and object type.
*/
public boolean isValidOracleIdentifier(String identifier, Class<? extends DatabaseObject> type) {
if ((identifier == null) || (identifier.length() < 1))
return false;
if (!identifier.matches("^(i?)[A-Z][A-Z0-9\\$\\_\\#]*$"))
return false;
/*
* @todo It seems we currently do not have a class for tablespace identifiers, and all other classes
* we do know seem to be supported as 12cR2 long identifiers, so:
*/
return (identifier.length() <= LONG_IDENTIFIERS_LEGNTH);
}
/**
* Returns the maximum number of bytes (NOT: characters) for an identifier. For Oracle <=12c Release 20, this
* is 30 bytes, and starting from 12cR2, up to 128 (except for tablespaces, PDB names and some other rather rare
* object types).
*
* @return the maximum length of an object identifier, in bytes
*/
public int getIdentifierMaximumLength() {
try {
if (getDatabaseMajorVersion() < ORACLE_12C_MAJOR_VERSION) {
return SHORT_IDENTIFIERS_LENGTH;
} else if ((getDatabaseMajorVersion() == ORACLE_12C_MAJOR_VERSION) && (getDatabaseMinorVersion() <= 1)) {
return SHORT_IDENTIFIERS_LENGTH;
} else {
return LONG_IDENTIFIERS_LEGNTH;
}
} catch (DatabaseException ex) {
throw new UnexpectedLiquibaseException("Cannot determine the Oracle database version number", ex);
}
}
}
================================================
FILE: sql/dm/flowable-patch/src/main/java/liquibase/datatype/core/BooleanType.java
================================================
package liquibase.datatype.core;
import liquibase.change.core.LoadDataChange;
import liquibase.database.Database;
import liquibase.database.core.*;
import liquibase.datatype.DataTypeInfo;
import liquibase.datatype.DatabaseDataType;
import liquibase.datatype.LiquibaseDataType;
import liquibase.exception.UnexpectedLiquibaseException;
import liquibase.statement.DatabaseFunction;
import liquibase.util.StringUtil;
import java.util.Locale;
import java.util.regex.Pattern;
@DataTypeInfo(name = "boolean", aliases = {"java.sql.Types.BOOLEAN", "java.lang.Boolean", "bit", "bool"}, minParameters = 0, maxParameters = 0, priority = LiquibaseDataType.PRIORITY_DEFAULT)
public class BooleanType extends LiquibaseDataType {
@Override
public DatabaseDataType toDatabaseDataType(Database database) {
String originalDefinition = StringUtil.trimToEmpty(getRawDefinition());
if ((database instanceof Firebird3Database)) {
return new DatabaseDataType("BOOLEAN");
}
if ((database instanceof Db2zDatabase) || (database instanceof FirebirdDatabase)) {
return new DatabaseDataType("SMALLINT");
} else if (database instanceof MSSQLDatabase) {
return new DatabaseDataType(database.escapeDataTypeName("bit"));
} else if (database instanceof MySQLDatabase) {
if (originalDefinition.toLowerCase(Locale.US).startsWith("bit")) {
return new DatabaseDataType("BIT", getParameters());
}
return new DatabaseDataType("BIT", 1);
} else if (database instanceof OracleDatabase) {
return new DatabaseDataType("NUMBER", 1);
} else if ((database instanceof SybaseASADatabase) || (database instanceof SybaseDatabase)) {
return new DatabaseDataType("BIT");
} else if (database instanceof DerbyDatabase) {
if (((DerbyDatabase) database).supportsBooleanDataType()) {
return new DatabaseDataType("BOOLEAN");
} else {
return new DatabaseDataType("SMALLINT");
}
} else if (database instanceof DB2Database) {
if (((DB2Database) database).supportsBooleanDataType())
return new DatabaseDataType("BOOLEAN");
else
return new DatabaseDataType("SMALLINT");
} else if (database instanceof HsqlDatabase) {
return new DatabaseDataType("BOOLEAN");
} else if (database instanceof PostgresDatabase) {
if (originalDefinition.toLowerCase(Locale.US).startsWith("bit")) {
return new DatabaseDataType("BIT", getParameters());
}
} else if (database instanceof DmDatabase) { // dhb52: DM Support
return new DatabaseDataType("bit");
}
return super.toDatabaseDataType(database);
}
@Override
public String objectToSql(Object value, Database database) {
if ((value == null) || "null".equals(value.toString().toLowerCase(Locale.US))) {
return null;
}
String returnValue;
if (value instanceof String) {
value = ((String) value).replaceAll("'", "");
if ("true".equals(((String) value).toLowerCase(Locale.US)) || "1".equals(value) || "b'1'".equals(((String) value).toLowerCase(Locale.US)) || "t".equals(((String) value).toLowerCase(Locale.US)) || ((String) value).toLowerCase(Locale.US).equals(this.getTrueBooleanValue(database).toLowerCase(Locale.US))) {
returnValue = this.getTrueBooleanValue(database);
} else if ("false".equals(((String) value).toLowerCase(Locale.US)) || "0".equals(value) || "b'0'".equals(
((String) value).toLowerCase(Locale.US)) || "f".equals(((String) value).toLowerCase(Locale.US)) || ((String) value).toLowerCase(Locale.US).equals(this.getFalseBooleanValue(database).toLowerCase(Locale.US))) {
returnValue = this.getFalseBooleanValue(database);
} else if (database instanceof PostgresDatabase && Pattern.matches("b?([01])\\1*(::bit|::\"bit\")?", (String) value)) {
returnValue = "b'"
+ value.toString()
.replace("b", "")
.replace("\"", "")
.replace("::it", "")
+ "'::\"bit\"";
} else {
throw new UnexpectedLiquibaseException("Unknown boolean value: " + value);
}
} else if (value instanceof Long) {
if (Long.valueOf(1).equals(value)) {
returnValue = this.getTrueBooleanValue(database);
} else {
returnValue = this.getFalseBooleanValue(database);
}
} else if (value instanceof Number) {
if (value.equals(1) || "1".equals(value.toString()) || "1.0".equals(value.toString())) {
returnValue = this.getTrueBooleanValue(database);
} else {
returnValue = this.getFalseBooleanValue(database);
}
} else if (value instanceof DatabaseFunction) {
return value.toString();
} else if (value instanceof Boolean) {
if (((Boolean) value)) {
returnValue = this.getTrueBooleanValue(database);
} else {
returnValue = this.getFalseBooleanValue(database);
}
} else {
throw new UnexpectedLiquibaseException("Cannot convert type " + value.getClass() + " to a boolean value");
}
return returnValue;
}
protected boolean isNumericBoolean(Database database) {
if (database instanceof Firebird3Database) {
return false;
}
if (database instanceof DerbyDatabase) {
return !((DerbyDatabase) database).supportsBooleanDataType();
} else if (database instanceof DB2Database) {
return !((DB2Database) database).supportsBooleanDataType();
}
return (database instanceof Db2zDatabase)
|| (database instanceof FirebirdDatabase)
|| (database instanceof MSSQLDatabase)
|| (database instanceof MySQLDatabase)
|| (database instanceof OracleDatabase)
|| (database instanceof SQLiteDatabase)
|| (database instanceof SybaseASADatabase)
|| (database instanceof SybaseDatabase)
|| (database instanceof DmDatabase); // dhb52: DM Support
}
/**
* The database-specific value to use for "false" "boolean" columns.
*/
public String getFalseBooleanValue(Database database) {
if (isNumericBoolean(database)) {
return "0";
}
if (database instanceof InformixDatabase) {
return "'f'";
}
return "FALSE";
}
/**
* The database-specific value to use for "true" "boolean" columns.
*/
public String getTrueBooleanValue(Database database) {
if (isNumericBoolean(database)) {
return "1";
}
if (database instanceof InformixDatabase) {
return "'t'";
}
return "TRUE";
}
@Override
public LoadDataChange.LOAD_DATA_TYPE getLoadTypeName() {
return LoadDataChange.LOAD_DATA_TYPE.BOOLEAN;
}
}
================================================
FILE: sql/dm/flowable-patch/src/main/java/org/flowable/common/engine/impl/AbstractEngineConfiguration.java
================================================
/* 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 org.flowable.common.engine.impl;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.ServiceLoader;
import java.util.Set;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.builder.xml.XMLConfigBuilder;
import org.apache.ibatis.builder.xml.XMLMapperBuilder;
import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.defaults.DefaultSqlSessionFactory;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import org.apache.ibatis.transaction.managed.ManagedTransactionFactory;
import org.apache.ibatis.type.ArrayTypeHandler;
import org.apache.ibatis.type.BigDecimalTypeHandler;
import org.apache.ibatis.type.BlobInputStreamTypeHandler;
import org.apache.ibatis.type.BlobTypeHandler;
import org.apache.ibatis.type.BooleanTypeHandler;
import org.apache.ibatis.type.ByteTypeHandler;
import org.apache.ibatis.type.ClobTypeHandler;
import org.apache.ibatis.type.DateOnlyTypeHandler;
import org.apache.ibatis.type.DateTypeHandler;
import org.apache.ibatis.type.DoubleTypeHandler;
import org.apache.ibatis.type.FloatTypeHandler;
import org.apache.ibatis.type.IntegerTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.LongTypeHandler;
import org.apache.ibatis.type.NClobTypeHandler;
import org.apache.ibatis.type.NStringTypeHandler;
import org.apache.ibatis.type.ShortTypeHandler;
import org.apache.ibatis.type.SqlxmlTypeHandler;
import org.apache.ibatis.type.StringTypeHandler;
import org.apache.ibatis.type.TimeOnlyTypeHandler;
import org.apache.ibatis.type.TypeHandlerRegistry;
import org.flowable.common.engine.api.FlowableException;
import org.flowable.common.engine.api.delegate.event.FlowableEngineEventType;
import org.flowable.common.engine.api.delegate.event.FlowableEventDispatcher;
import org.flowable.common.engine.api.delegate.event.FlowableEventListener;
import org.flowable.common.engine.api.engine.EngineLifecycleListener;
import org.flowable.common.engine.impl.agenda.AgendaOperationRunner;
import org.flowable.common.engine.impl.cfg.CommandExecutorImpl;
import org.flowable.common.engine.impl.cfg.IdGenerator;
import org.flowable.common.engine.impl.cfg.TransactionContextFactory;
import org.flowable.common.engine.impl.cfg.standalone.StandaloneMybatisTransactionContextFactory;
import org.flowable.common.engine.impl.db.CommonDbSchemaManager;
import org.flowable.common.engine.impl.db.DbSqlSessionFactory;
import org.flowable.common.engine.impl.db.LogSqlExecutionTimePlugin;
import org.flowable.common.engine.impl.db.MybatisTypeAliasConfigurator;
import org.flowable.common.engine.impl.db.MybatisTypeHandlerConfigurator;
import org.flowable.common.engine.impl.db.SchemaManager;
import org.flowable.common.engine.impl.event.EventDispatchAction;
import org.flowable.common.engine.impl.event.FlowableEventDispatcherImpl;
import org.flowable.common.engine.impl.interceptor.Command;
import org.flowable.common.engine.impl.interceptor.CommandConfig;
import org.flowable.common.engine.impl.interceptor.CommandContextFactory;
import org.flowable.common.engine.impl.interceptor.CommandContextInterceptor;
import org.flowable.common.engine.impl.interceptor.CommandExecutor;
import org.flowable.common.engine.impl.interceptor.CommandInterceptor;
import org.flowable.common.engine.impl.interceptor.CrDbRetryInterceptor;
import org.flowable.common.engine.impl.interceptor.DefaultCommandInvoker;
import org.flowable.common.engine.impl.interceptor.LogInterceptor;
import org.flowable.common.engine.impl.interceptor.SessionFactory;
import org.flowable.common.engine.impl.interceptor.TransactionContextInterceptor;
import org.flowable.common.engine.impl.lock.LockManager;
import org.flowable.common.engine.impl.lock.LockManagerImpl;
import org.flowable.common.engine.impl.logging.LoggingListener;
import org.flowable.common.engine.impl.logging.LoggingSession;
import org.flowable.common.engine.impl.logging.LoggingSessionFactory;
import org.flowable.common.engine.impl.persistence.GenericManagerFactory;
import org.flowable.common.engine.impl.persistence.StrongUuidGenerator;
import org.flowable.common.engine.impl.persistence.cache.EntityCache;
import org.flowable.common.engine.impl.persistence.cache.EntityCacheImpl;
import org.flowable.common.engine.impl.persistence.entity.ByteArrayEntityManager;
import org.flowable.common.engine.impl.persistence.entity.ByteArrayEntityManagerImpl;
import org.flowable.common.engine.impl.persistence.entity.Entity;
import org.flowable.common.engine.impl.persistence.entity.PropertyEntityManager;
import org.flowable.common.engine.impl.persistence.entity.PropertyEntityManagerImpl;
import org.flowable.common.engine.impl.persistence.entity.TableDataManager;
import org.flowable.common.engine.impl.persistence.entity.TableDataManagerImpl;
import org.flowable.common.engine.impl.persistence.entity.data.ByteArrayDataManager;
import org.flowable.common.engine.impl.persistence.entity.data.PropertyDataManager;
import org.flowable.common.engine.impl.persistence.entity.data.impl.MybatisByteArrayDataManager;
import org.flowable.common.engine.impl.persistence.entity.data.impl.MybatisPropertyDataManager;
import org.flowable.common.engine.impl.runtime.Clock;
import org.flowable.common.engine.impl.service.CommonEngineServiceImpl;
import org.flowable.common.engine.impl.util.DefaultClockImpl;
import org.flowable.common.engine.impl.util.IoUtil;
import org.flowable.common.engine.impl.util.ReflectUtil;
import org.flowable.eventregistry.api.EventRegistryEventConsumer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
public abstract class AbstractEngineConfiguration {
protected final Logger logger = LoggerFactory.getLogger(getClass());
/** The tenant id indicating 'no tenant' */
public static final String NO_TENANT_ID = "";
/**
* Checks the version of the DB schema against the library when the form engine is being created and throws an exception if the versions don't match.
*/
public static final String DB_SCHEMA_UPDATE_FALSE = "false";
public static final String DB_SCHEMA_UPDATE_CREATE = "create";
public static final String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop";
/**
* Creates the schema when the form engine is being created and drops the schema when the form engine is being closed.
*/
public static final String DB_SCHEMA_UPDATE_DROP_CREATE = "drop-create";
/**
* Upon building of the process engine, a check is performed and an update of the schema is performed if it is necessary.
*/
public static final String DB_SCHEMA_UPDATE_TRUE = "true";
protected boolean forceCloseMybatisConnectionPool = true;
protected String databaseType;
protected String jdbcDriver = "org.h2.Driver";
protected String jdbcUrl = "jdbc:h2:tcp://localhost/~/flowable";
protected String jdbcUsername = "sa";
protected String jdbcPassword = "";
protected String dataSourceJndiName;
protected int jdbcMaxActiveConnections = 16;
protected int jdbcMaxIdleConnections = 8;
protected int jdbcMaxCheckoutTime;
protected int jdbcMaxWaitTime;
protected boolean jdbcPingEnabled;
protected String jdbcPingQuery;
protected int jdbcPingConnectionNotUsedFor;
protected int jdbcDefaultTransactionIsolationLevel;
protected DataSource dataSource;
protected SchemaManager commonSchemaManager;
protected SchemaManager schemaManager;
protected Command<Void> schemaManagementCmd;
protected String databaseSchemaUpdate = DB_SCHEMA_UPDATE_FALSE;
/**
* Whether to use a lock when performing the database schema create or update operations.
*/
protected boolean useLockForDatabaseSchemaUpdate = false;
protected String xmlEncoding = "UTF-8";
// COMMAND EXECUTORS ///////////////////////////////////////////////
protected CommandExecutor commandExecutor;
protected Collection<? extends CommandInterceptor> defaultCommandInterceptors;
protected CommandConfig defaultCommandConfig;
protected CommandConfig schemaCommandConfig;
protected CommandContextFactory commandContextFactory;
protected CommandInterceptor commandInvoker;
protected AgendaOperationRunner agendaOperationRunner = (commandContext, runnable) -> runnable.run();
protected List<CommandInterceptor> customPreCommandInterceptors;
protected List<CommandInterceptor> customPostCommandInterceptors;
protected List<CommandInterceptor> commandInterceptors;
protected Map<String, AbstractEngineConfiguration> engineConfigurations = new HashMap<>();
protected Map<String, AbstractServiceConfiguration> serviceConfigurations = new HashMap<>();
protected ClassLoader classLoader;
/**
* Either use Class.forName or ClassLoader.loadClass for class loading. See http://forums.activiti.org/content/reflectutilloadclass-and-custom- classloader
*/
protected boolean useClassForNameClassLoading = true;
protected List<EngineLifecycleListener> engineLifecycleListeners;
// Event Registry //////////////////////////////////////////////////
protected Map<String, EventRegistryEventConsumer> eventRegistryEventConsumers = new HashMap<>();
// MYBATIS SQL SESSION FACTORY /////////////////////////////////////
protected boolean isDbHistoryUsed = true;
protected DbSqlSessionFactory dbSqlSessionFactory;
protected SqlSessionFactory sqlSessionFactory;
protected TransactionFactory transactionFactory;
protected TransactionContextFactory transactionContextFactory;
/**
* If set to true, enables bulk insert (grouping sql inserts together). Default true.
* For some databases (eg DB2+z/OS) needs to be set to false.
*/
protected boolean isBulkInsertEnabled = true;
/**
* Some databases have a limit of how many parameters one sql insert can have (eg SQL Server, 2000 params (!= insert statements) ). Tweak this parameter in case of exceptions indicating too much
* is being put into one bulk insert, or make it higher if your database can cope with it and there are inserts with a huge amount of data.
* <p>
* By default: 100 (55 for mssql server as it has a hard limit of 2000 parameters in a statement)
*/
protected int maxNrOfStatementsInBulkInsert = 100;
public int DEFAULT_MAX_NR_OF_STATEMENTS_BULK_INSERT_SQL_SERVER = 55; // currently Execution has most params (35). 2000 / 35 = 57.
protected String mybatisMappingFile;
protected Set<Class<?>> customMybatisMappers;
protected Set<String> customMybatisXMLMappers;
protected List<Interceptor> customMybatisInterceptors;
protected Set<String> dependentEngineMyBatisXmlMappers;
protected List<MybatisTypeAliasConfigurator> dependentEngineMybatisTypeAliasConfigs;
protected List<MybatisTypeHandlerConfigurator> dependentEngineMybatisTypeHandlerConfigs;
// SESSION FACTORIES ///////////////////////////////////////////////
protected List<SessionFactory> customSessionFactories;
protected Map<Class<?>, SessionFactory> sessionFactories;
protected boolean enableEventDispatcher = true;
protected FlowableEventDispatcher eventDispatcher;
protected List<FlowableEventListener> eventListeners;
protected Map<String, List<FlowableEventListener>> typedEventListeners;
protected List<EventDispatchAction> additionalEventDispatchActions;
protected LoggingListener loggingListener;
protected boolean transactionsExternallyManaged;
/**
* Flag that can be set to configure or not a relational database is used. This is useful for custom implementations that do not use relational databases at all.
*
* If true (default), the {@link AbstractEngineConfiguration#getDatabaseSchemaUpdate()} value will be used to determine what needs to happen wrt the database schema.
*
* If false, no validation or schema creation will be done. That means that the database schema must have been created 'manually' before but the engine does not validate whether the schema is
* correct. The {@link AbstractEngineConfiguration#getDatabaseSchemaUpdate()} value will not be used.
*/
protected boolean usingRelationalDatabase = true;
/**
* Flag that can be set to configure whether or not a schema is used. This is useful for custom implementations that do not use relational databases at all.
* Setting {@link #usingRelationalDatabase} to true will automatically imply using a schema.
*/
protected boolean usingSchemaMgmt = true;
/**
* Allows configuring a database table prefix which is used for all runtime operations of the process engine. For example, if you specify a prefix named 'PRE1.', Flowable will query for executions
* in a table named 'PRE1.ACT_RU_EXECUTION_'.
*
* <p>
* <strong>NOTE: the prefix is not respected by automatic database schema management. If you use {@link AbstractEngineConfiguration#DB_SCHEMA_UPDATE_CREATE_DROP} or
* {@link AbstractEngineConfiguration#DB_SCHEMA_UPDATE_TRUE}, Flowable will create the database tables using the default names, regardless of the prefix configured here.</strong>
*/
protected String databaseTablePrefix = "";
/**
* Escape character for doing wildcard searches.
*
* This will be added at then end of queries that include for example a LIKE clause. For example: SELECT * FROM table WHERE column LIKE '%\%%' ESCAPE '\';
*/
protected String databaseWildcardEscapeCharacter;
/**
* database catalog to use
*/
protected String databaseCatalog = "";
/**
* In some situations you want to set the schema to use for table checks / generation if the database metadata doesn't return that correctly, see https://jira.codehaus.org/browse/ACT-1220,
* https://jira.codehaus.org/browse/ACT-1062
*/
protected String databaseSchema;
/**
* Set to true in case the defined databaseTablePrefix is a schema-name, instead of an actual table name prefix. This is relevant for checking if Flowable-tables exist, the databaseTablePrefix
* will not be used here - since the schema is taken into account already, adding a prefix for the table-check will result in wrong table-names.
*/
protected boolean tablePrefixIsSchema;
/**
* Set to true if the latest version of a definition should be retrieved, ignoring a possible parent deployment id value
*/
protected boolean alwaysLookupLatestDefinitionVersion;
/**
* Set to true if by default lookups should fallback to the default tenant (an empty string by default or a defined tenant value)
*/
protected boolean fallbackToDefaultTenant;
/**
* Default tenant provider that is executed when looking up definitions, in case the global or local fallback to default tenant value is true
*/
protected DefaultTenantProvider defaultTenantProvider = (tenantId, scope, scopeKey) -> NO_TENANT_ID;
/**
* Enables the MyBatis plugin that logs the execution time of sql statements.
*/
protected boolean enableLogSqlExecutionTime;
protected Properties databaseTypeMappings = getDefaultDatabaseTypeMappings();
/**
* Duration between the checks when acquiring a lock.
*/
protected Duration lockPollRate = Duration.ofSeconds(10);
/**
* Duration to wait for the DB Schema lock before giving up.
*/
protected Duration schemaLockWaitTime = Duration.ofMinutes(5);
// DATA MANAGERS //////////////////////////////////////////////////////////////////
protected PropertyDataManager propertyDataManager;
protected ByteArrayDataManager byteArrayDataManager;
protected TableDataManager tableDataManager;
// ENTITY MANAGERS ////////////////////////////////////////////////////////////////
protected PropertyEntityManager propertyEntityManager;
protected ByteArrayEntityManager byteArrayEntityManager;
protected List<EngineDeployer> customPreDeployers;
protected List<EngineDeployer> customPostDeployers;
protected List<EngineDeployer> deployers;
// CONFIGURATORS ////////////////////////////////////////////////////////////
protected boolean enableConfiguratorServiceLoader = true; // Enabled by default. In certain environments this should be set to false (eg osgi)
protected List<EngineConfigurator> configurators; // The injected configurators
protected List<EngineConfigurator> allConfigurators; // Including auto-discovered configurators
protected EngineConfigurator idmEngineConfigurator;
protected EngineConfigurator eventRegistryConfigurator;
public static final String PRODUCT_NAME_POSTGRES = "PostgreSQL";
public static final String PRODUCT_NAME_CRDB = "CockroachDB";
public static final String DATABASE_TYPE_H2 = "h2";
public static final String DATABASE_TYPE_HSQL = "hsql";
public static final String DATABASE_TYPE_MYSQL = "mysql";
public static final String DATABASE_TYPE_ORACLE = "oracle";
public static final String DATABASE_TYPE_POSTGRES = "postgres";
public static final String DATABASE_TYPE_MSSQL = "mssql";
public static final String DATABASE_TYPE_DB2 = "db2";
public static final String DATABASE_TYPE_COCKROACHDB = "cockroachdb";
public static Properties getDefaultDatabaseTypeMappings() {
Properties databaseTypeMappings = new Properties();
databaseTypeMappings.setProperty("H2", DATABASE_TYPE_H2);
databaseTypeMappings.setProperty("HSQL Database Engine", DATABASE_TYPE_HSQL);
databaseTypeMappings.setProperty("MySQL", DATABASE_TYPE_MYSQL);
databaseTypeMappings.setProperty("MariaDB", DATABASE_TYPE_MYSQL);
databaseTypeMappings.setProperty("Oracle", DATABASE_TYPE_ORACLE);
databaseTypeMappings.setProperty(PRODUCT_NAME_POSTGRES, DATABASE_TYPE_POSTGRES);
databaseTypeMappings.setProperty("Microsoft SQL Server", DATABASE_TYPE_MSSQL);
databaseTypeMappings.setProperty(DATABASE_TYPE_DB2, DATABASE_TYPE_DB2);
databaseTypeMappings.setProperty("DB2", DATABASE_TYPE_DB2);
databaseTypeMappings.setProperty("DB2/NT", DATABASE_TYPE_DB2);
databaseTypeMappings.setProperty("DB2/NT64", DATABASE_TYPE_DB2);
databaseTypeMappings.setProperty("DB2 UDP", DATABASE_TYPE_DB2);
databaseTypeMappings.setProperty("DB2/LINUX", DATABASE_TYPE_DB2);
databaseTypeMappings.setProperty("DB2/LINUX390", DATABASE_TYPE_DB2);
databaseTypeMappings.setProperty("DB2/LINUXX8664", DATABASE_TYPE_DB2);
databaseTypeMappings.setProperty("DB2/LINUXZ64", DATABASE_TYPE_DB2);
databaseTypeMappings.setProperty("DB2/LINUXPPC64", DATABASE_TYPE_DB2);
databaseTypeMappings.setProperty("DB2/LINUXPPC64LE", DATABASE_TYPE_DB2);
databaseTypeMappings.setProperty("DB2/400 SQL", DATABASE_TYPE_DB2);
databaseTypeMappings.setProperty("DB2/6000", DATABASE_TYPE_DB2);
databaseTypeMappings.setProperty("DB2 UDB iSeries", DATABASE_TYPE_DB2);
databaseTypeMappings.setProperty("DB2/AIX64", DATABASE_TYPE_DB2);
databaseTypeMappings.setProperty("DB2/HPUX", DATABASE_TYPE_DB2);
databaseTypeMappings.setProperty("DB2/HP64", DATABASE_TYPE_DB2);
databaseTypeMappings.setProperty("DB2/SUN", DATABASE_TYPE_DB2);
databaseTypeMappings.setProperty("DB2/SUN64", DATABASE_TYPE_DB2);
databaseTypeMappings.setProperty("DB2/PTX", DATABASE_TYPE_DB2);
databaseTypeMappings.setProperty("DB2/2", DATABASE_TYPE_DB2);
databaseTypeMappings.setProperty("DB2 UDB AS400", DATABASE_TYPE_DB2);
databaseTypeMappings.setProperty(PRODUCT_NAME_CRDB, DATABASE_TYPE_COCKROACHDB);
databaseTypeMappings.setProperty("DM DBMS", DATABASE_TYPE_ORACLE); // dhb52: DM support
return databaseTypeMappings;
}
protected Map<Object, Object> beans;
protected IdGenerator idGenerator;
protected boolean usePrefixId;
protected Clock clock;
protected ObjectMapper objectMapper;
// Variables
public static final int DEFAULT_GENERIC_MAX_LENGTH_STRING = 4000;
public static final int DEFAULT_ORACLE_MAX_LENGTH_STRING = 2000;
/**
* Define a max length for storing String variable types in the database. Mainly used for the Oracle NVARCHAR2 limit of 2000 characters
*/
protected int maxLengthStringVariableType = -1;
protected void initEngineConfigurations() {
addEngineConfiguration(getEngineCfgKey(), getEngineScopeType(), this);
}
// DataSource
// ///////////////////////////////////////////////////////////////
protected void initDataSource() {
if (dataSource == null) {
if (dataSourceJndiName != null) {
try {
dataSource = (DataSource) new InitialContext().lookup(dataSourceJndiName);
} catch (Exception e) {
throw new FlowableException("couldn't lookup datasource from " + dataSourceJndiName + ": " + e.getMessage(), e);
}
} else if (jdbcUrl != null) {
if ((jdbcDriver == null) || (jdbcUsername == null)) {
throw new FlowableException("DataSource or JDBC properties have to be specified in a process engine configuration");
}
logger.debug("initializing datasource to db: {}", jdbcUrl);
if (logger.isInfoEnabled()) {
logger.info("Configuring Datasource with following properties (omitted password for security)");
logger.info("datasource driver : {}", jdbcDriver);
logger.info("datasource url : {}", jdbcUrl);
logger.info("datasource user name : {}", jdbcUsername);
}
PooledDataSource pooledDataSource = new PooledDataSource(this.getClass().getClassLoader(), jdbcDriver, jdbcUrl, jdbcUsername, jdbcPassword);
if (jdbcMaxActiveConnections > 0) {
pooledDataSource.setPoolMaximumActiveConnections(jdbcMaxActiveConnections);
}
if (jdbcMaxIdleConnections > 0) {
pooledDataSource.setPoolMaximumIdleConnections(jdbcMaxIdleConnections);
}
if (jdbcMaxCheckoutTime > 0) {
pooledDataSource.setPoolMaximumCheckoutTime(jdbcMaxCheckoutTime);
}
if (jdbcMaxWaitTime > 0) {
pooledDataSource.setPoolTimeToWait(jdbcMaxWaitTime);
}
if (jdbcPingEnabled) {
pooledDataSource.setPoolPingEnabled(true);
if (jdbcPingQuery != null) {
pooledDataSource.setPoolPingQuery(jdbcPingQuery);
}
pooledDataSource.setPoolPingConnectionsNotUsedFor(jdbcPingConnectionNotUsedFor);
}
if (jdbcDefaultTransactionIsolationLevel > 0) {
pooledDataSource.setDefaultTransactionIsolationLevel(jdbcDefaultTransactionIsolationLevel);
}
dataSource = pooledDataSource;
}
}
if (databaseType == null) {
initDatabaseType();
}
}
public void initDatabaseType() {
Connection connection = null;
try {
connection = dataSource.getConnection();
DatabaseMetaData databaseMetaData = connection.getMetaData();
String databaseProductName = databaseMetaData.getDatabaseProductName();
logger.debug("database product name: '{}'", databaseProductName);
// CRDB does not expose the version through the jdbc driver, so we need to fetch it through version().
if (PRODUCT_NAME_POSTGRES.equalsIgnoreCase(databaseProductName)) {
try (PreparedStatement preparedStatement = connection.prepareStatement("select version() as version;");
ResultSet resultSet = preparedStatement.executeQuery()) {
String version = null;
if (resultSet.next()) {
version = resultSet.getString("version");
}
if (StringUtils.isNotEmpty(version) && version.toLowerCase().startsWith(PRODUCT_NAME_CRDB.toLowerCase())) {
databaseProductName = PRODUCT_NAME_CRDB;
logger.info("CockroachDB version '{}' detected", version);
}
}
}
databaseType = databaseTypeMappings.getProperty(databaseProductName);
if (databaseType == null) {
throw new FlowableException("couldn't deduct database type from database product name '" + databaseProductName + "'");
}
logger.debug("using database type: {}", databaseType);
} catch (SQLException e) {
throw new RuntimeException("Exception while initializing Database connection", e);
} finally {
try {
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
logger.error("Exception while closing the Database connection", e);
}
}
// Special care for MSSQL, as it has a hard limit of 2000 params per statement (incl bulk statement).
// Especially with executions, with 100 as default, this limit is passed.
if (DATABASE_TYPE_MSSQL.equals(databaseType)) {
maxNrOfStatementsInBulkInsert = DEFAULT_MAX_NR_OF_STATEMENTS_BULK_INSERT_SQL_SERVER;
}
}
public void initSchemaManager() {
if (this.commonSchemaManager == null) {
this.commonSchemaManager = new CommonDbSchemaManager();
}
}
// session factories ////////////////////////////////////////////////////////
public void addSessionFactory(SessionFactory sessionFactory) {
sessionFactories.put(sessionFactory.getSessionType(), sessionFactory);
}
public void initCommandContextFactory() {
if (commandContextFactory == null) {
commandContextFactory = new CommandContextFactory();
}
}
public void initTransactionContextFactory() {
if (transactionContextFactory == null) {
transactionContextFactory = new StandaloneMybatisTransactionContextFactory();
}
}
public void initCommandExecutors() {
initDefaultCommandConfig();
initSchemaCommandConfig();
initCommandInvoker();
initCommandInterceptors();
initCommandExecutor();
}
public void initDefaultCommandConfig() {
if (defaultCommandConfig == null) {
defaultCommandConfig = new CommandConfig();
}
}
public void initSchemaCommandConfig() {
if (schemaCommandConfig == null) {
schemaCommandConfig = new CommandConfig();
}
}
public void initCommandInvoker() {
if (commandInvoker == null) {
commandInvoker = new DefaultCommandInvoker();
}
}
public void initCommandInterceptors() {
if (commandInterceptors == null) {
commandInterceptors = new ArrayList<>();
if (customPreCommandInterceptors != null) {
commandInterceptors.addAll(customPreCommandInterceptors);
}
commandInterceptors.addAll(getDefaultCommandInterceptors());
if (customPostCommandInterceptors != null) {
commandInterceptors.addAll(customPostCommandInterceptors);
}
commandInterceptors.add(commandInvoker);
}
}
public Collection<? extends CommandInterceptor> getDefaultCommandInterceptors() {
if (defaultCommandInterceptors == null) {
List<CommandInterceptor> interceptors = new ArrayList<>();
interceptors.add(new LogInterceptor());
if (DATABASE_TYPE_COCKROACHDB.equals(databaseType)) {
interceptors.add(new CrDbRetryInterceptor());
}
CommandInterceptor transactionInterceptor = createTransactionInterceptor();
if (transactionInterceptor != null) {
interceptors.add(transactionInterceptor);
}
if (commandContextFactory != null) {
String engineCfgKey = getEngineCfgKey();
CommandContextInterceptor commandContextInterceptor = new CommandContextInterceptor(commandContextFactory,
classLoader, useClassForNameClassLoading, clock, objectMapper);
engineConfigurations.put(engineCfgKey, this);
commandContextInterceptor.setEngineCfgKey(engineCfgKey);
commandContextInterceptor.setEngineConfigurations(engineConfigurations);
interceptors.add(commandContextInterceptor);
}
if (transactionContextFactory != null) {
interceptors.add(new TransactionContextInterceptor(transactionContextFactory));
}
List<CommandInterceptor> additionalCommandInterceptors = getAdditionalDefaultCommandInterceptors();
if (additionalCommandInterceptors != null) {
interceptors.addAll(additionalCommandInterceptors);
}
defaultCommandInterceptors = interceptors;
}
return defaultCommandInterceptors;
}
public abstract String getEngineCfgKey();
public abstract String getEngineScopeType();
public List<CommandInterceptor> getAdditionalDefaultCommandInterceptors() {
return null;
}
public void initCommandExecutor() {
if (commandExecutor == null) {
CommandInterceptor first = initInterceptorChain(commandInterceptors);
commandExecutor = new CommandExecutorImpl(getDefaultCommandConfig(), first);
}
}
public CommandInterceptor initInterceptorChain(List<CommandInterceptor> chain) {
if (chain == null || chain.isEmpty()) {
throw new FlowableException("invalid command interceptor chain configuration: " + chain);
}
for (int i = 0; i < chain.size() - 1; i++) {
chain.get(i).setNext(chain.get(i + 1));
}
return chain.get(0);
}
public abstract CommandInterceptor createTransactionInterceptor();
public void initBeans() {
if (beans == null) {
beans = new HashMap<>();
}
}
// id generator
// /////////////////////////////////////////////////////////////
public void initIdGenerator() {
if (idGenerator == null) {
idGenerator = new StrongUuidGenerator();
}
}
public void initObjectMapper() {
if (objectMapper == null) {
objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
}
}
public void initClock() {
if (clock == null) {
clock = new DefaultClockImpl();
}
}
// Data managers ///////////////////////////////////////////////////////////
public void initDataManagers() {
if (propertyDataManager == null) {
propertyDataManager = new MybatisPropertyDataManager(idGenerator);
}
if (byteArrayDataManager == null) {
byteArrayDataManager = new MybatisByteArrayDataManager(idGenerator);
}
}
// Entity managers //////////////////////////////////////////////////////////
public void initEntityManagers() {
if (propertyEntityManager == null) {
propertyEntityManager = new PropertyEntityManagerImpl(this, propertyDataManager);
}
if (byteArrayEntityManager == null) {
byteArrayEntityManager = new ByteArrayEntityManagerImpl(byteArrayDataManager, getEngineCfgKey(), this::getEventDispatcher);
}
if (tableDataManager == null) {
tableDataManager = new TableDataManagerImpl(this);
}
}
// services
// /////////////////////////////////////////////////////////////////
protected void initService(Object service) {
if (service instanceof CommonEngineServiceImpl) {
((CommonEngineServiceImpl) service).setCommandExecutor(commandExecutor);
}
}
// myBatis SqlSessionFactory
// ////////////////////////////////////////////////
public void initSessionFactories() {
if (sessionFactories == null) {
sessionFactories = new HashMap<>();
if (usingRelationalDatabase) {
initDbSqlSessionFactory();
}
addSessionFactory(new GenericManagerFactory(EntityCache.class, EntityCacheImpl.class));
if (isLoggingSessionEnabled()) {
if (!sessionFactories.containsKey(LoggingSession.class)) {
LoggingSessionFactory loggingSessionFactory = new LoggingSessionFactory();
loggingSessionFactory.setLoggingListener(loggingListener);
loggingSessionFactory.setObjectMapper(objectMapper);
sessionFactories.put(LoggingSession.class, loggingSessionFactory);
}
}
commandContextFactory.setSessionFactories(sessionFactories);
} else {
if (usingRelationalDatabase) {
initDbSqlSessionFactoryEntitySettings();
}
}
if (customSessionFactories != null) {
for (SessionFactory sessionFactory : customSessionFactories) {
addSessionFactory(sessionFactory);
}
}
}
public void initDbSqlSessionFactory() {
if (dbSqlSessionFactory == null) {
dbSqlSessionFactory = createDbSqlSessionFactory();
}
dbSqlSessionFactory.setDatabaseType(databaseType);
dbSqlSessionFactory.setSqlSessionFactory(sqlSessionFactory);
dbSqlSessionFactory.setDbHistoryUsed(isDbHistoryUsed);
dbSqlSessionFactory.setDatabaseTablePrefix(databaseTablePrefix);
dbSqlSessionFactory.setTablePrefixIsSchema(tablePrefixIsSchema);
dbSqlSessionFactory.setDatabaseCatalog(databaseCatalog);
dbSqlSessionFactory.setDatabaseSchema(databaseSchema);
dbSqlSessionFactory.setMaxNrOfStatementsInBulkInsert(maxNrOfStatementsInBulkInsert);
initDbSqlSessionFactoryEntitySettings();
addSessionFactory(dbSqlSessionFactory);
}
public DbSqlSessionFactory createDbSqlSessionFactory() {
return new DbSqlSessionFactory(usePrefixId);
}
protected abstract void initDbSqlSessionFactoryEntitySettings();
protected void defaultInitDbSqlSessionFactoryEntitySettings(List<Class<? extends Entity>> insertOrder, List<Class<? extends Entity>> deleteOrder) {
if (insertOrder != null) {
for (Class<? extends Entity> clazz : insertOrder) {
dbSqlSessionFactory.getInsertionOrder().add(clazz);
if (isBulkInsertEnabled) {
dbSqlSessionFactory.getBulkInserteableEntityClasses().add(clazz);
}
}
}
if (deleteOrder != null) {
for (Class<? extends Entity> clazz : deleteOrder) {
dbSqlSessionFactory.getDeletionOrder().add(clazz);
}
}
}
public void initTransactionFactory() {
if (transactionFactory == null) {
if (transactionsExternallyManaged) {
transactionFactory = new ManagedTransactionFactory();
Properties properties = new Properties();
properties.put("closeConnection", "false");
this.transactionFactory.setProperties(properties);
} else {
transactionFactory = new JdbcTransactionFactory();
}
}
}
public void initSqlSessionFactory() {
if (sqlSessionFactory == null) {
InputStream inputStream = null;
try {
inputStream = getMyBatisXmlConfigurationStream();
Environment environment = new Environment("default", transactionFactory, dataSource);
Reader reader = new InputStreamReader(inputStream);
Properties properties = new Properties();
properties.put("prefix", databaseTablePrefix);
String wildcardEscapeClause = "";
if ((databaseWildcardEscapeCharacter != null) && (databaseWildcardEscapeCharacter.length() != 0)) {
wildcardEscapeClause = " escape '" + databaseWildcardEscapeCharacter + "'";
}
properties.put("wildcardEscapeClause", wildcardEscapeClause);
// set default properties
properties.put("limitBefore", "");
properties.put("limitAfter", "");
properties.put("limitBetween", "");
properties.put("limitBeforeNativeQuery", "");
properties.put("limitAfterNativeQuery", "");
properties.put("blobType", "BLOB");
properties.put("boolValue", "TRUE");
if (databaseType != null) {
properties.load(getResourceAsStream(pathToEngineDbProperties()));
}
Configuration configuration = initMybatisConfiguration(environment, reader, properties);
sqlSessionFactory = new DefaultSqlSessionFactory(configuration);
} catch (Exception e) {
throw new FlowableException("Error while building ibatis SqlSessionFactory: " + e.getMessage(), e);
} finally {
IoUtil.closeSilently(inputStream);
}
} else {
// This is needed when the SQL Session Factory is created by another engine.
// When custom XML Mappers are registered with this engine they need to be loaded in the configuration as well
applyCustomMybatisCustomizations(sqlSessionFactory.getConfiguration());
}
}
public String pathToEngineDbProperties() {
return "org/flowable/common/db/properties/" + databaseType + ".properties";
}
public Configuration initMybatisConfiguration(Environment environment, Reader reader, Properties properties) {
XMLConfigBuilder parser = new XMLConfigBuilder(reader, "", properties);
Configuration configuration = parser.getConfiguration();
if (databaseType != null) {
configuration.setDatabaseId(databaseType);
}
configuration.setEnvironment(environment);
initMybatisTypeHandlers(configuration);
initCustomMybatisInterceptors(configuration);
if (isEnableLogSqlExecutionTime()) {
initMyBatisLogSqlExecutionTimePlugin(configuration);
}
configuration = parseMybatisConfiguration(parser);
return configuration;
}
public void initCustomMybatisMappers(Configuration configuration) {
if (getCustomMybatisMappers() != null) {
for (Class<?> clazz : getCustomMybatisMappers()) {
if (!configuration.hasMapper(clazz)) {
configuration.addMapper(clazz);
}
}
}
}
public void initMybatisTypeHandlers(Configuration configuration) {
// When mapping into Map<String, Object> there is currently a problem with MyBatis.
// It will return objects which are driver specific.
// Therefore we are registering the mappings between Object.class and the specific jdbc type here.
// see https://github.com/mybatis/mybatis-3/issues/2216 for more info
TypeHandlerRegistry handlerRegistry = configuration.getTypeHandlerRegistry();
handlerRegistry.register(Object.class, JdbcType.BOOLEAN, new BooleanTypeHandler());
handlerRegistry.register(Object.class, JdbcType.BIT, new BooleanTypeHandler());
handlerRegistry.register(Object.class, JdbcType.TINYINT, new ByteTypeHandler());
handlerRegistry.register(Object.class, JdbcType.SMALLINT, new ShortTypeHandler());
handlerRegistry.register(Object.class, JdbcType.INTEGER, new IntegerTypeHandler());
handlerRegistry.register(Object.class, JdbcType.FLOAT, new FloatTypeHandler());
handlerRegistry.register(Object.class, JdbcType.DOUBLE, new DoubleTypeHandler());
handlerRegistry.register(Object.class, JdbcType.CHAR, new StringTypeHandler());
handlerRegistry.register(Object.class, JdbcType.CLOB, new ClobTypeHandler());
handlerRegistry.register(Object.class, JdbcType.VARCHAR, new StringTypeHandler());
handlerRegistry.register(Object.class, JdbcType.LONGVARCHAR, new StringTypeHandler());
handlerRegistry.register(Object.class, JdbcType.NVARCHAR, new NStringTypeHandler());
handlerRegistry.register(Object.class, JdbcType.NCHAR, new NStringTypeHandler());
handlerRegistry.register(Object.class, JdbcType.NCLOB, new NClobTypeHandler());
handlerRegistry.register(Object.class, JdbcType.ARRAY, new ArrayTypeHandler());
handlerRegistry.register(Object.class, JdbcType.BIGINT, new LongTypeHandler());
handlerRegistry.register(Object.class, JdbcType.REAL, new BigDecimalTypeHandler());
handlerRegistry.register(Object.class, JdbcType.DECIMAL, new BigDecimalTypeHandler());
handlerRegistry.register(Object.class, JdbcType.NUMERIC, new BigDecimalTypeHandler());
handlerRegistry.register(Object.class, JdbcType.BLOB, new BlobInputStreamTypeHandler());
handlerRegistry.register(Object.class, JdbcType.LONGVARBINARY, new BlobTypeHandler());
handlerRegistry.register(Object.class, JdbcType.DATE, new DateOnlyTypeHandler());
handlerRegistry.register(Object.class, JdbcType.TIME, new TimeOnlyTypeHandler());
handlerRegistry.register(Object.class, JdbcType.TIMESTAMP, new DateTypeHandler());
handlerRegistry.register(Object.class, JdbcType.SQLXML, new SqlxmlTypeHandler());
}
public void initCustomMybatisInterceptors(Configuration configuration) {
if (customMybatisInterceptors!=null){
for (Interceptor interceptor :customMybatisInterceptors){
configuration.addInterceptor(interceptor);
}
}
}
public void initMyBatisLogSqlExecutionTimePlugin(Configuration configuration) {
configuration.addInterceptor(new LogSqlExecutionTimePlugin());
}
public Configuration parseMybatisConfiguration(XMLConfigBuilder parser) {
Configuration configuration = parser.parse();
applyCustomMybatisCustomizations(configuration);
return configuration;
}
protected void applyCustomMybatisCustomizations(Configuration configuration) {
initCustomMybatisMappers(configuration);
if (dependentEngineMybatisTypeAliasConfigs != null) {
for (MybatisTypeAliasConfigurator typeAliasConfig : dependentEngineMybatisTypeAliasConfigs) {
typeAliasConfig.configure(configuration.getTypeAliasRegistry());
}
}
if (dependentEngineMybatisTypeHandlerConfigs != null) {
for (MybatisTypeHandlerConfigurator typeHandlerConfig : dependentEngineMybatisTypeHandlerConfigs) {
typeHandlerConfig.configure(configuration.getTypeHandlerRegistry());
}
}
parseDependentEngineMybatisXMLMappers(configuration);
parseCustomMybatisXMLMappers(configuration);
}
public void parseCustomMybatisXMLMappers(Configuration configuration) {
if (getCustomMybatisXMLMappers() != null) {
for (String resource : getCustomMybatisXMLMappers()) {
parseMybatisXmlMapping(configuration, resource);
}
}
}
public void parseDependentEngineMybatisXMLMappers(Configuration configuration) {
if (getDependentEngineMyBatisXmlMappers() != null) {
for (String resource : getDependentEngineMyBatisXmlMappers()) {
parseMybatisXmlMapping(configuration, resource);
}
}
}
protected void parseMybatisXmlMapping(Configuration configuration, String resource) {
// see XMLConfigBuilder.mapperElement()
XMLMapperBuilder mapperParser = new XMLMapperBuilder(getResourceAsStream(resource), configuration, resource, configuration.getSqlFragments());
mapperParser.parse();
}
protected InputStream getResourceAsStream(String resource) {
ClassLoader classLoader = getClassLoader();
if (classLoader != null) {
return getClassLoader().getResourceAsStream(resource);
} else {
return this.getClass().getClassLoader().getResourceAsStream(resource);
}
}
public void setMybatisMappingFile(String file) {
this.mybatisMappingFile = file;
}
public String getMybatisMappingFile() {
return mybatisMappingFile;
}
public abstract InputStream getMyBatisXmlConfigurationStream();
public void initConfigurators() {
allConfigurators = new ArrayList<>();
allConfigurators.addAll(getEngineSpecificEngineConfigurators());
// Configurators that are explicitly added to the config
if (configurators != null) {
allConfigurators.addAll(configurators);
}
// Auto discovery through ServiceLoader
if (enableConfiguratorServiceLoader) {
ClassLoader classLoader = getClassLoader();
if (classLoader == null) {
classLoader = ReflectUtil.getClassLoader();
}
ServiceLoader<EngineConfigurator> configuratorServiceLoader = ServiceLoader.load(EngineConfigurator.class, classLoader);
int nrOfServiceLoadedConfigurators = 0;
for (EngineConfigurator configurator : configuratorServiceLoader) {
allConfigurators.add(configurator);
nrOfServiceLoadedConfigurators++;
}
if (nrOfServiceLoadedConfigurators > 0) {
logger.info("Found {} auto-discoverable Process Engine Configurator{}", nrOfServiceLoadedConfigurators, nrOfServiceLoadedConfigurators > 1 ? "s" : "");
}
if (!allConfigurators.isEmpty()) {
// Order them according to the priorities (useful for dependent
// configurator)
allConfigurators.sort(new Comparator<EngineConfigurator>() {
@Override
public int compare(EngineConfigurator configurator1, EngineConfigurator configurator2) {
int priority1 = configurator1.getPriority();
int priority2 = configurator2.getPriority();
if (priority1 < priority2) {
return -1;
} else if (priority1 > priority2) {
return 1;
}
return 0;
}
});
// Execute the configurators
logger.info("Found {} Engine Configurators in total:", allConfigurators.size());
for (EngineConfigurator configurator : allConfigurators) {
logger.info("{} (priority:{})", configurator.getClass(), configurator.getPriority());
}
}
}
}
public void close() {
if (forceCloseMybatisConnectionPool && dataSource instanceof PooledDataSource) {
/*
* When the datasource is created by a Flowable engine (i.e. it's an instance of PooledDataSource),
* the connection pool needs to be closed when closing the engine.
* Note that calling forceCloseAll() multiple times (as is the case when running with multiple engine) is ok.
*/
((PooledDataSource) dataSource).forceCloseAll();
}
}
protected List<EngineConfigurator> getEngineSpecificEngineConfigurators() {
// meant to be overridden if needed
return Collections.emptyList();
}
public void configuratorsBeforeInit() {
for (EngineConfigurator configurator : allConfigurators) {
logger.info("Executing beforeInit() of {} (priority:{})", configurator.getClass(), configurator.getPriority());
configurator.beforeInit(this);
}
}
public void configuratorsAfterInit() {
for (EngineConfigurator configurator : allConfigurators) {
logger.info("Executing configure() of {} (priority:{})", configurator.getClass(), configurator.getPriority());
configurator.configure(this);
}
}
public LockManager getLockManager(String lockName) {
return new LockManagerImpl(commandExecutor, lockName, getLockPollRate(), getEngineCfgKey());
}
// getters and setters
// //////////////////////////////////////////////////////
public abstract String getEngineName();
public ClassLoader getClassLoader() {
return classLoader;
}
public AbstractEngineConfiguration setClassLoader(ClassLoader classLoader) {
this.classLoader = classLoader;
return this;
}
public boolean isUseClassForNameClassLoading() {
return useClassForNameClassLoading;
}
public AbstractEngineConfiguration setUseClassForNameClassLoading(boolean useClassForNameClassLoading) {
this.useClassForNameClassLoading = useClassForNameClassLoading;
return this;
}
public void addEngineLifecycleListener(EngineLifecycleListener engineLifecycleListener) {
if (this.engineLifecycleListeners == null) {
this.engineLifecycleListeners = new ArrayList<>();
}
this.engineLifecycleListeners.add(engineLifecycleListener);
}
public List<EngineLifecycleListener> getEngineLifecycleListeners() {
return engineLifecycleListeners;
}
public AbstractEngineConfiguration setEngineLifecycleListeners(List<EngineLifecycleListener> engineLifecycleListeners) {
this.engineLifecycleListeners = engineLifecycleListeners;
return this;
}
public String getDatabaseType() {
return databaseType;
}
public AbstractEngineConfiguration setDatabaseType(String databaseType) {
this.databaseType = databaseType;
return this;
}
public DataSource getDataSource() {
return dataSource;
}
public AbstractEngineConfiguration setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
return this;
}
public SchemaManager getSchemaManager() {
return schemaManager;
}
public AbstractEngineConfiguration setSchemaManager(SchemaManager schemaManager) {
this.schemaManager = schemaManager;
return this;
}
public SchemaManager getCommonSchemaManager() {
return commonSchemaManager;
}
public AbstractEngineConfiguration setCommonSchemaManager(SchemaManager commonSchemaManager) {
this.commonSchemaManager = commonSchemaManager;
return this;
}
public Command<Void> getSchemaManagementCmd() {
return schemaManagementCmd;
}
public AbstractEngineConfiguration setSchemaManagementCmd(Command<Void> schemaManagementCmd) {
this.schemaManagementCmd = schemaManagementCmd;
return this;
}
public String getJdbcDriver() {
return jdbcDriver;
}
public AbstractEngineConfiguration setJdbcDriver(String jdbcDriver) {
this.jdbcDriver = jdbcDriver;
return this;
}
public String getJdbcUrl() {
return jdbcUrl;
}
public AbstractEngineConfiguration setJdbcUrl(String jdbcUrl) {
this.jdbcUrl = jdbcUrl;
return this;
}
public String getJdbcUsername() {
return jdbcUsername;
}
public AbstractEngineConfiguration setJdbcUsername(String jdbcUsername) {
this.jdbcUsername = jdbcUsername;
return this;
}
public String getJdbcPassword() {
return jdbcPassword;
}
public AbstractEngineConfiguration setJdbcPassword(String jdbcPassword) {
this.jdbcPassword = jdbcPassword;
return this;
}
public int getJdbcMaxActiveConnections() {
return jdbcMaxActiveConnections;
}
public AbstractEngineConfiguration setJdbcMaxActiveConnections(int jdbcMaxActiveConnections) {
this.jdbcMaxActiveConnections = jdbcMaxActiveConnections;
return this;
}
public int getJdbcMaxIdleConnections() {
return jdbcMaxIdleConnections;
}
public AbstractEngineConfiguration setJdbcMaxIdleConnections(int jdbcMaxIdleConnections) {
this.jdbcMaxIdleConnections = jdbcMaxIdleConnections;
return this;
}
public int getJdbcMaxCheckoutTime() {
return jdbcMaxCheckoutTime;
}
public AbstractEngineConfiguration setJdbcMaxCheckoutTime(int jdbcMaxCheckoutTime) {
this.jdbcMaxCheckoutTime = jdbcMaxCheckoutTime;
return this;
}
public int getJdbcMaxWaitTime() {
return jdbcMaxWaitTime;
}
public AbstractEngineConfiguration setJdbcMaxWaitTime(int jdbcMaxWaitTime) {
this.jdbcMaxWaitTime = jdbcMaxWaitTime;
return this;
}
public boolean isJdbcPingEnabled() {
return jdbcPingEnabled;
}
public AbstractEngineConfiguration setJdbcPingEnabled(boolean jdbcPingEnabled) {
this.jdbcPingEnabled = jdbcPingEnabled;
return this;
}
public int getJdbcPingConnectionNotUsedFor() {
return jdbcPingConnectionNotUsedFor;
}
public AbstractEngineConfiguration setJdbcPingConnectionNotUsedFor(int jdbcPingConnectionNotUsedFor) {
this.jdbcPingConnectionNotUsedFor = jdbcPingConnectionNotUsedFor;
return this;
}
public int getJdbcDefaultTransactionIsolationLevel() {
return jdbcDefaultTransactionIsolationLevel;
}
public AbstractEngineConfiguration setJdbcDefaultTransactionIsolationLevel(int jdbcDefaultTransactionIsolationLevel) {
this.jdbcDefaultTransactionIsolationLevel = jdbcDefaultTransactionIsolationLevel;
return this;
}
public String getJdbcPingQuery() {
return jdbcPingQuery;
}
public AbstractEngineConfiguration setJdbcPingQuery(String jdbcPingQuery) {
this.jdbcPingQuery = jdbcPingQuery;
return this;
}
public String getDataSourceJndiName() {
return dataSourceJndiName;
}
public AbstractEngineConfiguration setDataSourceJndiName(String dataSourceJndiName) {
this.dataSourceJndiName = dataSourceJndiName;
return this;
}
public CommandConfig getSchemaCommandConfig() {
return schemaCommandConfig;
}
public AbstractEngineConfiguration setSchemaCommandConfig(CommandConfig schemaCommandConfig) {
this.schemaCommandConfig = schemaCommandConfig;
return this;
}
public boolean isTransactionsExternallyManaged() {
return transactionsExternallyManaged;
}
public AbstractEngineConfiguration setTransactionsExternallyManaged(boolean transactionsExternallyManaged) {
this.transactionsExternallyManaged = transactionsExternallyManaged;
return this;
}
public Map<Object, Object> getBeans() {
return beans;
}
public AbstractEngineConfiguration setBeans(Map<Object, Object> beans) {
this.beans = beans;
return this;
}
public IdGenerator getIdGenerator() {
return idGenerator;
}
public AbstractEngineConfiguration setIdGenerator(IdGenerator idGenerator) {
this.idGenerator = idGenerator;
return this;
}
public boolean isUsePrefixId() {
return usePrefixId;
}
public AbstractEngineConfiguration setUsePrefixId(boolean usePrefixId) {
this.usePrefixId = usePrefixId;
return this;
}
public String getXmlEncoding() {
return xmlEncoding;
}
public AbstractEngineConfiguration setXmlEncoding(String xmlEncoding) {
this.xmlEncoding = xmlEncoding;
return this;
}
public CommandConfig getDefaultCommandConfig() {
return defaultCommandConfig;
}
public AbstractEngineConfiguration setDefaultCommandConfig(CommandConfig defaultCommandConfig) {
this.defaultCommandConfig = defaultCommandConfig;
return this;
}
public CommandExecutor getCommandExecutor() {
return commandExecutor;
}
public AbstractEngineConfiguration setCommandExecutor(CommandExecutor commandExecutor) {
this.commandExecutor = commandExecutor;
return this;
}
public CommandContextFactory getCommandContextFactory() {
return commandContextFactory;
}
public AbstractEngineConfiguration setCommandContextFactory(CommandContextFactory commandContextFactory) {
this.commandContextFactory = commandContextFactory;
return this;
}
public CommandInterceptor getCommandInvoker() {
return commandInvoker;
}
public AbstractEngineConfiguration setCommandInvoker(CommandInterceptor commandInvoker) {
this.commandInvoker = commandInvoker;
return this;
}
public AgendaOperationRunner getAgendaOperationRunner() {
return agendaOperationRunner;
}
public AbstractEngineConfiguration setAgendaOperationRunner(AgendaOperationRunner agendaOperationRunner) {
this.agendaOperationRunner = agendaOperationRunner;
return this;
}
public List<CommandInterceptor> getCustomPreCommandInterceptors() {
return customPreCommandInterceptors;
}
public AbstractEngineConfiguration setCustomPreCommandInterceptors(List<CommandInterceptor> customPreCommandInterceptors) {
this.customPreCommandInterceptors = customPreCommandInterceptors;
return this;
}
public List<CommandInterceptor> getCustomPostCommandInterceptors() {
return customPostCommandInterceptors;
}
public AbstractEngineConfiguration setCustomPostCommandInterceptors(List<CommandInterceptor> customPostCommandInterceptors) {
this.customPostCommandInterceptors = customPostCommandInterceptors;
return this;
}
public List<CommandInterceptor> getCommandInterceptors() {
return commandInterceptors;
}
public AbstractEngineConfiguration setCommandInterceptors(List<CommandInterceptor> commandInterceptors) {
this.commandInterceptors = commandInterceptors;
return this;
}
public Map<String, AbstractEngineConfiguration> getEngineConfigurations() {
return engineConfigurations;
}
public AbstractEngineConfiguration setEngineConfigurations(Map<String, AbstractEngineConfiguration> engineConfigurations) {
this.engineConfigurations = engineConfigurations;
return this;
}
public void addEngineConfiguration(String key, String scopeType, AbstractEngineConfiguration engineConfiguration) {
if (engineConfigurations == null) {
engineConfigurations = new HashMap<>();
}
engineConfigurations.put(key, engineConfiguration);
engineConfigurations.put(scopeType, engineConfiguration);
}
public Map<String, AbstractServiceConfiguration> getServiceConfigurations() {
return serviceConfigurations;
}
public AbstractEngineConfiguration setServiceConfigurations(Map<String, AbstractServiceConfiguration> serviceConfigurations) {
this.serviceConfigurations = serviceConfigurations;
return this;
}
public void addServiceConfiguration(String key, AbstractServiceConfiguration serviceConfiguration) {
if (serviceConfigurations == null) {
serviceConfigurations = new HashMap<>();
}
serviceConfigurations.put(key, serviceConfiguration);
}
public Map<String, EventRegistryEventConsumer> getEventRegistryEventConsumers() {
return eventRegistryEventConsumers;
}
public AbstractEngineConfiguration setEventRegistryEventConsumers(Map<String, EventRegistryEventConsumer> eventRegistryEventConsumers) {
this.eventRegistryEventConsumers = eventRegistryEventConsumers;
return this;
}
public void addEventRegistryEventConsumer(String key, EventRegistryEventConsumer eventRegistryEventConsumer) {
if (eventRegistryEventConsumers == null) {
eventRegistryEventConsumers = new HashMap<>();
}
eventRegistryEventConsumers.put(key, eventRegistryEventConsumer);
}
public AbstractEngineConfiguration setDefaultCommandInterceptors(Collection<? extends CommandInterceptor> defaultCommandInterceptors) {
this.defaultCommandInterceptors = defaultCommandInterceptors;
return this;
}
public SqlSessionFactory getSqlSessionFactory() {
return sqlSessionFactory;
}
public AbstractEngineConfiguration setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
return this;
}
public boolean isDbHistoryUsed() {
return isDbHistoryUsed;
}
public AbstractEngineConfiguration setDbHistoryUsed(boolean isDbHistoryUsed) {
this.isDbHistoryUsed = isDbHistoryUsed;
return this;
}
public DbSqlSessionFactory getDbSqlSessionFactory() {
return dbSqlSessionFactory;
}
public AbstractEngineConfiguration setDbSqlSessionFactory(DbSqlSessionFactory dbSqlSessionFactory) {
this.dbSqlSessionFactory = dbSqlSessionFactory;
return this;
}
public TransactionFactory getTransactionFactory() {
return transactionFactory;
}
public AbstractEngineConfiguration setTransactionFactory(TransactionFactory transactionFactory) {
this.transactionFactory = transactionFactory;
return this;
}
public TransactionContextFactory getTransactionContextFactory() {
return transactionContextFactory;
}
public AbstractEngineConfiguration setTransactionContextFactory(TransactionContextFactory transactionContextFactory) {
this.transactionContextFactory = transactionContextFactory;
return this;
}
public int getMaxNrOfStatementsInBulkInsert() {
return maxNrOfStatementsInBulkInsert;
}
public AbstractEngineConfiguration setMaxNrOfStatementsInBulkInsert(int maxNrOfStatementsInBulkInsert) {
this.maxNrOfStatementsInBulkInsert = maxNrOfStatementsInBulkInsert;
return this;
}
public boolean isBulkInsertEnabled() {
return isBulkInsertEnabled;
}
public AbstractEngineConfiguration setBulkInsertEnabled(boolean isBulkInsertEnabled) {
this.isBulkInsertEnabled = isBulkInsertEnabled;
return this;
}
public Set<Class<?>> getCustomMybatisMappers() {
return customMybatisMappers;
}
public AbstractEngineConfiguration setCustomMybatisMappers(Set<Class<?>> customMybatisMappers) {
this.customMybatisMappers = customMybatisMappers;
return this;
}
public Set<String> getCustomMybatisXMLMappers() {
return customMybatisXMLMappers;
}
public AbstractEngineConfiguration setCustomMybatisXMLMappers(Set<String> customMybatisXMLMappers) {
this.customMybatisXMLMappers = customMybatisXMLMappers;
return this;
}
public Set<String> getDependentEngineMyBatisXmlMappers() {
return dependentEngineMyBatisXmlMappers;
}
public AbstractEngineConfiguration setCustomMybatisInterceptors(List<Interceptor> customMybatisInterceptors) {
this.customMybatisInterceptors = customMybatisInterceptors;
return this;
}
public List<Interceptor> getCustomMybatisInterceptors() {
return customMybatisInterceptors;
}
public AbstractEngineConfiguration setDependentEngineMyBatisXmlMappers(Set<String> dependentEngineMyBatisXmlMappers) {
this.dependentEngineMyBatisXmlMappers = dependentEngineMyBatisXmlMappers;
return this;
}
public List<MybatisTypeAliasConfigurator> getDependentEngineMybatisTypeAliasConfigs() {
return dependentEngineMybatisTypeAliasConfigs;
}
public AbstractEngineConfiguration setDependentEngineMybatisTypeAliasConfigs(List<MybatisTypeAliasConfigurator> dependentEngineMybatisTypeAliasConfigs) {
this.dependentEngineMybatisTypeAliasConfigs = dependentEngineMybatisTypeAliasConfigs;
return this;
}
public List<MybatisTypeHandlerConfigurator> getDependentEngineMybatisTypeHandlerConfigs() {
return dependentEngineMybatisTypeHandlerConfigs;
}
public AbstractEngineConfiguration setDependentEngineMybatisTypeHandlerConfigs(List<MybatisTypeHandlerConfigurator> dependentEngineMybatisTypeHandlerConfigs) {
this.dependentEngineMybatisTypeHandlerConfigs = dependentEngineMybatisTypeHandlerConfigs;
return this;
}
public List<SessionFactory> getCustomSessionFactories() {
return customSessionFactories;
}
public AbstractEngineConfiguration addCustomSessionFactory(SessionFactory sessionFactory) {
if (customSessionFactories == null) {
customSessionFactories = new ArrayList<>();
}
customSessionFactories.add(sessionFactory);
return this;
}
public AbstractEngineConfiguration setCustomSessionFactories(List<SessionFactory> customSessionFactories) {
this.customSessionFactories = customSessionFactories;
return this;
}
public boolean isUsingRelationalDatabase() {
return usingRelationalDatabase;
}
public AbstractEngineConfiguration setUsingRelationalDatabase(boolean usingRelationalDatabase) {
this.usingRelationalDatabase = usingRelationalDatabase;
return this;
}
public boolean isUsingSchemaMgmt() {
return usingSchemaMgmt;
}
public AbstractEngineConfiguration setUsingSchemaMgmt(boolean usingSchema) {
this.usingSchemaMgmt = usingSchema;
return this;
}
public String getDatabaseTablePrefix() {
return databaseTablePrefix;
}
public AbstractEngineConfiguration setDatabaseTablePrefix(String databaseTablePrefix) {
this.databaseTablePrefix = databaseTablePrefix;
return this;
}
public String getDatabaseWildcardEscapeCharacter() {
return databaseWildcardEscapeCharacter;
}
public AbstractEngineConfiguration setDatabaseWildcardEscapeCharacter(String databaseWildcardEscapeCharacter) {
this.databaseWildcardEscapeCharacter = databaseWildcardEscapeCharacter;
return this;
}
public String getDatabaseCatalog() {
return databaseCatalog;
}
public AbstractEngineConfiguration setDatabaseCatalog(String databaseCatalog) {
this.databaseCatalog = databaseCatalog;
return this;
}
public String getDatabaseSchema() {
return databaseSchema;
}
public AbstractEngineConfiguration setDatabaseSchema(String databaseSchema) {
this.databaseSchema = databaseSchema;
return this;
}
public boolean isTablePrefixIsSchema() {
return tablePrefixIsSchema;
}
public AbstractEngineConfiguration setTablePrefixIsSchema(boolean tablePrefixIsSchema) {
this.tablePrefixIsSchema = tablePrefixIsSchema;
return this;
}
public boolean isAlwaysLookupLatestDefinitionVersion() {
return alwaysLookupLatestDefinitionVersion;
}
public AbstractEngineConfiguration setAlwaysLookupLatestDefinitionVersion(boolean alwaysLookupLatestDefinitionVersion) {
this.alwaysLookupLatestDefinitionVersion = alwaysLookupLatestDefinitionVersion;
return this;
}
public boolean isFallbackToDefaultTenant() {
return fallbackToDefaultTenant;
}
public AbstractEngineConfiguration setFallbackToDefaultTenant(boolean fallbackToDefaultTenant) {
this.fallbackToDefaultTenant = fallbackToDefaultTenant;
return this;
}
/**
* @return name of the default tenant
* @deprecated use {@link AbstractEngineConfiguration#getDefaultTenantProvider()} instead
*/
@Deprecated
public String getDefaultTenantValue() {
return getDefaultTenantProvider().getDefaultTenant(null, null, null);
}
public AbstractEngineConfiguration setDefaultTenantValue(String defaultTenantValue) {
this.defaultTenantProvider = (tenantId, scope, scopeKey) -> defaultTenantValue;
return this;
}
public DefaultTenantProvider getDefaultTenantProvider() {
return defaultTenantProvider;
}
public AbstractEngineConfiguration setDefaultTenantProvider(DefaultTenantProvider defaultTenantProvider) {
this.defaultTenantProvider = defaultTenantProvider;
return this;
}
public boolean isEnableLogSqlExecutionTime() {
return enableLogSqlExecutionTime;
}
public void setEnableLogSqlExecutionTime(boolean enableLogSqlExecutionTime) {
this.enableLogSqlExecutionTime = enableLogSqlExecutionTime;
}
public Map<Class<?>, SessionFactory> getSessionFactories() {
return sessionFactories;
}
public AbstractEngineConfiguration setSessionFactories(Map<Class<?>, SessionFactory> sessionFactories) {
this.sessionFactories = sessionFactories;
return this;
}
public String getDatabaseSchemaUpdate() {
return databaseSchemaUpdate;
}
public AbstractEngineConfiguration setDatabaseSchemaUpdate(String databaseSchemaUpdate) {
this.databaseSchemaUpdate = databaseSchemaUpdate;
return this;
}
public boolean isUseLockForDatabaseSchemaUpdate() {
return useLockForDatabaseSchemaUpdate;
}
public AbstractEngineConfiguration setUseLockForDatabaseSchemaUpdate(boolean useLockForDatabaseSchemaUpdate) {
this.useLockForDatabaseSchemaUpdate = useLockForDatabaseSchemaUpdate;
return this;
}
public boolean isEnableEventDispatcher() {
return enableEventDispatcher;
}
public AbstractEngineConfiguration setEnableEventDispatcher(boolean enableEventDispatcher) {
this.enableEventDispatcher = enableEventDispatcher;
return this;
}
public FlowableEventDispatcher getEventDispatcher() {
return eventDispatcher;
}
public AbstractEngineConfiguration setEventDispatcher(FlowableEventDispatcher eventDispatcher) {
this.eventDispatcher = eventDispatcher;
return this;
}
public List<FlowableEventListener> getEventListeners() {
return eventListeners;
}
public AbstractEngineConfiguration setEventListeners(List<FlowableEventListener> eventListeners) {
this.eventListeners = eventListeners;
return this;
}
public Map<String, List<FlowableEventListener>> getTypedEventListeners() {
return typedEventListeners;
}
public AbstractEngineConfiguration setTypedEventListeners(Map<String, List<FlowableEventListener>> typedEventListeners) {
this.typedEventListeners = typedEventListeners;
return this;
}
public List<EventDispatchAction> getAdditionalEventDispatchActions() {
return additionalEventDispatchActions;
}
public AbstractEngineConfiguration setAdditionalEventDispatchActions(List<EventDispatchAction> additionalEventDispatchActions) {
this.additionalEventDispatchActions = additionalEventDispatchActions;
return this;
}
public void initEventDispatcher() {
if (this.eventDispatcher == null) {
this.eventDispatcher = new FlowableEventDispatcherImpl();
}
initAdditionalEventDispatchActions();
this.eventDispatcher.setEnabled(enableEventDispatcher);
initEventListeners();
initTypedEventListeners();
}
protected void initEventListeners() {
if (eventListeners != null) {
for (FlowableEventListener listenerToAdd : eventListeners) {
this.eventDispatcher.addEventListener(listenerToAdd);
}
}
}
protected void initAdditionalEventDispatchActions() {
if (this.additionalEventDispatchActions == null) {
this.additionalEventDispatchActions = new ArrayList<>();
}
}
protected void initTypedEventListeners() {
if (typedEventListeners != null) {
for (Map.Entry<String, List<FlowableEventListener>> listenersToAdd : typedEventListeners.entrySet()) {
// Extract types from the given string
FlowableEngineEventType[] types = FlowableEngineEventType.getTypesFromString(listenersToAdd.getKey());
for (FlowableEventListener listenerToAdd : listenersToAdd.getValue()) {
this.eventDispatcher.addEventListener(listenerToAdd, types);
}
}
}
}
public boolean isLoggingSessionEnabled() {
return loggingListener != null;
}
public LoggingListener getLoggingListener() {
return loggingListener;
}
public void setLoggingListener(LoggingListener loggingListener) {
this.loggingListener = loggingListener;
}
public Clock getClock() {
return clock;
}
public AbstractEngineConfiguration setClock(Clock clock) {
this.clock = clock;
return this;
}
public ObjectMapper getObjectMapper() {
return objectMapper;
}
public AbstractEngineConfiguration setObjectMapper(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
return this;
}
public int getMaxLengthString() {
if (maxLengthStringVariableType == -1) {
if ("oracle".equalsIgnoreCase(databaseType)) {
return DEFAULT_ORACLE_MAX_LENGTH_STRING;
} else {
return DEFAULT_GENERIC_MAX_LENGTH_STRING;
}
} else {
return maxLengthStringVariableType;
}
}
public int getMaxLengthStringVariableType() {
return maxLengthStringVariableType;
}
public AbstractEngineConfiguration setMaxLengthStringVariableType(int maxLengthStringVariableType) {
this.maxLengthStringVariableType = maxLengthStringVariableType;
return this;
}
public PropertyDataManager getPropertyDataManager() {
return propertyDataManager;
}
public Duration getLockPollRate() {
return lockPollRate;
}
public AbstractEngineConfiguration setLockPollRate(Duration lockPollRate) {
this.lockPollRate = lockPollRate;
return this;
}
public Duration getSchemaLockWaitTime() {
return schemaLockWaitTime;
}
public void setSchemaLockWaitTime(Duration schemaLockWaitTime) {
this.schemaLockWaitTime = schemaLockWaitTime;
}
public AbstractEngineConfiguration setPropertyDataManager(PropertyDataManager propertyDataManager) {
this.propertyDataManager = propertyDataManager;
return this;
}
public PropertyEntityManager getPropertyEntityManager() {
return propertyEntityManager;
}
public AbstractEngineConfiguration setPropertyEntityManager(PropertyEntityManager propertyEntityManager) {
this.propertyEntityManager = propertyEntityManager;
return this;
}
public ByteArrayDataManager getByteArrayDataManager() {
return byteArrayDataManager;
}
public AbstractEngineConfiguration setByteArrayDataManager(ByteArrayDataManager byteArrayDataManager) {
this.byteArrayDataManager = byteArrayDataManager;
return this;
}
public ByteArrayEntityManager getByteArrayEntityManager() {
return byteArrayEntityManager;
}
public AbstractEngineConfiguration setByteArrayEntityManager(ByteArrayEntityManager byteArrayEntityManager) {
this.byteArrayEntityManager = byteArrayEntityManager;
return this;
}
public TableDataManager getTableDataManager() {
return tableDataManager;
}
public AbstractEngineConfiguration setTableDataManager(TableDataManager tableDataManager) {
this.tableDataManager = tableDataManager;
return this;
}
public List<EngineDeployer> getDeployers() {
return deployers;
}
public AbstractEngineConfiguration setDeployers(List<EngineDeployer> deployers) {
this.deployers = deployers;
return this;
}
public List<EngineDeployer> getCustomPreDeployers() {
return customPreDeployers;
}
public AbstractEngineConfiguration setCustomPreDeployers(List<EngineDeployer> customPreDeployers) {
this.customPreDeployers = customPreDeployers;
return this;
}
public List<EngineDeployer> getCustomPostDeployers() {
return customPostDeployers;
}
public AbstractEngineConfiguration setCustomPostDeployers(List<EngineDeployer> customPostDeployers) {
this.customPostDeployers = customPostDeployers;
return this;
}
public boolean isEnableConfiguratorServiceLoader() {
return enableConfiguratorServiceLoader;
}
public AbstractEngineConfiguration setEnableConfiguratorServiceLoader(boolean enableConfiguratorServiceLoader) {
this.enableConfiguratorServiceLoader = enableConfiguratorServiceLoader;
return this;
}
public List<EngineConfigurator> getConfigurators() {
return configurators;
}
public AbstractEngineConfiguration addConfigurator(EngineConfigurator configurator) {
if (configurators == null) {
configurators = new ArrayList<>();
}
configurators.add(configurator);
return this;
}
/**
* @return All {@link EngineConfigurator} instances. Will only contain values after init of the engine.
* Use the {@link #getConfigurators()} or {@link #addConfigurator(EngineConfigurator)} methods otherwise.
*/
public List<EngineConfigurator> getAllConfigurators() {
return allConfigurators;
}
public AbstractEngineConfiguration setConfigurators(List<EngineConfigurator> configurators) {
this.configurators = configurators;
return this;
}
public EngineConfigurator getIdmEngineConfigurator() {
return idmEngineConfigurator;
}
public AbstractEngineConfiguration setIdmEngineConfigurator(EngineConfigurator idmEngineConfigurator) {
this.idmEngineConfigurator = idmEngineConfigurator;
return this;
}
public EngineConfigurator getEventRegistryConfigurator() {
return eventRegistryConfigurator;
}
public AbstractEngineConfiguration setEventRegistryConfigurator(EngineConfigurator eventRegistryConfigurator) {
this.eventRegistryConfigurator = eventRegistryConfigurator;
return this;
}
public AbstractEngineConfiguration setForceCloseMybatisConnectionPool(boolean forceCloseMybatisConnectionPool) {
this.forceCloseMybatisConnectionPool = forceCloseMybatisConnectionPool;
return this;
}
public boolean isForceCloseMybatisConnectionPool() {
return forceCloseMybatisConnectionPool;
}
}
================================================
FILE: sql/dm/flowable-patch/src/main/resources/META-INF/package-info.md
================================================
防止IDEA将`.`和`/`混为一谈
================================================
FILE: sql/dm/flowable-patch/src/main/resources/META-INF/services/liquibase.database.Database
================================================
liquibase.database.core.CockroachDatabase
liquibase.database.core.DB2Database
liquibase.database.core.Db2zDatabase
liquibase.database.core.DerbyDatabase
liquibase.database.core.Firebird3Database
liquibase.database.core.FirebirdDatabase
liquibase.database.core.H2Database
liquibase.database.core.HsqlDatabase
liquibase.database.core.InformixDatabase
liquibase.database.core.Ingres9Database
liquibase.database.core.MSSQLDatabase
liquibase.database.core.MariaDBDatabase
liquibase.database.core.MockDatabase
liquibase.database.core.MySQLDatabase
liquibase.database.core.OracleDatabase
liquibase.database.core.PostgresDatabase
liquibase.database.core.SQLiteDatabase
liquibase.database.core.SybaseASADatabase
liquibase.database.core.SybaseDatabase
liquibase.database.core.DmDatabase
liquibase.database.core.UnsupportedDatabase
================================================
FILE: sql/dm/quartz.sql
================================================
--
-- A hint submitted by a user: Oracle DB MUST be created as "shared" and the
-- job_queue_processes parameter must be greater than 2
-- However, these settings are pretty much standard after any
-- Oracle install, so most users need not worry about this.
--
-- Many other users (including the primary author of Quartz) have had success
-- running in dedicated mode, so only consider the above as a hint ;-)
--
drop table if exists qrtz_calendars;
drop table if exists qrtz_fired_triggers;
drop table if exists qrtz_blob_triggers;
drop table if exists qrtz_cron_triggers;
drop table if exists qrtz_simple_triggers;
drop table if exists qrtz_simprop_triggers;
drop table if exists qrtz_triggers;
drop table if exists qrtz_job_details;
drop table if exists qrtz_paused_trigger_grps;
drop table if exists qrtz_locks;
drop table if exists qrtz_scheduler_state;
CREATE TABLE qrtz_job_details
(
SCHED_NAME VARCHAR2(120) NOT NULL,
JOB_NAME VARCHAR2(200) NOT NULL,
JOB_GROUP VARCHAR2(200) NOT NULL,
DESCRIPTION VARCHAR2(250) NULL,
JOB_CLASS_NAME VARCHAR2(250) NOT NULL,
IS_DURABLE VARCHAR2(1) NOT NULL,
IS_NONCONCURRENT VARCHAR2(1) NOT NULL,
IS_UPDATE_DATA VARCHAR2(1) NOT NULL,
REQUESTS_RECOVERY VARCHAR2(1) NOT NULL,
JOB_DATA BLOB NULL,
CONSTRAINT QRTZ_JOB_DETAILS_PK PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
);
CREATE TABLE qrtz_triggers
(
SCHED_NAME VARCHAR2(120) NOT NULL,
TRIGGER_NAME VARCHAR2(200) NOT NULL,
TRIGGER_GROUP VARCHAR2(200) NOT NULL,
JOB_NAME VARCHAR2(200) NOT NULL,
JOB_GROUP VARCHAR2(200) NOT NULL,
DESCRIPTION VARCHAR2(250) NULL,
NEXT_FIRE_TIME NUMBER(19) NULL,
PREV_FIRE_TIME NUMBER(19) NULL,
PRIORITY NUMBER(13) NULL,
TRIGGER_STATE VARCHAR2(16) NOT NULL,
TRIGGER_TYPE VARCHAR2(8) NOT NULL,
START_TIME NUMBER(19) NOT NULL,
END_TIME NUMBER(19) NULL,
CALENDAR_NAME VARCHAR2(200) NULL,
MISFIRE_INSTR NUMBER(2) NULL,
JOB_DATA BLOB NULL,
CONSTRAINT QRTZ_TRIGGERS_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
CONSTRAINT QRTZ_TRIGGER_TO_JOBS_FK 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 VARCHAR2(120) NOT NULL,
TRIGGER_NAME VARCHAR2(200) NOT NULL,
TRIGGER_GROUP VARCHAR2(200) NOT NULL,
REPEAT_COUNT NUMBER(7) NOT NULL,
REPEAT_INTERVAL NUMBER(12) NOT NULL,
TIMES_TRIGGERED NUMBER(10) NOT NULL,
CONSTRAINT QRTZ_SIMPLE_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
CONSTRAINT QRTZ_SIMPLE_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);
CREATE TABLE qrtz_cron_triggers
(
SCHED_NAME VARCHAR2(120) NOT NULL,
TRIGGER_NAME VARCHAR2(200) NOT NULL,
TRIGGER_GROUP VARCHAR2(200) NOT NULL,
CRON_EXPRESSION VARCHAR2(120) NOT NULL,
TIME_ZONE_ID VARCHAR2(80),
CONSTRAINT QRTZ_CRON_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
CONSTRAINT QRTZ_CRON_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);
CREATE TABLE qrtz_simprop_triggers
(
SCHED_NAME VARCHAR2(120) NOT NULL,
TRIGGER_NAME VARCHAR2(200) NOT NULL,
TRIGGER_GROUP VARCHAR2(200) NOT NULL,
STR_PROP_1 VARCHAR2(512) NULL,
STR_PROP_2 VARCHAR2(512) NULL,
STR_PROP_3 VARCHAR2(512) NULL,
INT_PROP_1 NUMBER(10) NULL,
INT_PROP_2 NUMBER(10) NULL,
LONG_PROP_1 NUMBER(19) NULL,
LONG_PROP_2 NUMBER(19) NULL,
DEC_PROP_1 NUMERIC(13,4) NULL,
DEC_PROP_2 NUMERIC(13,4) NULL,
BOOL_PROP_1 VARCHAR2(1) NULL,
BOOL_PROP_2 VARCHAR2(1) NULL,
TIME_ZONE_ID VARCHAR2(80) NULL,
CONSTRAINT QRTZ_SIMPROP_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
CONSTRAINT QRTZ_SIMPROP_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);
CREATE TABLE qrtz_blob_triggers
(
SCHED_NAME VARCHAR2(120) NOT NULL,
TRIGGER_NAME VARCHAR2(200) NOT NULL,
TRIGGER_GROUP VARCHAR2(200) NOT NULL,
BLOB_DATA BLOB NULL,
CONSTRAINT QRTZ_BLOB_TRIG_PK PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
CONSTRAINT QRTZ_BLOB_TRIG_TO_TRIG_FK FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
);
CREATE TABLE qrtz_calendars
(
SCHED_NAME VARCHAR2(120) NOT NULL,
CALENDAR_NAME VARCHAR2(200) NOT NULL,
CALENDAR BLOB NOT NULL,
CONSTRAINT QRTZ_CALENDARS_PK PRIMARY KEY (SCHED_NAME,CALENDAR_NAME)
);
CREATE TABLE qrtz_paused_trigger_grps
(
SCHED_NAME VARCHAR2(120) NOT NULL,
TRIGGER_GROUP VARCHAR2(200) NOT NULL,
CONSTRAINT QRTZ_PAUSED_TRIG_GRPS_PK PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)
);
CREATE TABLE qrtz_fired_triggers
(
SCHED_NAME VARCHAR2(120) NOT NULL,
ENTRY_ID VARCHAR2(140) NOT NULL,
TRIGGER_NAME VARCHAR2(200) NOT NULL,
TRIGGER_GROUP VARCHAR2(200) NOT NULL,
INSTANCE_NAME VARCHAR2(200) NOT NULL,
FIRED_TIME NUMBER(19) NOT NULL,
SCHED_TIME NUMBER(19) NOT NULL,
PRIORITY NUMBER(13) NOT NULL,
STATE VARCHAR2(16) NOT NULL,
JOB_NAME VARCHAR2(200) NULL,
JOB_GROUP VARCHAR2(200) NULL,
IS_NONCONCURRENT VARCHAR2(1) NULL,
REQUESTS_RECOVERY VARCHAR2(1) NULL,
CONSTRAINT QRTZ_FIRED_TRIGGER_PK PRIMARY KEY (SCHED_NAME,ENTRY_ID)
);
CREATE TABLE qrtz_scheduler_state
(
SCHED_NAME VARCHAR2(120) NOT NULL,
INSTANCE_NAME VARCHAR2(200) NOT NULL,
LAST_CHECKIN_TIME NUMBER(19) NOT NULL,
CHECKIN_INTERVAL NUMBER(13) NOT NULL,
CONSTRAINT QRTZ_SCHEDULER_STATE_PK PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)
);
CREATE TABLE qrtz_locks
(
SCHED_NAME VARCHAR2(120) NOT NULL,
LOCK_NAME VARCHAR2(40) NOT NULL,
CONSTRAINT QRTZ_LOCKS_PK PRIMARY KEY (SCHED_NAME,LOCK_NAME)
);
create index idx_qrtz_j_req_recovery on qrtz_job_details(SCHED_NAME,REQUESTS_RECOVERY);
create index idx_qrtz_j_grp on qrtz_job_details(SCHED_NAME,JOB_GROUP);
create index idx_qrtz_t_j on qrtz_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP);
create index idx_qrtz_t_jg on qrtz_triggers(SCHED_NAME,JOB_GROUP);
create index idx_qrtz_t_c on qrtz_triggers(SCHED_NAME,CALENDAR_NAME);
create index idx_qrtz_t_g on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP);
create index idx_qrtz_t_state on qrtz_triggers(SCHED_NAME,TRIGGER_STATE);
create index idx_qrtz_t_n_state on qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE);
create index idx_qrtz_t_n_g_state on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE);
create index idx_qrtz_t_next_fire_time on qrtz_triggers(SCHED_NAME,NEXT_FIRE_TIME);
create index idx_qrtz_t_nft_st on qrtz_triggers(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME);
create index idx_qrtz_t_nft_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME);
create index idx_qrtz_t_nft_st_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE);
create index idx_qrtz_t_nft_st_misfire_grp on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE);
create index idx_qrtz_ft_trig_inst_name on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME);
create index idx_qrtz_ft_inst_job_req_rcvry on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY);
create index idx_qrtz_ft_j_g on qrtz_fired_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP);
create index idx_qrtz_ft_jg on qrtz_fired_triggers(SCHED_NAME,JOB_GROUP);
create index idx_qrtz_ft_t_g on qrtz_fired_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
create index idx_qrtz_ft_tg on qrtz_fired_triggers(SCHED_NAME,TRIGGER_GROUP);
================================================
FILE: sql/dm/ruoyi-vue-pro-dm8.sql
================================================
/*
Yudao Database Transfer Tool
Source Server Type : MySQL
Target Server Type : DM8
Date: 2025-05-22 21:49:51
*/
-- ----------------------------
-- Table structure for infra_api_access_log
-- ----------------------------
CREATE TABLE infra_api_access_log
(
id bigint NOT NULL PRIMARY KEY IDENTITY,
trace_id varchar(64) DEFAULT '' NULL,
user_id bigint DEFAULT 0 NOT NULL,
user_type smallint DEFAULT 0 NOT NULL,
application_name varchar(50) NOT NULL,
request_method varchar(16) DEFAULT '' NULL,
request_url varchar(255) DEFAULT '' NULL,
request_params text NULL,
response_body text NULL,
user_ip varchar(50) NOT NULL,
user_agent varchar(512) NOT NULL,
operate_module varchar(50) DEFAULT NULL NULL,
operate_name varchar(50) DEFAULT NULL NULL,
operate_type smallint DEFAULT 0 NULL,
begin_time datetime NOT NULL,
end_time datetime NOT NULL,
duration int NOT NULL,
result_code int DEFAULT 0 NOT NULL,
result_msg varchar(512) DEFAULT '' NULL,
creator varchar(64) DEFAULT '' NULL,
create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
updater varchar(64) DEFAULT '' NULL,
update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
deleted bit DEFAULT '0' NOT NULL,
tenant_id bigint DEFAULT 0 NOT NULL
);
CREATE INDEX idx_infra_api_access_log_01 ON infra_api_access_log (create_time);
COMMENT ON COLUMN infra_api_access_log.id IS '日志主键';
COMMENT ON COLUMN infra_api_access_log.trace_id IS '链路追踪编号';
COMMENT ON COLUMN infra_api_access_log.user_id IS '用户编号';
COMMENT ON COLUMN infra_api_access_log.user_type IS '用户类型';
COMMENT ON COLUMN infra_api_access_log.application_name IS '应用名';
COMMENT ON COLUMN infra_api_access_log.request_method IS '请求方法名';
COMMENT ON COLUMN infra_api_access_log.request_url IS '请求地址';
COMMENT ON COLUMN infra_api_access_log.request_params IS '请求参数';
COMMENT ON COLUMN infra_api_access_log.response_body IS '响应结果';
COMMENT ON COLUMN infra_api_access_log.user_ip IS '用户 IP';
COMMENT ON COLUMN infra_api_access_log.user_agent IS '浏览器 UA';
COMMENT ON COLUMN infra_api_access_log.operate_module IS '操作模块';
COMMENT ON COLUMN infra_api_access_log.operate_name IS '操作名';
COMMENT ON COLUMN infra_api_access_log.operate_type IS '操作分类';
COMMENT ON COLUMN infra_api_access_log.begin_time IS '开始请求时间';
COMMENT ON COLUMN infra_api_access_log.end_time IS '结束请求时间';
COMMENT ON COLUMN infra_api_access_log.duration IS '执行时长';
COMMENT ON COLUMN infra_api_access_log.result_code IS '结果码';
COMMENT ON COLUMN infra_api_access_log.result_msg IS '结果提示';
COMMENT ON COLUMN infra_api_access_log.creator IS '创建者';
COMMENT ON COLUMN infra_api_access_log.create_time IS '创建时间';
COMMENT ON COLUMN infra_api_access_log.updater IS '更新者';
COMMENT ON COLUMN infra_api_access_log.update_time IS '更新时间';
COMMENT ON COLUMN infra_api_access_log.deleted IS '是否删除';
COMMENT ON COLUMN infra_api_access_log.tenant_id IS '租户编号';
COMMENT ON TABLE infra_api_access_log IS 'API 访问日志表';
-- ----------------------------
-- Table structure for infra_api_error_log
-- ----------------------------
CREATE TABLE infra_api_error_log
(
id bigint NOT NULL PRIMARY KEY IDENTITY,
trace_id varchar(64) NOT NULL,
user_id bigint DEFAULT 0 NOT NULL,
user_type smallint DEFAULT 0 NOT NULL,
application_name varchar(50) NOT NULL,
request_method varchar(16) NOT NULL,
request_url varchar(255) NOT NULL,
request_params varchar(8000) NOT NULL,
user_ip varchar(50) NOT NULL,
user_agent varchar(512) NOT NULL,
exception_time datetime NOT NULL,
exception_name varchar(128) DEFAULT '' NULL,
exception_message text NOT NULL,
exception_root_cause_message text NOT NULL,
exception_stack_trace text NOT NULL,
exception_class_name varchar(512) NOT NULL,
exception_file_name varchar(512) NOT NULL,
exception_method_name varchar(512) NOT NULL,
exception_line_number int NOT NULL,
process_status smallint NOT NULL,
process_time datetime DEFAULT NULL NULL,
process_user_id int DEFAULT 0 NULL,
creator varchar(64) DEFAULT '' NULL,
create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
updater varchar(64) DEFAULT '' NULL,
update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
deleted bit DEFAULT '0' NOT NULL,
tenant_id bigint DEFAULT 0 NOT NULL
);
COMMENT ON COLUMN infra_api_error_log.id IS '编号';
COMMENT ON COLUMN infra_api_error_log.trace_id IS '链路追踪编号';
COMMENT ON COLUMN infra_api_error_log.user_id IS '用户编号';
COMMENT ON COLUMN infra_api_error_log.user_type IS '用户类型';
COMMENT ON COLUMN infra_api_error_log.application_name IS '应用名';
COMMENT ON COLUMN infra_api_error_log.request_method IS '请求方法名';
COMMENT ON COLUMN infra_api_error_log.request_url IS '请求地址';
COMMENT ON COLUMN infra_api_error_log.request_params IS '请求参数';
COMMENT ON COLUMN infra_api_error_log.user_ip IS '用户 IP';
COMMENT ON COLUMN infra_api_error_log.user_agent IS '浏览器 UA';
COMMENT ON COLUMN infra_api_error_log.exception_time IS '异常发生时间';
COMMENT ON COLUMN infra_api_error_log.exception_name IS '异常名';
COMMENT ON COLUMN infra_api_error_log.exception_message IS '异常导致的消息';
COMMENT ON COLUMN infra_api_error_log.exception_root_cause_message IS '异常导致的根消息';
COMMENT ON COLUMN infra_api_error_log.exception_stack_trace IS '异常的栈轨迹';
COMMENT ON COLUMN infra_api_error_log.exception_class_name IS '异常发生的类全名';
COMMENT ON COLUMN infra_api_error_log.exception_file_name IS '异常发生的类文件';
COMMENT ON COLUMN infra_api_error_log.exception_method_name IS '异常发生的方法名';
COMMENT ON COLUMN infra_api_error_log.exception_line_number IS '异常发生的方法所在行';
COMMENT ON COLUMN infra_api_error_log.process_status IS '处理状态';
COMMENT ON COLUMN infra_api_error_log.process_time IS '处理时间';
COMMENT ON COLUMN infra_api_error_log.process_user_id IS '处理用户编号';
COMMENT ON COLUMN infra_api_error_log.creator IS '创建者';
COMMENT ON COLUMN infra_api_error_log.create_time IS '创建时间';
COMMENT ON COLUMN infra_api_error_log.updater IS '更新者';
COMMENT ON COLUMN infra_api_error_log.update_time IS '更新时间';
COMMENT ON COLUMN infra_api_error_log.deleted IS '是否删除';
COMMENT ON COLUMN infra_api_error_log.tenant_id IS '租户编号';
COMMENT ON TABLE infra_api_error_log IS '系统异常日志';
-- ----------------------------
-- Table structure for infra_codegen_column
-- ----------------------------
CREATE TABLE infra_codegen_column
(
id bigint NOT NULL PRIMARY KEY IDENTITY,
table_id bigint NOT NULL,
column_name varchar(200) NOT NULL,
data_type varchar(100) NOT NULL,
column_comment varchar(500) NOT NULL,
nullable bit NOT NULL,
primary_key bit NOT NULL,
ordinal_position int NOT NULL,
java_type varchar(32) NOT NULL,
java_field varchar(64) NOT NULL,
dict_type varchar(200) DEFAULT '' NULL,
example varchar(64) DEFAULT NULL NULL,
create_operation bit NOT NULL,
update_operation bit NOT NULL,
list_operation bit NOT NULL,
list_operation_condition varchar(32) DEFAULT '=' NOT NULL,
list_operation_result bit NOT NULL,
html_type varchar(32) NOT NULL,
creator varchar(64) DEFAULT '' NULL,
create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
updater varchar(64) DEFAULT '' NULL,
update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
deleted bit DEFAULT '0' NOT NULL
);
COMMENT ON COLUMN infra_codegen_column.id IS '编号';
COMMENT ON COLUMN infra_codegen_column.table_id IS '表编号';
COMMENT ON COLUMN infra_codegen_column.column_name IS '字段名';
COMMENT ON COLUMN infra_codegen_column.data_type IS '字段类型';
COMMENT ON COLUMN infra_codegen_column.column_comment IS '字段描述';
COMMENT ON COLUMN infra_codegen_column.nullable IS '是否允许为空';
COMMENT ON COLUMN infra_codegen_column.primary_key IS '是否主键';
COMMENT ON COLUMN infra_codegen_column.ordinal_position IS '排序';
COMMENT ON COLUMN infra_codegen_column.java_type IS 'Java 属性类型';
COMMENT ON COLUMN infra_codegen_column.java_field IS 'Java 属性名';
COMMENT ON COLUMN infra_codegen_column.dict_type IS '字典类型';
COMMENT ON COLUMN infra_codegen_column.example IS '数据示例';
COMMENT ON COLUMN infra_codegen_column.create_operation IS '是否为 Create 创建操作的字段';
COMMENT ON COLUMN infra_codegen_column.update_operation IS '是否为 Update 更新操作的字段';
COMMENT ON COLUMN infra_codegen_column.list_operation IS '是否为 List 查询操作的字段';
COMMENT ON COLUMN infra_codegen_column.list_operation_condition IS 'List 查询操作的条件类型';
COMMENT ON COLUMN infra_codegen_column.list_operation_result IS '是否为 List 查询操作的返回字段';
COMMENT ON COLUMN infra_codegen_column.html_type IS '显示类型';
COMMENT ON COLUMN infra_codegen_column.creator IS '创建者';
COMMENT ON COLUMN infra_codegen_column.create_time IS '创建时间';
COMMENT ON COLUMN infra_codegen_column.updater IS '更新者';
COMMENT ON COLUMN infra_codegen_column.update_time IS '更新时间';
COMMENT ON COLUMN infra_codegen_column.deleted IS '是否删除';
COMMENT ON TABLE infra_codegen_column IS '代码生成表字段定义';
-- ----------------------------
-- Table structure for infra_codegen_table
-- ----------------------------
CREATE TABLE infra_codegen_table
(
id bigint NOT NULL PRIMARY KEY IDENTITY,
data_source_config_id bigint NOT NULL,
scene smallint DEFAULT 1 NOT NULL,
table_name varchar(200) DEFAULT '' NULL,
table_comment varchar(500) DEFAULT '' NULL,
remark varchar(500) DEFAULT NULL NULL,
module_name varchar(30) NOT NULL,
business_name varchar(30) NOT NULL,
class_name varchar(100) DEFAULT '' NULL,
class_comment varchar(50) NOT NULL,
author varchar(50) NOT NULL,
template_type smallint DEFAULT 1 NOT NULL,
front_type smallint NOT NULL,
parent_menu_id bigint DEFAULT NULL NULL,
master_table_id bigint DEFAULT NULL NULL,
sub_join_column_id bigint DEFAULT NULL NULL,
sub_join_many bit DEFAULT NULL NULL,
tree_parent_column_id bigint DEFAULT NULL NULL,
tree_name_column_id bigint DEFAULT NULL NULL,
creator varchar(64) DEFAULT '' NULL,
create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
updater varchar(64) DEFAULT '' NULL,
update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
deleted bit DEFAULT '0' NOT NULL
);
COMMENT ON COLUMN infra_codegen_table.id IS '编号';
COMMENT ON COLUMN infra_codegen_table.data_source_config_id IS '数据源配置的编号';
COMMENT ON COLUMN infra_codegen_table.scene IS '生成场景';
COMMENT ON COLUMN infra_codegen_table.table_name IS '表名称';
COMMENT ON COLUMN infra_codegen_table.table_comment IS '表描述';
COMMENT ON COLUMN infra_codegen_table.remark IS '备注';
COMMENT ON COLUMN infra_codegen_table.module_name IS '模块名';
COMMENT ON COLUMN infra_codegen_table.business_name IS '业务名';
COMMENT ON COLUMN infra_codegen_table.class_name IS '类名称';
COMMENT ON COLUMN infra_codegen_table.class_comment IS '类描述';
COMMENT ON COLUMN infra_codegen_table.author IS '作者';
COMMENT ON COLUMN infra_codegen_table.template_type IS '模板类型';
COMMENT ON COLUMN infra_codegen_table.front_type IS '前端类型';
COMMENT ON COLUMN infra_codegen_table.parent_menu_id IS '父菜单编号';
COMMENT ON COLUMN infra_codegen_table.master_table_id IS '主表的编号';
COMMENT ON COLUMN infra_codegen_table.sub_join_column_id IS '子表关联主表的字段编号';
COMMENT ON COLUMN infra_codegen_table.sub_join_many IS '主表与子表是否一对多';
COMMENT ON COLUMN infra_codegen_table.tree_parent_column_id IS '树表的父字段编号';
COMMENT ON COLUMN infra_codegen_table.tree_name_column_id IS '树表的名字字段编号';
COMMENT ON COLUMN infra_codegen_table.creator IS '创建者';
COMMENT ON COLUMN infra_codegen_table.create_time IS '创建时间';
COMMENT ON COLUMN infra_codegen_table.updater IS '更新者';
COMMENT ON COLUMN infra_codegen_table.update_time IS '更新时间';
COMMENT ON COLUMN infra_codegen_table.deleted IS '是否删除';
COMMENT ON TABLE infra_codegen_table IS '代码生成表定义';
-- ----------------------------
-- Table structure for infra_config
-- ----------------------------
CREATE TABLE infra_config
(
id bigint NOT NULL PRIMARY KEY IDENTITY,
category varchar(50) NOT NULL,
type smallint NOT NULL,
name varchar(100) DEFAULT '' NULL,
config_key varchar(100) DEFAULT '' NULL,
value varchar(500) DEFAULT '' NULL,
visible bit NOT NULL,
remark varchar(500) DEFAULT NULL NULL,
creator varchar(64) DEFAULT '' NULL,
create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
updater varchar(64) DEFAULT '' NULL,
update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
deleted bit DEFAULT '0' NOT NULL
);
COMMENT ON COLUMN infra_config.id IS '参数主键';
COMMENT ON COLUMN infra_config.category IS '参数分组';
COMMENT ON COLUMN infra_config.type IS '参数类型';
COMMENT ON COLUMN infra_config.name IS '参数名称';
COMMENT ON COLUMN infra_config.config_key IS '参数键名';
COMMENT ON COLUMN infra_config.value IS '参数键值';
COMMENT ON COLUMN infra_config.visible IS '是否可见';
COMMENT ON COLUMN infra_config.remark IS '备注';
COMMENT ON COLUMN infra_config.creator IS '创建者';
COMMENT ON COLUMN infra_config.create_time IS '创建时间';
COMMENT ON COLUMN infra_config.updater IS '更新者';
COMMENT ON COLUMN infra_config.update_time IS '更新时间';
COMMENT ON COLUMN infra_config.deleted IS '是否删除';
COMMENT ON TABLE infra_config IS '参数配置表';
-- ----------------------------
-- Records of infra_config
-- ----------------------------
-- @formatter:off
SET IDENTITY_INSERT infra_config ON;
INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (2, 'biz', 1, '用户管理-账号初始密码', 'system.user.init-password', '123456', '0', '初始化密码 123456', 'admin', '2021-01-05 17:03:48', '1', '2024-07-20 17:22:47', '0');
INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (7, 'url', 2, 'MySQL 监控的地址', 'url.druid', '', '1', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:33:38', '0');
INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (8, 'url', 2, 'SkyWalking 监控的地址', 'url.skywalking', '', '1', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:57:03', '0');
INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (9, 'url', 2, 'Spring Boot Admin 监控的地址', 'url.spring-boot-admin', '', '1', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:52:07', '0');
INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (10, 'url', 2, 'Swagger 接口文档的地址', 'url.swagger', '', '1', '', '1', '2023-04-07 13:41:16', '1', '2023-04-07 14:59:00', '0');
INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (11, 'ui', 2, '腾讯地图 key', 'tencent.lbs.key', 'TVDBZ-TDILD-4ON4B-PFDZA-RNLKH-VVF6E', '1', '腾讯地图 key', '1', '2023-06-03 19:16:27', '1', '2023-06-03 19:16:27', '0');
INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (12, 'test2', 2, 'test3', 'test4', 'test5', '1', 'test6', '1', '2023-12-03 09:55:16', '1', '2025-04-06 21:00:09', '0');
INSERT INTO infra_config (id, category, type, name, config_key, value, visible, remark, creator, create_time, updater, update_time, deleted) VALUES (13, '用户管理-账号初始密码', 2, '用户管理-注册开关', 'system.user.register-enabled', 'true', '0', '', '1', '2025-04-26 17:23:41', '1', '2025-04-26 17:23:41', '0');
COMMIT;
SET IDENTITY_INSERT infra_config OFF;
-- @formatter:on
-- ----------------------------
-- Table structure for infra_data_source_config
-- ----------------------------
CREATE TABLE infra_data_source_config
(
id bigint NOT NULL PRIMARY KEY IDENTITY,
name varchar(100) DEFAULT '' NULL,
url varchar(1024) NOT NULL,
username varchar(255) NOT NULL,
password varchar(255) DEFAULT '' NULL,
creator varchar(64) DEFAULT '' NULL,
create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
updater varchar(64) DEFAULT '' NULL,
update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
deleted bit DEFAULT '0' NOT NULL
);
COMMENT ON COLUMN infra_data_source_config.id IS '主键编号';
COMMENT ON COLUMN infra_data_source_config.name IS '参数名称';
COMMENT ON COLUMN infra_data_source_config.url IS '数据源连接';
COMMENT ON COLUMN infra_data_source_config.username IS '用户名';
COMMENT ON COLUMN infra_data_source_config.password IS '密码';
COMMENT ON COLUMN infra_data_source_config.creator IS '创建者';
COMMENT ON COLUMN infra_data_source_config.create_time IS '创建时间';
COMMENT ON COLUMN infra_data_source_config.updater IS '更新者';
COMMENT ON COLUMN infra_data_source_config.update_time IS '更新时间';
COMMENT ON COLUMN infra_data_source_config.deleted IS '是否删除';
COMMENT ON TABLE infra_data_source_config IS '数据源配置表';
-- ----------------------------
-- Table structure for infra_file
-- ----------------------------
CREATE TABLE infra_file
(
id bigint NOT NULL PRIMARY KEY IDENTITY,
config_id bigint DEFAULT NULL NULL,
name varchar(256) DEFAULT NULL NULL,
path varchar(512) NOT NULL,
url varchar(1024) NOT NULL,
type varchar(128) DEFAULT NULL NULL,
size int NOT NULL,
creator varchar(64) DEFAULT '' NULL,
create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
updater varchar(64) DEFAULT '' NULL,
update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
deleted bit DEFAULT '0' NOT NULL
);
COMMENT ON COLUMN infra_file.id IS '文件编号';
COMMENT ON COLUMN infra_file.config_id IS '配置编号';
COMMENT ON COLUMN infra_file.name IS '文件名';
COMMENT ON COLUMN infra_file.path IS '文件路径';
COMMENT ON COLUMN infra_file.url IS '文件 URL';
COMMENT ON COLUMN infra_file.type IS '文件类型';
COMMENT ON COLUMN infra_file.size IS '文件大小';
COMMENT ON COLUMN infra_file.creator IS '创建者';
COMMENT ON COLUMN infra_file.create_time IS '创建时间';
COMMENT ON COLUMN infra_file.updater IS '更新者';
COMMENT ON COLUMN infra_file.update_time IS '更新时间';
COMMENT ON COLUMN infra_file.deleted IS '是否删除';
COMMENT ON TABLE infra_file IS '文件表';
-- ----------------------------
-- Table structure for infra_file_config
-- ----------------------------
CREATE TABLE infra_file_config
(
id bigint NOT NULL PRIMARY KEY IDENTITY,
name varchar(63) NOT NULL,
storage smallint NOT NULL,
remark varchar(255) DEFAULT NULL NULL,
master bit NOT NULL,
config varchar(4096) NOT NULL,
creator varchar(64) DEFAULT '' NULL,
create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
updater varchar(64) DEFAULT '' NULL,
update_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
deleted bit DEFAULT '0' NOT NULL
);
COMMENT ON COLUMN infra_file_config.id IS '编号';
COMMENT ON COLUMN infra_file_config.name IS '配置名';
COMMENT ON COLUMN infra_file_config.storage IS '存储器';
COMMENT ON COLUMN infra_file_config.remark IS '备注';
COMMENT ON COLUMN infra_file_config.master IS '是否为主配置';
COMMENT ON COLUMN infra_file_config.config IS '存储配置';
COMMENT ON COLUMN infra_file_config.creator IS '创建者';
COMMENT ON COLUMN infra_file_config.create_time IS '创建时间';
COMMENT ON COLUMN infra_file_config.updater IS '更新者';
COMMENT ON COLUMN infra_file_config.update_time IS '更新时间';
COMMENT ON COLUMN infra_file_config.deleted IS '是否删除';
COMMENT ON TABLE infra_file_config IS '文件配置表';
-- ----------------------------
-- Records of infra_file_config
-- ----------------------------
-- @formatter:off
SET IDENTITY_INSERT infra_file_config ON;
INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (4, '数据库(示例)', 1, '我是数据库', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.db.DBFileClientConfig","domain":"http://127.0.0.1:48080"}', '1', '2022-03-15 23:56:24', '1', '2025-05-02 18:30:28', '0');
INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (22, '七牛存储器(示例)', 20, '请换成你自己的密钥!!!', '1', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"s3.cn-south-1.qiniucs.com","domain":"http://test.yudao.iocoder.cn","bucket":"ruoyi-vue-pro","accessKey":"3TvrJ70gl2Gt6IBe7_IZT1F6i_k0iMuRtyEv4EyS","accessSecret":"wd0tbVBYlp0S-ihA8Qg2hPLncoP83wyrIq24OZuY","enablePathStyleAccess":false}', '1', '2024-01-13 22:11:12', '1', '2025-05-02 18:30:28', '0');
INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (24, '腾讯云存储(示例)', 20, '请换成你的密钥!!!', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"https://cos.ap-shanghai.myqcloud.com","domain":"http://tengxun-oss.iocoder.cn","bucket":"aoteman-1255880240","accessKey":"AKIDAF6WSh1uiIjwqtrOsGSN3WryqTM6cTMt","accessSecret":"X"}', '1', '2024-11-09 16:03:22', '1', '2025-05-02 18:30:28', '0');
INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (25, '阿里云存储(示例)', 20, '', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"oss-cn-beijing.aliyuncs.com","domain":"http://ali-oss.iocoder.cn","bucket":"yunai-aoteman","accessKey":"LTAI5tEQLgnDyjh3WpNcdMKA","accessSecret":"X","enablePathStyleAccess":false}', '1', '2024-11-09 16:47:08', '1', '2025-05-02 18:30:28', '0');
INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (26, '火山云存储(示例)', 20, '', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"tos-s3-cn-beijing.volces.com","domain":null,"bucket":"yunai","accessKey":"AKLTZjc3Zjc4MzZmMjU3NDk0ZTgxYmIyMmFkNTIwMDI1ZGE","accessSecret":"X==","enablePathStyleAccess":false}', '1', '2024-11-09 16:56:42', '1', '2025-05-02 18:30:28', '0');
INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (27, '华为云存储(示例)', 20, '', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"obs.cn-east-3.myhuaweicloud.com","domain":"","bucket":"yudao","accessKey":"PVDONDEIOTW88LF8DC4U","accessSecret":"X","enablePathStyleAccess":false}', '1', '2024-11-09 17:18:41', '1', '2025-05-02 18:30:28', '0');
INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (28, 'MinIO 存储(示例)', 20, '', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.s3.S3FileClientConfig","endpoint":"http://127.0.0.1:9000","domain":"http://127.0.0.1:9000/yudao","bucket":"yudao","accessKey":"admin","accessSecret":"password","enablePathStyleAccess":false}', '1', '2024-11-09 17:43:10', '1', '2025-05-02 18:30:28', '0');
INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (29, '本地存储(示例)', 10, '仅适合 mac 或 windows', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.local.LocalFileClientConfig","basePath":"/Users/yunai/tmp/file","domain":"http://127.0.0.1:48080"}', '1', '2025-05-02 11:25:45', '1', '2025-05-02 18:30:28', '0');
INSERT INTO infra_file_config (id, name, storage, remark, master, config, creator, create_time, updater, update_time, deleted) VALUES (30, 'SFTP 存储(示例)', 12, '', '0', '{"@class":"cn.iocoder.yudao.module.infra.framework.file.core.client.sftp.SftpFileClientConfig","basePath":"/upload","domain":"http://127.0.0.1:48080","host":"127.0.0.1","port":2222,"username":"foo","password":"pass"}', '1', '2025-05-02 16:34:10', '1', '2025-05-02 18:30:28', '0');
COMMIT;
SET IDENTITY_INSERT infra_file_config OFF;
-- @formatter:on
-- ----------------------------
-- Table structure for infra_file_content
-- ----------------------------
CREATE TABLE infra_file_content
(
id bigint NOT NULL PRIMARY KEY IDENTITY,
config_id bigint NOT NULL,
path varchar(512) NOT NULL,
content blob NOT NULL,
creator varchar(64) DEFAULT '' NULL,
create_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
updater varchar(64) DEFAULT '' NULL,
update_time datetime DEFAULT CURRENT_TIMESTAMP
Showing preview only (507K chars total). Download the full file or copy to clipboard to get everything.
gitextract_j9akw6z5/ ├── .gitee/ │ └── ISSUE_TEMPLATE.zh-CN.md ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ └── question.md │ └── workflows/ │ └── maven.yml ├── .gitignore ├── LICENSE ├── README.md ├── lombok.config ├── pom.xml ├── script/ │ ├── docker/ │ │ └── docker-compose.yml │ └── idea/ │ └── http-client.env.json ├── sql/ │ ├── db2/ │ │ └── README.md │ ├── dm/ │ │ ├── flowable-patch/ │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ ├── liquibase/ │ │ │ │ │ ├── database/ │ │ │ │ │ │ └── core/ │ │ │ │ │ │ └── DmDatabase.java │ │ │ │ │ └── datatype/ │ │ │ │ │ └── core/ │ │ │ │ │ └── BooleanType.java │ │ │ │ └── org/ │ │ │ │ └── flowable/ │ │ │ │ └── common/ │ │ │ │ └── engine/ │ │ │ │ └── impl/ │ │ │ │ └── AbstractEngineConfiguration.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── package-info.md │ │ │ └── services/ │ │ │ └── liquibase.database.Database │ │ ├── quartz.sql │ │ └── ruoyi-vue-pro-dm8.sql │ ├── kingbase/ │ │ ├── quartz.sql │ │ └── ruoyi-vue-pro.sql │ ├── mysql/ │ │ ├── quartz.sql │ │ └── ruoyi-vue-pro.sql │ ├── opengauss/ │ │ ├── quartz.sql │ │ └── ruoyi-vue-pro.sql │ ├── oracle/ │ │ ├── quartz.sql │ │ └── ruoyi-vue-pro.sql │ ├── postgresql/ │ │ ├── quartz.sql │ │ └── ruoyi-vue-pro.sql │ ├── sqlserver/ │ │ ├── quartz.sql │ │ └── ruoyi-vue-pro.sql │ └── tools/ │ ├── .gitignore │ ├── README.md │ ├── convertor.py │ ├── docker-compose.yaml │ ├── oracle/ │ │ ├── 1_create_user.sql │ │ └── 2_create_schema.sh │ └── sqlserver/ │ └── create_schema.sh ├── yudao-dependencies/ │ └── pom.xml ├── yudao-framework/ │ ├── pom.xml │ ├── yudao-common/ │ │ ├── pom.xml │ │ ├── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ ├── cn/ │ │ │ │ │ └── iocoder/ │ │ │ │ │ └── yudao/ │ │ │ │ │ └── framework/ │ │ │ │ │ └── common/ │ │ │ │ │ ├── biz/ │ │ │ │ │ │ ├── infra/ │ │ │ │ │ │ │ ├── logger/ │ │ │ │ │ │ │ │ ├── ApiAccessLogCommonApi.java │ │ │ │ │ │ │ │ ├── ApiErrorLogCommonApi.java │ │ │ │ │ │ │ │ └── dto/ │ │ │ │ │ │ │ │ ├── ApiAccessLogCreateReqDTO.java │ │ │ │ │ │ │ │ └── ApiErrorLogCreateReqDTO.java │ │ │ │ │ │ │ └── package-info.java │ │ │ │ │ │ ├── package-info.java │ │ │ │ │ │ └── system/ │ │ │ │ │ │ ├── dict/ │ │ │ │ │ │ │ ├── DictDataCommonApi.java │ │ │ │ │ │ │ └── dto/ │ │ │ │ │ │ │ └── DictDataRespDTO.java │ │ │ │ │ │ ├── logger/ │ │ │ │ │ │ │ ├── OperateLogCommonApi.java │ │ │ │ │ │ │ └── dto/ │ │ │ │ │ │ │ └── OperateLogCreateReqDTO.java │ │ │ │ │ │ ├── oauth2/ │ │ │ │ │ │ │ ├── OAuth2TokenCommonApi.java │ │ │ │ │ │ │ └── dto/ │ │ │ │ │ │ │ ├── OAuth2AccessTokenCheckRespDTO.java │ │ │ │ │ │ │ ├── OAuth2AccessTokenCreateReqDTO.java │ │ │ │ │ │ │ └── OAuth2AccessTokenRespDTO.java │ │ │ │ │ │ ├── package-info.java │ │ │ │ │ │ ├── permission/ │ │ │ │ │ │ │ ├── PermissionCommonApi.java │ │ │ │ │ │ │ └── dto/ │ │ │ │ │ │ │ └── DeptDataPermissionRespDTO.java │ │ │ │ │ │ └── tenant/ │ │ │ │ │ │ └── TenantCommonApi.java │ │ │ │ │ ├── core/ │ │ │ │ │ │ ├── ArrayValuable.java │ │ │ │ │ │ └── KeyValue.java │ │ │ │ │ ├── enums/ │ │ │ │ │ │ ├── CommonStatusEnum.java │ │ │ │ │ │ ├── DateIntervalEnum.java │ │ │ │ │ │ ├── DocumentEnum.java │ │ │ │ │ │ ├── RpcConstants.java │ │ │ │ │ │ ├── TerminalEnum.java │ │ │ │ │ │ ├── UserTypeEnum.java │ │ │ │ │ │ └── WebFilterOrderEnum.java │ │ │ │ │ ├── exception/ │ │ │ │ │ │ ├── ErrorCode.java │ │ │ │ │ │ ├── ServerException.java │ │ │ │ │ │ ├── ServiceException.java │ │ │ │ │ │ ├── enums/ │ │ │ │ │ │ │ ├── GlobalErrorCodeConstants.java │ │ │ │ │ │ │ └── ServiceErrorCodeRange.java │ │ │ │ │ │ └── util/ │ │ │ │ │ │ └── ServiceExceptionUtil.java │ │ │ │ │ ├── package-info.java │ │ │ │ │ ├── pojo/ │ │ │ │ │ │ ├── CommonResult.java │ │ │ │ │ │ ├── PageParam.java │ │ │ │ │ │ ├── PageResult.java │ │ │ │ │ │ ├── SortablePageParam.java │ │ │ │ │ │ └── SortingField.java │ │ │ │ │ ├── util/ │ │ │ │ │ │ ├── cache/ │ │ │ │ │ │ │ └── CacheUtils.java │ │ │ │ │ │ ├── collection/ │ │ │ │ │ │ │ ├── ArrayUtils.java │ │ │ │ │ │ │ ├── CollectionUtils.java │ │ │ │ │ │ │ ├── MapUtils.java │ │ │ │ │ │ │ └── SetUtils.java │ │ │ │ │ │ ├── date/ │ │ │ │ │ │ │ ├── DateUtils.java │ │ │ │ │ │ │ └── LocalDateTimeUtils.java │ │ │ │ │ │ ├── http/ │ │ │ │ │ │ │ └── HttpUtils.java │ │ │ │ │ │ ├── io/ │ │ │ │ │ │ │ ├── FileUtils.java │ │ │ │ │ │ │ └── IoUtils.java │ │ │ │ │ │ ├── json/ │ │ │ │ │ │ │ ├── JsonUtils.java │ │ │ │ │ │ │ └── databind/ │ │ │ │ │ │ │ ├── NumberSerializer.java │ │ │ │ │ │ │ ├── TimestampLocalDateTimeDeserializer.java │ │ │ │ │ │ │ └── TimestampLocalDateTimeSerializer.java │ │ │ │ │ │ ├── monitor/ │ │ │ │ │ │ │ └── TracerUtils.java │ │ │ │ │ │ ├── number/ │ │ │ │ │ │ │ ├── MoneyUtils.java │ │ │ │ │ │ │ └── NumberUtils.java │ │ │ │ │ │ ├── object/ │ │ │ │ │ │ │ ├── BeanUtils.java │ │ │ │ │ │ │ ├── ObjectUtils.java │ │ │ │ │ │ │ └── PageUtils.java │ │ │ │ │ │ ├── package-info.java │ │ │ │ │ │ ├── servlet/ │ │ │ │ │ │ │ └── ServletUtils.java │ │ │ │ │ │ ├── spring/ │ │ │ │ │ │ │ ├── SpringExpressionUtils.java │ │ │ │ │ │ │ └── SpringUtils.java │ │ │ │ │ │ ├── string/ │ │ │ │ │ │ │ └── StrUtils.java │ │ │ │ │ │ └── validation/ │ │ │ │ │ │ └── ValidationUtils.java │ │ │ │ │ └── validation/ │ │ │ │ │ ├── InEnum.java │ │ │ │ │ ├── InEnumCollectionValidator.java │ │ │ │ │ ├── InEnumValidator.java │ │ │ │ │ ├── Mobile.java │ │ │ │ │ ├── MobileValidator.java │ │ │ │ │ ├── Telephone.java │ │ │ │ │ ├── TelephoneValidator.java │ │ │ │ │ └── package-info.java │ │ │ │ └── com/ │ │ │ │ └── fhs/ │ │ │ │ └── trans/ │ │ │ │ └── service/ │ │ │ │ └── AutoTransable.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── yudao/ │ │ │ └── framework/ │ │ │ └── common/ │ │ │ └── util/ │ │ │ └── collection/ │ │ │ └── CollectionUtilsTest.java │ │ └── 《芋道 Spring Boot 参数校验 Validation 入门》.md │ ├── yudao-spring-boot-starter-biz-data-permission/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── yudao/ │ │ │ │ └── framework/ │ │ │ │ └── datapermission/ │ │ │ │ ├── config/ │ │ │ │ │ ├── YudaoDataPermissionAutoConfiguration.java │ │ │ │ │ ├── YudaoDataPermissionRpcAutoConfiguration.java │ │ │ │ │ └── YudaoDeptDataPermissionAutoConfiguration.java │ │ │ │ ├── core/ │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ └── DataPermission.java │ │ │ │ │ ├── aop/ │ │ │ │ │ │ ├── DataPermissionAnnotationAdvisor.java │ │ │ │ │ │ ├── DataPermissionAnnotationInterceptor.java │ │ │ │ │ │ └── DataPermissionContextHolder.java │ │ │ │ │ ├── db/ │ │ │ │ │ │ └── DataPermissionRuleHandler.java │ │ │ │ │ ├── rpc/ │ │ │ │ │ │ ├── DataPermissionRequestInterceptor.java │ │ │ │ │ │ └── DataPermissionRpcWebFilter.java │ │ │ │ │ ├── rule/ │ │ │ │ │ │ ├── DataPermissionRule.java │ │ │ │ │ │ ├── DataPermissionRuleFactory.java │ │ │ │ │ │ ├── DataPermissionRuleFactoryImpl.java │ │ │ │ │ │ └── dept/ │ │ │ │ │ │ ├── DeptDataPermissionRule.java │ │ │ │ │ │ ├── DeptDataPermissionRuleCustomizer.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── util/ │ │ │ │ │ └── DataPermissionUtils.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── yudao/ │ │ └── framework/ │ │ └── datapermission/ │ │ └── core/ │ │ ├── aop/ │ │ │ ├── DataPermissionAnnotationInterceptorTest.java │ │ │ └── DataPermissionContextHolderTest.java │ │ ├── db/ │ │ │ └── DataPermissionRuleHandlerTest.java │ │ ├── rule/ │ │ │ ├── DataPermissionRuleFactoryImplTest.java │ │ │ └── dept/ │ │ │ └── DeptDataPermissionRuleTest.java │ │ └── util/ │ │ └── DataPermissionUtilsTest.java │ ├── yudao-spring-boot-starter-biz-ip/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── yudao/ │ │ │ │ └── framework/ │ │ │ │ └── ip/ │ │ │ │ ├── core/ │ │ │ │ │ ├── Area.java │ │ │ │ │ ├── enums/ │ │ │ │ │ │ └── AreaTypeEnum.java │ │ │ │ │ └── utils/ │ │ │ │ │ ├── AreaUtils.java │ │ │ │ │ └── IPUtils.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ ├── area.csv │ │ │ └── ip2region.xdb │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── yudao/ │ │ └── framework/ │ │ └── ip/ │ │ └── core/ │ │ └── utils/ │ │ ├── AreaUtilsTest.java │ │ └── IPUtilsTest.java │ ├── yudao-spring-boot-starter-biz-tenant/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ ├── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── yudao/ │ │ │ │ └── framework/ │ │ │ │ └── tenant/ │ │ │ │ ├── config/ │ │ │ │ │ ├── TenantProperties.java │ │ │ │ │ ├── YudaoTenantAutoConfiguration.java │ │ │ │ │ └── YudaoTenantRpcAutoConfiguration.java │ │ │ │ ├── core/ │ │ │ │ │ ├── aop/ │ │ │ │ │ │ ├── TenantIgnore.java │ │ │ │ │ │ └── TenantIgnoreAspect.java │ │ │ │ │ ├── context/ │ │ │ │ │ │ └── TenantContextHolder.java │ │ │ │ │ ├── db/ │ │ │ │ │ │ ├── TenantBaseDO.java │ │ │ │ │ │ └── TenantDatabaseInterceptor.java │ │ │ │ │ ├── job/ │ │ │ │ │ │ ├── TenantJob.java │ │ │ │ │ │ └── TenantJobAspect.java │ │ │ │ │ ├── mq/ │ │ │ │ │ │ ├── kafka/ │ │ │ │ │ │ │ ├── TenantKafkaEnvironmentPostProcessor.java │ │ │ │ │ │ │ └── TenantKafkaProducerInterceptor.java │ │ │ │ │ │ ├── rabbitmq/ │ │ │ │ │ │ │ ├── TenantRabbitMQInitializer.java │ │ │ │ │ │ │ └── TenantRabbitMQMessagePostProcessor.java │ │ │ │ │ │ ├── redis/ │ │ │ │ │ │ │ └── TenantRedisMessageInterceptor.java │ │ │ │ │ │ └── rocketmq/ │ │ │ │ │ │ ├── TenantRocketMQConsumeMessageHook.java │ │ │ │ │ │ ├── TenantRocketMQInitializer.java │ │ │ │ │ │ └── TenantRocketMQSendMessageHook.java │ │ │ │ │ ├── redis/ │ │ │ │ │ │ └── TenantRedisCacheManager.java │ │ │ │ │ ├── rpc/ │ │ │ │ │ │ └── TenantRequestInterceptor.java │ │ │ │ │ ├── security/ │ │ │ │ │ │ └── TenantSecurityWebFilter.java │ │ │ │ │ ├── service/ │ │ │ │ │ │ ├── TenantFrameworkService.java │ │ │ │ │ │ └── TenantFrameworkServiceImpl.java │ │ │ │ │ ├── util/ │ │ │ │ │ │ └── TenantUtils.java │ │ │ │ │ └── web/ │ │ │ │ │ ├── TenantContextWebFilter.java │ │ │ │ │ └── TenantVisitContextInterceptor.java │ │ │ │ └── package-info.java │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── messaging/ │ │ │ └── handler/ │ │ │ └── invocation/ │ │ │ └── InvocableHandlerMethod.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── spring.factories │ ├── yudao-spring-boot-starter-env/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── yudao/ │ │ │ └── framework/ │ │ │ └── env/ │ │ │ ├── config/ │ │ │ │ ├── EnvEnvironmentPostProcessor.java │ │ │ │ ├── EnvProperties.java │ │ │ │ ├── YudaoEnvRpcAutoConfiguration.java │ │ │ │ └── YudaoEnvWebAutoConfiguration.java │ │ │ ├── core/ │ │ │ │ ├── context/ │ │ │ │ │ └── EnvContextHolder.java │ │ │ │ ├── fegin/ │ │ │ │ │ ├── EnvLoadBalancerClient.java │ │ │ │ │ ├── EnvLoadBalancerClientFactory.java │ │ │ │ │ └── EnvRequestInterceptor.java │ │ │ │ ├── package-info.java │ │ │ │ ├── util/ │ │ │ │ │ └── EnvUtils.java │ │ │ │ └── web/ │ │ │ │ └── EnvWebFilter.java │ │ │ └── package-info.java │ │ └── resources/ │ │ └── META-INF/ │ │ ├── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── spring.factories │ ├── yudao-spring-boot-starter-excel/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── yudao/ │ │ │ │ └── framework/ │ │ │ │ ├── dict/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── YudaoDictAutoConfiguration.java │ │ │ │ │ │ └── YudaoDictRpcAutoConfiguration.java │ │ │ │ │ ├── core/ │ │ │ │ │ │ └── DictFrameworkUtils.java │ │ │ │ │ ├── package-info.java │ │ │ │ │ └── validation/ │ │ │ │ │ ├── InDict.java │ │ │ │ │ ├── InDictCollectionValidator.java │ │ │ │ │ └── InDictValidator.java │ │ │ │ └── excel/ │ │ │ │ ├── core/ │ │ │ │ │ ├── annotations/ │ │ │ │ │ │ ├── DictFormat.java │ │ │ │ │ │ └── ExcelColumnSelect.java │ │ │ │ │ ├── convert/ │ │ │ │ │ │ ├── AreaConvert.java │ │ │ │ │ │ ├── DictConvert.java │ │ │ │ │ │ ├── JsonConvert.java │ │ │ │ │ │ └── MoneyConvert.java │ │ │ │ │ ├── function/ │ │ │ │ │ │ └── ExcelColumnSelectFunction.java │ │ │ │ │ ├── handler/ │ │ │ │ │ │ ├── ColumnWidthMatchStyleStrategy.java │ │ │ │ │ │ └── SelectSheetWriteHandler.java │ │ │ │ │ └── util/ │ │ │ │ │ └── ExcelUtils.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── yudao/ │ │ └── framework/ │ │ └── dict/ │ │ └── core/ │ │ └── util/ │ │ └── DictFrameworkUtilsTest.java │ ├── yudao-spring-boot-starter-job/ │ │ ├── pom.xml │ │ ├── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── yudao/ │ │ │ │ └── framework/ │ │ │ │ └── quartz/ │ │ │ │ ├── config/ │ │ │ │ │ ├── XxlJobProperties.java │ │ │ │ │ ├── YudaoAsyncAutoConfiguration.java │ │ │ │ │ └── YudaoXxlJobAutoConfiguration.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── 《芋道 Spring Boot 定时任务入门》.md │ │ └── 《芋道 Spring Boot 异步任务入门》.md │ ├── yudao-spring-boot-starter-monitor/ │ │ ├── pom.xml │ │ ├── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── yudao/ │ │ │ │ └── framework/ │ │ │ │ └── tracer/ │ │ │ │ ├── config/ │ │ │ │ │ ├── TracerProperties.java │ │ │ │ │ ├── YudaoMetricsAutoConfiguration.java │ │ │ │ │ └── YudaoTracerAutoConfiguration.java │ │ │ │ ├── core/ │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ └── BizTrace.java │ │ │ │ │ ├── aop/ │ │ │ │ │ │ └── BizTraceAspect.java │ │ │ │ │ ├── filter/ │ │ │ │ │ │ └── TraceFilter.java │ │ │ │ │ └── util/ │ │ │ │ │ └── TracerFrameworkUtils.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── 《芋道 Spring Boot 监控工具 Admin 入门》.md │ │ ├── 《芋道 Spring Boot 监控端点 Actuator 入门》.md │ │ └── 《芋道 Spring Boot 链路追踪 SkyWalking 入门》.md │ ├── yudao-spring-boot-starter-mq/ │ │ ├── pom.xml │ │ ├── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── yudao/ │ │ │ │ └── framework/ │ │ │ │ └── mq/ │ │ │ │ ├── package-info.java │ │ │ │ ├── rabbitmq/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── YudaoRabbitMQAutoConfiguration.java │ │ │ │ │ ├── core/ │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── package-info.java │ │ │ │ └── redis/ │ │ │ │ ├── config/ │ │ │ │ │ ├── YudaoRedisMQConsumerAutoConfiguration.java │ │ │ │ │ └── YudaoRedisMQProducerAutoConfiguration.java │ │ │ │ ├── core/ │ │ │ │ │ ├── RedisMQTemplate.java │ │ │ │ │ ├── interceptor/ │ │ │ │ │ │ └── RedisMessageInterceptor.java │ │ │ │ │ ├── job/ │ │ │ │ │ │ ├── RedisPendingMessageResendJob.java │ │ │ │ │ │ └── RedisStreamMessageCleanupJob.java │ │ │ │ │ ├── message/ │ │ │ │ │ │ └── AbstractRedisMessage.java │ │ │ │ │ ├── pubsub/ │ │ │ │ │ │ ├── AbstractRedisChannelMessage.java │ │ │ │ │ │ └── AbstractRedisChannelMessageListener.java │ │ │ │ │ └── stream/ │ │ │ │ │ ├── AbstractRedisStreamMessage.java │ │ │ │ │ └── AbstractRedisStreamMessageListener.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── 《芋道 Spring Boot 事件机制 Event 入门》.md │ │ ├── 《芋道 Spring Boot 消息队列 Kafka 入门》.md │ │ ├── 《芋道 Spring Boot 消息队列 RabbitMQ 入门》.md │ │ └── 《芋道 Spring Boot 消息队列 RocketMQ 入门》.md │ ├── yudao-spring-boot-starter-mybatis/ │ │ ├── pom.xml │ │ ├── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── yudao/ │ │ │ │ └── framework/ │ │ │ │ ├── datasource/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── YudaoDataSourceAutoConfiguration.java │ │ │ │ │ ├── core/ │ │ │ │ │ │ ├── enums/ │ │ │ │ │ │ │ └── DataSourceEnum.java │ │ │ │ │ │ └── filter/ │ │ │ │ │ │ └── DruidAdRemoveFilter.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── mybatis/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── IdTypeEnvironmentPostProcessor.java │ │ │ │ │ │ └── YudaoMybatisAutoConfiguration.java │ │ │ │ │ ├── core/ │ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ │ └── BaseDO.java │ │ │ │ │ │ ├── enums/ │ │ │ │ │ │ │ └── DbTypeEnum.java │ │ │ │ │ │ ├── handler/ │ │ │ │ │ │ │ └── DefaultDBFieldHandler.java │ │ │ │ │ │ ├── mapper/ │ │ │ │ │ │ │ └── BaseMapperX.java │ │ │ │ │ │ ├── query/ │ │ │ │ │ │ │ ├── LambdaQueryWrapperX.java │ │ │ │ │ │ │ ├── MPJLambdaWrapperX.java │ │ │ │ │ │ │ └── QueryWrapperX.java │ │ │ │ │ │ ├── type/ │ │ │ │ │ │ │ ├── EncryptTypeHandler.java │ │ │ │ │ │ │ ├── IntegerListTypeHandler.java │ │ │ │ │ │ │ ├── LongListTypeHandler.java │ │ │ │ │ │ │ ├── LongSetTypeHandler.java │ │ │ │ │ │ │ └── StringListTypeHandler.java │ │ │ │ │ │ └── util/ │ │ │ │ │ │ ├── JdbcUtils.java │ │ │ │ │ │ └── MyBatisUtils.java │ │ │ │ │ └── package-info.java │ │ │ │ └── translate/ │ │ │ │ ├── config/ │ │ │ │ │ └── YudaoTranslateAutoConfiguration.java │ │ │ │ ├── core/ │ │ │ │ │ └── TranslateUtils.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── spring.factories │ │ ├── 《芋道 Spring Boot MyBatis 入门》.md │ │ ├── 《芋道 Spring Boot 多数据源(读写分离)入门》.md │ │ └── 《芋道 Spring Boot 数据库连接池入门》.md │ ├── yudao-spring-boot-starter-protection/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── yudao/ │ │ │ │ └── framework/ │ │ │ │ ├── idempotent/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── YudaoIdempotentConfiguration.java │ │ │ │ │ ├── core/ │ │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ │ └── Idempotent.java │ │ │ │ │ │ ├── aop/ │ │ │ │ │ │ │ └── IdempotentAspect.java │ │ │ │ │ │ ├── keyresolver/ │ │ │ │ │ │ │ ├── IdempotentKeyResolver.java │ │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ │ ├── DefaultIdempotentKeyResolver.java │ │ │ │ │ │ │ ├── ExpressionIdempotentKeyResolver.java │ │ │ │ │ │ │ └── UserIdempotentKeyResolver.java │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── IdempotentRedisDAO.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── lock4j/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── YudaoLock4jConfiguration.java │ │ │ │ │ ├── core/ │ │ │ │ │ │ ├── DefaultLockFailureStrategy.java │ │ │ │ │ │ └── Lock4jRedisKeyConstants.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── ratelimiter/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── YudaoRateLimiterConfiguration.java │ │ │ │ │ ├── core/ │ │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ │ └── RateLimiter.java │ │ │ │ │ │ ├── aop/ │ │ │ │ │ │ │ └── RateLimiterAspect.java │ │ │ │ │ │ ├── keyresolver/ │ │ │ │ │ │ │ ├── RateLimiterKeyResolver.java │ │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ │ ├── ClientIpRateLimiterKeyResolver.java │ │ │ │ │ │ │ ├── DefaultRateLimiterKeyResolver.java │ │ │ │ │ │ │ ├── ExpressionRateLimiterKeyResolver.java │ │ │ │ │ │ │ ├── ServerNodeRateLimiterKeyResolver.java │ │ │ │ │ │ │ └── UserRateLimiterKeyResolver.java │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── RateLimiterRedisDAO.java │ │ │ │ │ └── package-info.java │ │ │ │ └── signature/ │ │ │ │ ├── config/ │ │ │ │ │ └── YudaoApiSignatureAutoConfiguration.java │ │ │ │ ├── core/ │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ └── ApiSignature.java │ │ │ │ │ ├── aop/ │ │ │ │ │ │ └── ApiSignatureAspect.java │ │ │ │ │ └── redis/ │ │ │ │ │ └── ApiSignatureRedisDAO.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── yudao/ │ │ └── framework/ │ │ └── signature/ │ │ └── core/ │ │ └── ApiSignatureTest.java │ ├── yudao-spring-boot-starter-redis/ │ │ ├── pom.xml │ │ ├── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── yudao/ │ │ │ │ └── framework/ │ │ │ │ └── redis/ │ │ │ │ ├── config/ │ │ │ │ │ ├── YudaoCacheAutoConfiguration.java │ │ │ │ │ ├── YudaoCacheProperties.java │ │ │ │ │ └── YudaoRedisAutoConfiguration.java │ │ │ │ ├── core/ │ │ │ │ │ └── TimeoutRedisCacheManager.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── 《芋道 Spring Boot Cache 入门》.md │ │ └── 《芋道 Spring Boot Redis 入门》.md │ ├── yudao-spring-boot-starter-rpc/ │ │ ├── pom.xml │ │ ├── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── yudao/ │ │ │ └── framework/ │ │ │ └── rpc/ │ │ │ ├── config/ │ │ │ │ └── package-info.java │ │ │ ├── core/ │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ ├── 《芋道 Spring Boot 声明式调用 Feign 入门》.md │ │ └── 《芋道 Spring Cloud 声明式调用 Feign 入门》.md │ ├── yudao-spring-boot-starter-security/ │ │ ├── pom.xml │ │ ├── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── cn/ │ │ │ │ └── iocoder/ │ │ │ │ └── yudao/ │ │ │ │ └── framework/ │ │ │ │ ├── operatelog/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── YudaoOperateLogConfiguration.java │ │ │ │ │ │ └── YudaoOperateLogRpcAutoConfiguration.java │ │ │ │ │ ├── core/ │ │ │ │ │ │ ├── package-info.java │ │ │ │ │ │ └── service/ │ │ │ │ │ │ └── LogRecordServiceImpl.java │ │ │ │ │ └── package-info.java │ │ │ │ └── security/ │ │ │ │ ├── config/ │ │ │ │ │ ├── AuthorizeRequestsCustomizer.java │ │ │ │ │ ├── SecurityProperties.java │ │ │ │ │ ├── YudaoSecurityAutoConfiguration.java │ │ │ │ │ ├── YudaoSecurityRpcAutoConfiguration.java │ │ │ │ │ └── YudaoWebSecurityConfigurerAdapter.java │ │ │ │ ├── core/ │ │ │ │ │ ├── LoginUser.java │ │ │ │ │ ├── context/ │ │ │ │ │ │ └── TransmittableThreadLocalSecurityContextHolderStrategy.java │ │ │ │ │ ├── filter/ │ │ │ │ │ │ └── TokenAuthenticationFilter.java │ │ │ │ │ ├── handler/ │ │ │ │ │ │ ├── AccessDeniedHandlerImpl.java │ │ │ │ │ │ └── AuthenticationEntryPointImpl.java │ │ │ │ │ ├── rpc/ │ │ │ │ │ │ └── LoginUserRequestInterceptor.java │ │ │ │ │ ├── service/ │ │ │ │ │ │ ├── SecurityFrameworkService.java │ │ │ │ │ │ └── SecurityFrameworkServiceImpl.java │ │ │ │ │ └── util/ │ │ │ │ │ └── SecurityFrameworkUtils.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── 《芋道 Spring Boot 安全框架 Spring Security 入门》.md │ ├── yudao-spring-boot-starter-test/ │ │ ├── pom.xml │ │ ├── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── yudao/ │ │ │ └── framework/ │ │ │ └── test/ │ │ │ ├── config/ │ │ │ │ ├── RedisTestConfiguration.java │ │ │ │ └── SqlInitializationTestConfiguration.java │ │ │ ├── core/ │ │ │ │ ├── ut/ │ │ │ │ │ ├── BaseDbAndRedisUnitTest.java │ │ │ │ │ ├── BaseDbUnitTest.java │ │ │ │ │ ├── BaseMockitoUnitTest.java │ │ │ │ │ ├── BaseRedisUnitTest.java │ │ │ │ │ └── package-info.java │ │ │ │ └── util/ │ │ │ │ ├── AssertUtils.java │ │ │ │ └── RandomUtils.java │ │ │ └── package-info.java │ │ └── 《芋道 Spring Boot 单元测试 Test 入门》.md │ ├── yudao-spring-boot-starter-web/ │ │ ├── pom.xml │ │ ├── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── cn/ │ │ │ │ │ └── iocoder/ │ │ │ │ │ └── yudao/ │ │ │ │ │ └── framework/ │ │ │ │ │ ├── apilog/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── YudaoApiLogAutoConfiguration.java │ │ │ │ │ │ │ └── YudaoApiLogRpcAutoConfiguration.java │ │ │ │ │ │ ├── core/ │ │ │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ │ │ └── ApiAccessLog.java │ │ │ │ │ │ │ ├── enums/ │ │ │ │ │ │ │ │ └── OperateTypeEnum.java │ │ │ │ │ │ │ ├── filter/ │ │ │ │ │ │ │ │ └── ApiAccessLogFilter.java │ │ │ │ │ │ │ └── interceptor/ │ │ │ │ │ │ │ └── ApiAccessLogInterceptor.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── banner/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── YudaoBannerAutoConfiguration.java │ │ │ │ │ │ ├── core/ │ │ │ │ │ │ │ └── BannerApplicationRunner.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── desensitize/ │ │ │ │ │ │ ├── core/ │ │ │ │ │ │ │ ├── base/ │ │ │ │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ │ │ │ └── DesensitizeBy.java │ │ │ │ │ │ │ │ ├── handler/ │ │ │ │ │ │ │ │ │ └── DesensitizationHandler.java │ │ │ │ │ │ │ │ └── serializer/ │ │ │ │ │ │ │ │ └── StringDesensitizeSerializer.java │ │ │ │ │ │ │ ├── regex/ │ │ │ │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ │ │ │ ├── EmailDesensitize.java │ │ │ │ │ │ │ │ │ └── RegexDesensitize.java │ │ │ │ │ │ │ │ └── handler/ │ │ │ │ │ │ │ │ ├── AbstractRegexDesensitizationHandler.java │ │ │ │ │ │ │ │ ├── DefaultRegexDesensitizationHandler.java │ │ │ │ │ │ │ │ └── EmailDesensitizationHandler.java │ │ │ │ │ │ │ └── slider/ │ │ │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ │ │ ├── BankCardDesensitize.java │ │ │ │ │ │ │ │ ├── CarLicenseDesensitize.java │ │ │ │ │ │ │ │ ├── ChineseNameDesensitize.java │ │ │ │ │ │ │ │ ├── FixedPhoneDesensitize.java │ │ │ │ │ │ │ │ ├── IdCardDesensitize.java │ │ │ │ │ │ │ │ ├── MobileDesensitize.java │ │ │ │ │ │ │ │ ├── PasswordDesensitize.java │ │ │ │ │ │ │ │ └── SliderDesensitize.java │ │ │ │ │ │ │ └── handler/ │ │ │ │ │ │ │ ├── AbstractSliderDesensitizationHandler.java │ │ │ │ │ │ │ ├── BankCardDesensitization.java │ │ │ │ │ │ │ ├── CarLicenseDesensitization.java │ │ │ │ │ │ │ ├── ChineseNameDesensitization.java │ │ │ │ │ │ │ ├── DefaultDesensitizationHandler.java │ │ │ │ │ │ │ ├── FixedPhoneDesensitization.java │ │ │ │ │ │ │ ├── IdCardDesensitization.java │ │ │ │ │ │ │ ├── MobileDesensitization.java │ │ │ │ │ │ │ └── PasswordDesensitization.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── encrypt/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── ApiEncryptProperties.java │ │ │ │ │ │ │ └── YudaoApiEncryptAutoConfiguration.java │ │ │ │ │ │ ├── core/ │ │ │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ │ │ └── ApiEncrypt.java │ │ │ │ │ │ │ └── filter/ │ │ │ │ │ │ │ ├── ApiDecryptRequestWrapper.java │ │ │ │ │ │ │ ├── ApiEncryptFilter.java │ │ │ │ │ │ │ └── ApiEncryptResponseWrapper.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── jackson/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── YudaoJacksonAutoConfiguration.java │ │ │ │ │ │ └── core/ │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── package-info.java │ │ │ │ │ ├── swagger/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── Knife4jOpenApiCustomizer.java │ │ │ │ │ │ │ ├── SwaggerProperties.java │ │ │ │ │ │ │ └── YudaoSwaggerAutoConfiguration.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── web/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── WebProperties.java │ │ │ │ │ │ │ └── YudaoWebAutoConfiguration.java │ │ │ │ │ │ ├── core/ │ │ │ │ │ │ │ ├── filter/ │ │ │ │ │ │ │ │ ├── ApiRequestFilter.java │ │ │ │ │ │ │ │ ├── CacheRequestBodyFilter.java │ │ │ │ │ │ │ │ ├── CacheRequestBodyWrapper.java │ │ │ │ │ │ │ │ └── DemoFilter.java │ │ │ │ │ │ │ ├── handler/ │ │ │ │ │ │ │ │ ├── GlobalExceptionHandler.java │ │ │ │ │ │ │ │ └── GlobalResponseBodyHandler.java │ │ │ │ │ │ │ └── util/ │ │ │ │ │ │ │ └── WebFrameworkUtils.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── xss/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── XssProperties.java │ │ │ │ │ │ └── YudaoXssAutoConfiguration.java │ │ │ │ │ ├── core/ │ │ │ │ │ │ ├── clean/ │ │ │ │ │ │ │ ├── JsoupXssCleaner.java │ │ │ │ │ │ │ └── XssCleaner.java │ │ │ │ │ │ ├── filter/ │ │ │ │ │ │ │ ├── XssFilter.java │ │ │ │ │ │ │ └── XssRequestWrapper.java │ │ │ │ │ │ └── json/ │ │ │ │ │ │ └── XssStringJsonDeserializer.java │ │ │ │ │ └── package-info.java │ │ │ │ └── resources/ │ │ │ │ ├── META-INF/ │ │ │ │ │ └── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ └── banner.txt │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── yudao/ │ │ │ └── framework/ │ │ │ ├── desensitize/ │ │ │ │ └── core/ │ │ │ │ ├── DesensitizeTest.java │ │ │ │ ├── annotation/ │ │ │ │ │ └── Address.java │ │ │ │ └── handler/ │ │ │ │ └── AddressHandler.java │ │ │ └── encrypt/ │ │ │ └── ApiEncryptTest.java │ │ ├── 《芋道 Spring Boot API 接口文档 Swagger 入门》.md │ │ └── 《芋道 Spring Boot SpringMVC 入门》.md │ └── yudao-spring-boot-starter-websocket/ │ ├── pom.xml │ ├── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── yudao/ │ │ │ └── framework/ │ │ │ └── websocket/ │ │ │ ├── config/ │ │ │ │ ├── WebSocketProperties.java │ │ │ │ └── YudaoWebSocketAutoConfiguration.java │ │ │ ├── core/ │ │ │ │ ├── handler/ │ │ │ │ │ └── JsonWebSocketMessageHandler.java │ │ │ │ ├── listener/ │ │ │ │ │ └── WebSocketMessageListener.java │ │ │ │ ├── message/ │ │ │ │ │ └── JsonWebSocketMessage.java │ │ │ │ ├── security/ │ │ │ │ │ ├── LoginUserHandshakeInterceptor.java │ │ │ │ │ └── WebSocketAuthorizeRequestsCustomizer.java │ │ │ │ ├── sender/ │ │ │ │ │ ├── AbstractWebSocketMessageSender.java │ │ │ │ │ ├── WebSocketMessageSender.java │ │ │ │ │ ├── kafka/ │ │ │ │ │ │ ├── KafkaWebSocketMessage.java │ │ │ │ │ │ ├── KafkaWebSocketMessageConsumer.java │ │ │ │ │ │ └── KafkaWebSocketMessageSender.java │ │ │ │ │ ├── local/ │ │ │ │ │ │ └── LocalWebSocketMessageSender.java │ │ │ │ │ ├── rabbitmq/ │ │ │ │ │ │ ├── RabbitMQWebSocketMessage.java │ │ │ │ │ │ ├── RabbitMQWebSocketMessageConsumer.java │ │ │ │ │ │ └── RabbitMQWebSocketMessageSender.java │ │ │ │ │ ├── redis/ │ │ │ │ │ │ ├── RedisWebSocketMessage.java │ │ │ │ │ │ ├── RedisWebSocketMessageConsumer.java │ │ │ │ │ │ └── RedisWebSocketMessageSender.java │ │ │ │ │ └── rocketmq/ │ │ │ │ │ ├── RocketMQWebSocketMessage.java │ │ │ │ │ ├── RocketMQWebSocketMessageConsumer.java │ │ │ │ │ └── RocketMQWebSocketMessageSender.java │ │ │ │ ├── session/ │ │ │ │ │ ├── WebSocketSessionHandlerDecorator.java │ │ │ │ │ ├── WebSocketSessionManager.java │ │ │ │ │ └── WebSocketSessionManagerImpl.java │ │ │ │ └── util/ │ │ │ │ └── WebSocketFrameworkUtils.java │ │ │ └── package-info.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── spring/ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ └── 《芋道 Spring Boot WebSocket 入门》.md ├── yudao-gateway/ │ ├── Dockerfile │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── yudao/ │ │ │ └── gateway/ │ │ │ ├── GatewayServerApplication.java │ │ │ ├── filter/ │ │ │ │ ├── cors/ │ │ │ │ │ └── CorsFilter.java │ │ │ │ ├── grey/ │ │ │ │ │ ├── GrayLoadBalancer.java │ │ │ │ │ └── GrayReactiveLoadBalancerClientFilter.java │ │ │ │ ├── logging/ │ │ │ │ │ ├── AccessLog.java │ │ │ │ │ └── AccessLogFilter.java │ │ │ │ └── security/ │ │ │ │ ├── LoginUser.java │ │ │ │ └── TokenAuthenticationFilter.java │ │ │ ├── handler/ │ │ │ │ └── GlobalExceptionHandler.java │ │ │ ├── jackson/ │ │ │ │ └── GatewayJacksonAutoConfiguration.java │ │ │ ├── route/ │ │ │ │ ├── dynamic/ │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ └── util/ │ │ │ ├── BannerApplicationRunner.java │ │ │ ├── EnvUtils.java │ │ │ ├── SecurityFrameworkUtils.java │ │ │ └── WebFrameworkUtils.java │ │ └── resources/ │ │ ├── application-dev.yaml │ │ ├── application-local.yaml │ │ ├── application.yaml │ │ ├── banner.txt │ │ └── logback-spring.xml │ └── test/ │ └── java/ │ └── cn/ │ └── iocoder/ │ └── yudao/ │ └── ProjectReactor.java ├── yudao-module-ai/ │ ├── pom.xml │ ├── yudao-module-ai-api/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── yudao/ │ │ └── module/ │ │ └── ai/ │ │ ├── api/ │ │ │ └── package-info.java │ │ └── enums/ │ │ ├── AiChatRoleEnum.java │ │ ├── AiDocumentSplitStrategyEnum.java │ │ ├── DictTypeConstants.java │ │ ├── ErrorCodeConstants.java │ │ ├── image/ │ │ │ └── AiImageStatusEnum.java │ │ ├── model/ │ │ │ ├── AiModelTypeEnum.java │ │ │ └── AiPlatformEnum.java │ │ ├── music/ │ │ │ ├── AiMusicGenerateModeEnum.java │ │ │ └── AiMusicStatusEnum.java │ │ └── write/ │ │ └── AiWriteTypeEnum.java │ └── yudao-module-ai-server/ │ ├── Dockerfile │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── yudao/ │ │ │ └── module/ │ │ │ └── ai/ │ │ │ ├── AiServerApplication.java │ │ │ ├── controller/ │ │ │ │ ├── admin/ │ │ │ │ │ ├── chat/ │ │ │ │ │ │ ├── AiChatConversationController.java │ │ │ │ │ │ ├── AiChatMessageController.http │ │ │ │ │ │ ├── AiChatMessageController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── conversation/ │ │ │ │ │ │ │ ├── AiChatConversationCreateMyReqVO.java │ │ │ │ │ │ │ ├── AiChatConversationPageReqVO.java │ │ │ │ │ │ │ ├── AiChatConversationRespVO.java │ │ │ │ │ │ │ └── AiChatConversationUpdateMyReqVO.java │ │ │ │ │ │ └── message/ │ │ │ │ │ │ ├── AiChatMessagePageReqVO.java │ │ │ │ │ │ ├── AiChatMessageRespVO.java │ │ │ │ │ │ ├── AiChatMessageSendReqVO.java │ │ │ │ │ │ └── AiChatMessageSendRespVO.java │ │ │ │ │ ├── image/ │ │ │ │ │ │ ├── AiImageController.http │ │ │ │ │ │ ├── AiImageController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── AiImageDrawReqVO.java │ │ │ │ │ │ ├── AiImagePageReqVO.java │ │ │ │ │ │ ├── AiImagePublicPageReqVO.java │ │ │ │ │ │ ├── AiImageRespVO.java │ │ │ │ │ │ ├── AiImageUpdateReqVO.java │ │ │ │ │ │ └── midjourney/ │ │ │ │ │ │ ├── AiMidjourneyActionReqVO.java │ │ │ │ │ │ └── AiMidjourneyImagineReqVO.java │ │ │ │ │ ├── knowledge/ │ │ │ │ │ │ ├── AiKnowledgeController.http │ │ │ │ │ │ ├── AiKnowledgeController.java │ │ │ │ │ │ ├── AiKnowledgeDocumentController.http │ │ │ │ │ │ ├── AiKnowledgeDocumentController.java │ │ │ │ │ │ ├── AiKnowledgeSegmentController.http │ │ │ │ │ │ ├── AiKnowledgeSegmentController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── document/ │ │ │ │ │ │ │ ├── AiKnowledgeDocumentCreateListReqVO.java │ │ │ │ │ │ │ ├── AiKnowledgeDocumentPageReqVO.java │ │ │ │ │ │ │ ├── AiKnowledgeDocumentRespVO.java │ │ │ │ │ │ │ ├── AiKnowledgeDocumentUpdateReqVO.java │ │ │ │ │ │ │ └── AiKnowledgeDocumentUpdateStatusReqVO.java │ │ │ │ │ │ ├── knowledge/ │ │ │ │ │ │ │ ├── AiKnowledgeDocumentCreateReqVO.java │ │ │ │ │ │ │ ├── AiKnowledgePageReqVO.java │ │ │ │ │ │ │ ├── AiKnowledgeRespVO.java │ │ │ │ │ │ │ └── AiKnowledgeSaveReqVO.java │ │ │ │ │ │ └── segment/ │ │ │ │ │ │ ├── AiKnowledgeSegmentPageReqVO.java │ │ │ │ │ │ ├── AiKnowledgeSegmentProcessRespVO.java │ │ │ │ │ │ ├── AiKnowledgeSegmentRespVO.java │ │ │ │ │ │ ├── AiKnowledgeSegmentSaveReqVO.java │ │ │ │ │ │ ├── AiKnowledgeSegmentSearchReqVO.java │ │ │ │ │ │ ├── AiKnowledgeSegmentSearchRespVO.java │ │ │ │ │ │ └── AiKnowledgeSegmentUpdateStatusReqVO.java │ │ │ │ │ ├── mindmap/ │ │ │ │ │ │ ├── AiMindMapController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── AiMindMapGenerateReqVO.java │ │ │ │ │ │ ├── AiMindMapPageReqVO.java │ │ │ │ │ │ └── AiMindMapRespVO.java │ │ │ │ │ ├── model/ │ │ │ │ │ │ ├── AiApiKeyController.java │ │ │ │ │ │ ├── AiChatRoleController.java │ │ │ │ │ │ ├── AiModelController.java │ │ │ │ │ │ ├── AiToolController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── apikey/ │ │ │ │ │ │ │ ├── AiApiKeyPageReqVO.java │ │ │ │ │ │ │ ├── AiApiKeyRespVO.java │ │ │ │ │ │ │ └── AiApiKeySaveReqVO.java │ │ │ │ │ │ ├── chatRole/ │ │ │ │ │ │ │ ├── AiChatRolePageReqVO.java │ │ │ │ │ │ │ ├── AiChatRoleRespVO.java │ │ │ │ │ │ │ ├── AiChatRoleSaveMyReqVO.java │ │ │ │ │ │ │ └── AiChatRoleSaveReqVO.java │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ ├── AiModelPageReqVO.java │ │ │ │ │ │ │ ├── AiModelRespVO.java │ │ │ │ │ │ │ └── AiModelSaveReqVO.java │ │ │ │ │ │ └── tool/ │ │ │ │ │ │ ├── AiToolPageReqVO.java │ │ │ │ │ │ ├── AiToolRespVO.java │ │ │ │ │ │ └── AiToolSaveReqVO.java │ │ │ │ │ ├── music/ │ │ │ │ │ │ ├── AiMusicController.http │ │ │ │ │ │ ├── AiMusicController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── AiMusicPageReqVO.java │ │ │ │ │ │ ├── AiMusicRespVO.java │ │ │ │ │ │ ├── AiMusicUpdateMyReqVO.java │ │ │ │ │ │ ├── AiMusicUpdateReqVO.java │ │ │ │ │ │ └── AiSunoGenerateReqVO.java │ │ │ │ │ ├── workflow/ │ │ │ │ │ │ ├── AiWorkflowController.http │ │ │ │ │ │ ├── AiWorkflowController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── AiWorkflowPageReqVO.java │ │ │ │ │ │ ├── AiWorkflowRespVO.java │ │ │ │ │ │ ├── AiWorkflowSaveReqVO.java │ │ │ │ │ │ └── AiWorkflowTestReqVO.java │ │ │ │ │ └── write/ │ │ │ │ │ ├── AiWriteController.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── AiWriteGenerateReqVO.java │ │ │ │ │ ├── AiWritePageReqVO.java │ │ │ │ │ └── AiWriteRespVO.java │ │ │ │ ├── app/ │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ ├── dal/ │ │ │ │ ├── dataobject/ │ │ │ │ │ ├── chat/ │ │ │ │ │ │ ├── AiChatConversationDO.java │ │ │ │ │ │ └── AiChatMessageDO.java │ │ │ │ │ ├── image/ │ │ │ │ │ │ └── AiImageDO.java │ │ │ │ │ ├── knowledge/ │ │ │ │ │ │ ├── AiKnowledgeDO.java │ │ │ │ │ │ ├── AiKnowledgeDocumentDO.java │ │ │ │ │ │ └── AiKnowledgeSegmentDO.java │ │ │ │ │ ├── mindmap/ │ │ │ │ │ │ └── AiMindMapDO.java │ │ │ │ │ ├── model/ │ │ │ │ │ │ ├── AiApiKeyDO.java │ │ │ │ │ │ ├── AiChatRoleDO.java │ │ │ │ │ │ ├── AiModelDO.java │ │ │ │ │ │ └── AiToolDO.java │ │ │ │ │ ├── music/ │ │ │ │ │ │ └── AiMusicDO.java │ │ │ │ │ ├── workflow/ │ │ │ │ │ │ └── AiWorkflowDO.java │ │ │ │ │ └── write/ │ │ │ │ │ └── AiWriteDO.java │ │ │ │ └── mysql/ │ │ │ │ ├── chat/ │ │ │ │ │ ├── AiChatConversationMapper.java │ │ │ │ │ └── AiChatMessageMapper.java │ │ │ │ ├── image/ │ │ │ │ │ └── AiImageMapper.java │ │ │ │ ├── knowledge/ │ │ │ │ │ ├── AiKnowledgeDocumentMapper.java │ │ │ │ │ ├── AiKnowledgeMapper.java │ │ │ │ │ └── AiKnowledgeSegmentMapper.java │ │ │ │ ├── mindmap/ │ │ │ │ │ └── AiMindMapMapper.java │ │ │ │ ├── model/ │ │ │ │ │ ├── AiApiKeyMapper.java │ │ │ │ │ ├── AiChatMapper.java │ │ │ │ │ ├── AiChatRoleMapper.java │ │ │ │ │ └── AiToolMapper.java │ │ │ │ ├── music/ │ │ │ │ │ └── AiMusicMapper.java │ │ │ │ ├── workflow/ │ │ │ │ │ └── AiWorkflowMapper.java │ │ │ │ └── write/ │ │ │ │ └── AiWriteMapper.java │ │ │ ├── framework/ │ │ │ │ ├── ai/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── AiAutoConfiguration.java │ │ │ │ │ │ └── YudaoAiProperties.java │ │ │ │ │ ├── core/ │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ ├── AiModelFactory.java │ │ │ │ │ │ │ ├── AiModelFactoryImpl.java │ │ │ │ │ │ │ ├── baichuan/ │ │ │ │ │ │ │ │ └── BaiChuanChatModel.java │ │ │ │ │ │ │ ├── doubao/ │ │ │ │ │ │ │ │ └── DouBaoChatModel.java │ │ │ │ │ │ │ ├── gemini/ │ │ │ │ │ │ │ │ └── GeminiChatModel.java │ │ │ │ │ │ │ ├── grok/ │ │ │ │ │ │ │ │ └── GrokChatModel.java │ │ │ │ │ │ │ ├── hunyuan/ │ │ │ │ │ │ │ │ └── HunYuanChatModel.java │ │ │ │ │ │ │ ├── midjourney/ │ │ │ │ │ │ │ │ └── api/ │ │ │ │ │ │ │ │ └── MidjourneyApi.java │ │ │ │ │ │ │ ├── siliconflow/ │ │ │ │ │ │ │ │ ├── SiliconFlowApiConstants.java │ │ │ │ │ │ │ │ ├── SiliconFlowChatModel.java │ │ │ │ │ │ │ │ ├── SiliconFlowImageApi.java │ │ │ │ │ │ │ │ ├── SiliconFlowImageModel.java │ │ │ │ │ │ │ │ └── SiliconFlowImageOptions.java │ │ │ │ │ │ │ ├── suno/ │ │ │ │ │ │ │ │ └── api/ │ │ │ │ │ │ │ │ └── SunoApi.java │ │ │ │ │ │ │ ├── wenduoduo/ │ │ │ │ │ │ │ │ └── api/ │ │ │ │ │ │ │ │ └── WenDuoDuoPptApi.java │ │ │ │ │ │ │ └── xinghuo/ │ │ │ │ │ │ │ ├── XingHuoChatModel.java │ │ │ │ │ │ │ └── api/ │ │ │ │ │ │ │ └── XunFeiPptApi.java │ │ │ │ │ │ └── webserch/ │ │ │ │ │ │ ├── AiWebSearchClient.java │ │ │ │ │ │ ├── AiWebSearchRequest.java │ │ │ │ │ │ ├── AiWebSearchResponse.java │ │ │ │ │ │ └── bocha/ │ │ │ │ │ │ └── AiBoChaWebSearchClient.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── package-info.java │ │ │ │ ├── rpc/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── RpcConfiguration.java │ │ │ │ │ └── package-info.java │ │ │ │ └── security/ │ │ │ │ ├── config/ │ │ │ │ │ └── SecurityConfiguration.java │ │ │ │ └── core/ │ │ │ │ └── package-info.java │ │ │ ├── job/ │ │ │ │ ├── image/ │ │ │ │ │ └── AiMidjourneySyncJob.java │ │ │ │ └── music/ │ │ │ │ └── AiSunoSyncJob.java │ │ │ ├── package-info.java │ │ │ ├── service/ │ │ │ │ ├── chat/ │ │ │ │ │ ├── AiChatConversationService.java │ │ │ │ │ ├── AiChatConversationServiceImpl.java │ │ │ │ │ ├── AiChatMessageService.java │ │ │ │ │ └── AiChatMessageServiceImpl.java │ │ │ │ ├── image/ │ │ │ │ │ ├── AiImageService.java │ │ │ │ │ └── AiImageServiceImpl.java │ │ │ │ ├── knowledge/ │ │ │ │ │ ├── AiKnowledgeDocumentService.java │ │ │ │ │ ├── AiKnowledgeDocumentServiceImpl.java │ │ │ │ │ ├── AiKnowledgeSegmentService.java │ │ │ │ │ ├── AiKnowledgeSegmentServiceImpl.java │ │ │ │ │ ├── AiKnowledgeService.java │ │ │ │ │ ├── AiKnowledgeServiceImpl.java │ │ │ │ │ ├── bo/ │ │ │ │ │ │ ├── AiKnowledgeSegmentSearchReqBO.java │ │ │ │ │ │ └── AiKnowledgeSegmentSearchRespBO.java │ │ │ │ │ └── splitter/ │ │ │ │ │ ├── MarkdownQaSplitter.java │ │ │ │ │ └── SemanticTextSplitter.java │ │ │ │ ├── mindmap/ │ │ │ │ │ ├── AiMindMapService.java │ │ │ │ │ └── AiMindMapServiceImpl.java │ │ │ │ ├── model/ │ │ │ │ │ ├── AiApiKeyService.java │ │ │ │ │ ├── AiApiKeyServiceImpl.java │ │ │ │ │ ├── AiChatRoleService.java │ │ │ │ │ ├── AiChatRoleServiceImpl.java │ │ │ │ │ ├── AiModelService.java │ │ │ │ │ ├── AiModelServiceImpl.java │ │ │ │ │ ├── AiToolService.java │ │ │ │ │ └── AiToolServiceImpl.java │ │ │ │ ├── music/ │ │ │ │ │ ├── AiMusicService.java │ │ │ │ │ └── AiMusicServiceImpl.java │ │ │ │ ├── workflow/ │ │ │ │ │ ├── AiWorkflowService.java │ │ │ │ │ └── AiWorkflowServiceImpl.java │ │ │ │ └── write/ │ │ │ │ ├── AiWriteService.java │ │ │ │ └── AiWriteServiceImpl.java │ │ │ ├── tool/ │ │ │ │ ├── function/ │ │ │ │ │ ├── DirectoryListToolFunction.java │ │ │ │ │ ├── UserProfileQueryToolFunction.java │ │ │ │ │ ├── WeatherQueryToolFunction.java │ │ │ │ │ └── package-info.java │ │ │ │ └── method/ │ │ │ │ ├── Person.java │ │ │ │ ├── PersonService.java │ │ │ │ ├── PersonServiceImpl.java │ │ │ │ └── package-info.java │ │ │ └── util/ │ │ │ ├── AiUtils.java │ │ │ └── FileTypeUtils.java │ │ └── resources/ │ │ ├── application-dev.yaml │ │ ├── application-local.yaml │ │ ├── application.yaml │ │ └── logback-spring.xml │ └── test/ │ └── java/ │ └── cn/ │ └── iocoder/ │ └── yudao/ │ └── module/ │ └── ai/ │ └── framework/ │ └── ai/ │ └── core/ │ ├── model/ │ │ ├── chat/ │ │ │ ├── AnthropicChatModelTest.java │ │ │ ├── AzureOpenAIChatModelTests.java │ │ │ ├── BaiChuanChatModelTests.java │ │ │ ├── CozeChatModelTests.java │ │ │ ├── DeepSeekChatModelTests.java │ │ │ ├── DifyChatModelTests.java │ │ │ ├── DouBaoChatModelTests.java │ │ │ ├── FastGPTChatModelTests.java │ │ │ ├── GeminiChatModelTests.java │ │ │ ├── HunYuanChatModelTests.java │ │ │ ├── LlamaChatModelTests.java │ │ │ ├── MiniMaxChatModelTests.java │ │ │ ├── MoonshotChatModelTests.java │ │ │ ├── OllamaChatModelTests.java │ │ │ ├── OpenAIChatModelTests.java │ │ │ ├── SiliconFlowChatModelTests.java │ │ │ ├── TongYiChatModelTests.java │ │ │ ├── XingHuoChatModelTests.java │ │ │ ├── YiYanChatModelTests.java │ │ │ └── ZhiPuAiChatModelTests.java │ │ ├── image/ │ │ │ ├── MidjourneyApiTests.java │ │ │ ├── OpenAiImageModelTests.java │ │ │ ├── QianFanImageTests.java │ │ │ ├── SiliconFlowImageModelTests.java │ │ │ ├── StabilityAiImageModelTests.java │ │ │ ├── TongYiImagesModelTest.java │ │ │ └── ZhiPuAiImageModelTests.java │ │ ├── mcp/ │ │ │ └── DouBaoMcpTests.java │ │ ├── music/ │ │ │ └── SunoApiTests.java │ │ └── ppt/ │ │ ├── wdd/ │ │ │ └── WenDuoDuoPptApiTests.java │ │ └── xunfei/ │ │ └── XunFeiPptApiTests.java │ └── websearch/ │ └── AiBoChaWebSearchClientTest.java ├── yudao-module-bpm/ │ ├── pom.xml │ ├── yudao-module-bpm-api/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── yudao/ │ │ └── module/ │ │ └── bpm/ │ │ ├── api/ │ │ │ ├── event/ │ │ │ │ ├── BpmProcessInstanceStatusEvent.java │ │ │ │ └── BpmProcessInstanceStatusEventListener.java │ │ │ ├── package-info.java │ │ │ └── task/ │ │ │ ├── BpmProcessInstanceApi.java │ │ │ └── dto/ │ │ │ └── BpmProcessInstanceCreateReqDTO.java │ │ └── enums/ │ │ ├── ApiConstants.java │ │ ├── DictTypeConstants.java │ │ ├── ErrorCodeConstants.java │ │ ├── definition/ │ │ │ ├── BpmAutoApproveTypeEnum.java │ │ │ ├── BpmBoundaryEventTypeEnum.java │ │ │ ├── BpmChildProcessMultiInstanceSourceTypeEnum.java │ │ │ ├── BpmChildProcessStartUserEmptyTypeEnum.java │ │ │ ├── BpmChildProcessStartUserTypeEnum.java │ │ │ ├── BpmDelayTimerTypeEnum.java │ │ │ ├── BpmFieldPermissionEnum.java │ │ │ ├── BpmHttpRequestParamTypeEnum.java │ │ │ ├── BpmModelFormTypeEnum.java │ │ │ ├── BpmModelTypeEnum.java │ │ │ ├── BpmProcessListenerTypeEnum.java │ │ │ ├── BpmProcessListenerValueTypeEnum.java │ │ │ ├── BpmSimpleModeConditionTypeEnum.java │ │ │ ├── BpmSimpleModelNodeTypeEnum.java │ │ │ ├── BpmTriggerTypeEnum.java │ │ │ ├── BpmUserTaskApproveMethodEnum.java │ │ │ ├── BpmUserTaskApproveTypeEnum.java │ │ │ ├── BpmUserTaskAssignEmptyHandlerTypeEnum.java │ │ │ ├── BpmUserTaskAssignStartUserHandlerTypeEnum.java │ │ │ ├── BpmUserTaskRejectHandlerTypeEnum.java │ │ │ └── BpmUserTaskTimeoutHandlerTypeEnum.java │ │ ├── message/ │ │ │ └── BpmMessageEnum.java │ │ └── task/ │ │ ├── BpmCommentTypeEnum.java │ │ ├── BpmProcessInstanceStatusEnum.java │ │ ├── BpmReasonEnum.java │ │ ├── BpmTaskSignTypeEnum.java │ │ └── BpmTaskStatusEnum.java │ └── yudao-module-bpm-server/ │ ├── Dockerfile │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── yudao/ │ │ │ └── module/ │ │ │ └── bpm/ │ │ │ ├── BpmServerApplication.java │ │ │ ├── api/ │ │ │ │ ├── event/ │ │ │ │ │ ├── CrmContractStatusListener.java │ │ │ │ │ └── CrmReceivableStatusListener.java │ │ │ │ ├── package-info.java │ │ │ │ └── task/ │ │ │ │ └── BpmProcessInstanceApiImpl.java │ │ │ ├── controller/ │ │ │ │ ├── admin/ │ │ │ │ │ ├── base/ │ │ │ │ │ │ ├── dept/ │ │ │ │ │ │ │ └── DeptSimpleBaseVO.java │ │ │ │ │ │ ├── package-info.java │ │ │ │ │ │ └── user/ │ │ │ │ │ │ └── UserSimpleBaseVO.java │ │ │ │ │ ├── definition/ │ │ │ │ │ │ ├── BpmCategoryController.java │ │ │ │ │ │ ├── BpmFormController.java │ │ │ │ │ │ ├── BpmModelController.java │ │ │ │ │ │ ├── BpmProcessDefinitionController.java │ │ │ │ │ │ ├── BpmProcessExpressionController.java │ │ │ │ │ │ ├── BpmProcessListenerController.java │ │ │ │ │ │ ├── BpmUserGroupController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ ├── BpmCategoryPageReqVO.java │ │ │ │ │ │ │ ├── BpmCategoryRespVO.java │ │ │ │ │ │ │ └── BpmCategorySaveReqVO.java │ │ │ │ │ │ ├── expression/ │ │ │ │ │ │ │ ├── BpmProcessExpressionPageReqVO.java │ │ │ │ │ │ │ ├── BpmProcessExpressionRespVO.java │ │ │ │ │ │ │ └── BpmProcessExpressionSaveReqVO.java │ │ │ │ │ │ ├── form/ │ │ │ │ │ │ │ ├── BpmFormFieldVO.java │ │ │ │ │ │ │ ├── BpmFormPageReqVO.java │ │ │ │ │ │ │ ├── BpmFormRespVO.java │ │ │ │ │ │ │ └── BpmFormSaveReqVO.java │ │ │ │ │ │ ├── group/ │ │ │ │ │ │ │ ├── BpmUserGroupPageReqVO.java │ │ │ │ │ │ │ ├── BpmUserGroupRespVO.java │ │ │ │ │ │ │ └── BpmUserGroupSaveReqVO.java │ │ │ │ │ │ ├── listener/ │ │ │ │ │ │ │ ├── BpmProcessListenerPageReqVO.java │ │ │ │ │ │ │ ├── BpmProcessListenerRespVO.java │ │ │ │ │ │ │ └── BpmProcessListenerSaveReqVO.java │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ ├── BpmModeUpdateBpmnReqVO.java │ │ │ │ │ │ │ ├── BpmModelMetaInfoVO.java │ │ │ │ │ │ │ ├── BpmModelRespVO.java │ │ │ │ │ │ │ ├── BpmModelSaveReqVO.java │ │ │ │ │ │ │ ├── BpmModelUpdateStateReqVO.java │ │ │ │ │ │ │ └── simple/ │ │ │ │ │ │ │ ├── BpmSimpleModelNodeVO.java │ │ │ │ │ │ │ └── BpmSimpleModelUpdateReqVO.java │ │ │ │ │ │ └── process/ │ │ │ │ │ │ ├── BpmProcessDefinitionPageReqVO.java │ │ │ │ │ │ └── BpmProcessDefinitionRespVO.java │ │ │ │ │ ├── oa/ │ │ │ │ │ │ ├── BpmOALeaveController.http │ │ │ │ │ │ ├── BpmOALeaveController.java │ │ │ │ │ │ ├── package-info.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── BpmOALeaveCreateReqVO.java │ │ │ │ │ │ ├── BpmOALeavePageReqVO.java │ │ │ │ │ │ └── BpmOALeaveRespVO.java │ │ │ │ │ └── task/ │ │ │ │ │ ├── BpmProcessInstanceController.http │ │ │ │ │ ├── BpmProcessInstanceController.java │ │ │ │ │ ├── BpmProcessInstanceCopyController.java │ │ │ │ │ ├── BpmTaskController.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── activity/ │ │ │ │ │ │ └── BpmActivityRespVO.java │ │ │ │ │ ├── cc/ │ │ │ │ │ │ └── BpmProcessInstanceCopyRespVO.java │ │ │ │ │ ├── instance/ │ │ │ │ │ │ ├── BpmApprovalDetailReqVO.java │ │ │ │ │ │ ├── BpmApprovalDetailRespVO.java │ │ │ │ │ │ ├── BpmProcessInstanceBpmnModelViewRespVO.java │ │ │ │ │ │ ├── BpmProcessInstanceCancelReqVO.java │ │ │ │ │ │ ├── BpmProcessInstanceCopyPageReqVO.java │ │ │ │ │ │ ├── BpmProcessInstanceCreateReqVO.java │ │ │ │ │ │ ├── BpmProcessInstancePageReqVO.java │ │ │ │ │ │ ├── BpmProcessInstanceRespVO.java │ │ │ │ │ │ └── BpmProcessPrintDataRespVO.java │ │ │ │ │ └── task/ │ │ │ │ │ ├── BpmTaskApproveReqVO.java │ │ │ │ │ ├── BpmTaskCopyReqVO.java │ │ │ │ │ ├── BpmTaskDelegateReqVO.java │ │ │ │ │ ├── BpmTaskPageReqVO.java │ │ │ │ │ ├── BpmTaskRejectReqVO.java │ │ │ │ │ ├── BpmTaskRespVO.java │ │ │ │ │ ├── BpmTaskReturnReqVO.java │ │ │ │ │ ├── BpmTaskSignCreateReqVO.java │ │ │ │ │ ├── BpmTaskSignDeleteReqVO.java │ │ │ │ │ └── BpmTaskTransferReqVO.java │ │ │ │ ├── app/ │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ ├── convert/ │ │ │ │ ├── definition/ │ │ │ │ │ ├── BpmModelConvert.java │ │ │ │ │ └── BpmProcessDefinitionConvert.java │ │ │ │ ├── message/ │ │ │ │ │ └── BpmMessageConvert.java │ │ │ │ ├── package-info.java │ │ │ │ ├── task/ │ │ │ │ │ ├── BpmProcessInstanceConvert.java │ │ │ │ │ └── BpmTaskConvert.java │ │ │ │ └── 《芋道 Spring Boot 对象转换 MapStruct 入门》.md │ │ │ ├── dal/ │ │ │ │ ├── dataobject/ │ │ │ │ │ ├── definition/ │ │ │ │ │ │ ├── BpmCategoryDO.java │ │ │ │ │ │ ├── BpmFormDO.java │ │ │ │ │ │ ├── BpmProcessDefinitionInfoDO.java │ │ │ │ │ │ ├── BpmProcessExpressionDO.java │ │ │ │ │ │ ├── BpmProcessListenerDO.java │ │ │ │ │ │ └── BpmUserGroupDO.java │ │ │ │ │ ├── oa/ │ │ │ │ │ │ └── BpmOALeaveDO.java │ │ │ │ │ └── task/ │ │ │ │ │ └── BpmProcessInstanceCopyDO.java │ │ │ │ ├── mysql/ │ │ │ │ │ ├── category/ │ │ │ │ │ │ └── BpmCategoryMapper.java │ │ │ │ │ ├── definition/ │ │ │ │ │ │ ├── BpmFormMapper.java │ │ │ │ │ │ ├── BpmProcessDefinitionInfoMapper.java │ │ │ │ │ │ ├── BpmProcessExpressionMapper.java │ │ │ │ │ │ ├── BpmProcessListenerMapper.java │ │ │ │ │ │ └── BpmUserGroupMapper.java │ │ │ │ │ ├── oa/ │ │ │ │ │ │ └── BpmOALeaveMapper.java │ │ │ │ │ └── task/ │ │ │ │ │ └── BpmProcessInstanceCopyMapper.java │ │ │ │ └── redis/ │ │ │ │ ├── BpmProcessIdRedisDAO.java │ │ │ │ └── RedisKeyConstants.java │ │ │ ├── framework/ │ │ │ │ ├── flowable/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── BpmFlowableConfiguration.java │ │ │ │ │ └── core/ │ │ │ │ │ ├── behavior/ │ │ │ │ │ │ ├── BpmActivityBehaviorFactory.java │ │ │ │ │ │ ├── BpmParallelMultiInstanceBehavior.java │ │ │ │ │ │ ├── BpmSequentialMultiInstanceBehavior.java │ │ │ │ │ │ └── BpmUserTaskActivityBehavior.java │ │ │ │ │ ├── candidate/ │ │ │ │ │ │ ├── BpmTaskCandidateInvoker.java │ │ │ │ │ │ ├── BpmTaskCandidateStrategy.java │ │ │ │ │ │ ├── expression/ │ │ │ │ │ │ │ ├── BpmTaskAssignLeaderExpression.java │ │ │ │ │ │ │ └── BpmTaskAssignStartUserExpression.java │ │ │ │ │ │ └── strategy/ │ │ │ │ │ │ ├── dept/ │ │ │ │ │ │ │ ├── AbstractBpmTaskCandidateDeptLeaderStrategy.java │ │ │ │ │ │ │ ├── BpmTaskCandidateApproveUserSelectStrategy.java │ │ │ │ │ │ │ ├── BpmTaskCandidateDeptLeaderMultiStrategy.java │ │ │ │ │ │ │ ├── BpmTaskCandidateDeptLeaderStrategy.java │ │ │ │ │ │ │ ├── BpmTaskCandidateDeptMemberStrategy.java │ │ │ │ │ │ │ ├── BpmTaskCandidateStartUserDeptLeaderMultiStrategy.java │ │ │ │ │ │ │ ├── BpmTaskCandidateStartUserDeptLeaderStrategy.java │ │ │ │ │ │ │ └── BpmTaskCandidateStartUserSelectStrategy.java │ │ │ │ │ │ ├── form/ │ │ │ │ │ │ │ ├── BpmTaskCandidateFormDeptLeaderStrategy.java │ │ │ │ │ │ │ └── BpmTaskCandidateFormUserStrategy.java │ │ │ │ │ │ ├── other/ │ │ │ │ │ │ │ ├── BpmTaskCandidateAssignEmptyStrategy.java │ │ │ │ │ │ │ └── BpmTaskCandidateExpressionStrategy.java │ │ │ │ │ │ └── user/ │ │ │ │ │ │ ├── BpmTaskCandidateGroupStrategy.java │ │ │ │ │ │ ├── BpmTaskCandidatePostStrategy.java │ │ │ │ │ │ ├── BpmTaskCandidateRoleStrategy.java │ │ │ │ │ │ ├── BpmTaskCandidateStartUserStrategy.java │ │ │ │ │ │ └── BpmTaskCandidateUserStrategy.java │ │ │ │ │ ├── el/ │ │ │ │ │ │ └── VariableConvertByTypeExpressionFunction.java │ │ │ │ │ ├── enums/ │ │ │ │ │ │ ├── BpmTaskCandidateStrategyEnum.java │ │ │ │ │ │ ├── BpmnModelConstants.java │ │ │ │ │ │ └── BpmnVariableConstants.java │ │ │ │ │ ├── event/ │ │ │ │ │ │ └── BpmProcessInstanceEventPublisher.java │ │ │ │ │ ├── listener/ │ │ │ │ │ │ ├── BpmCopyTaskDelegate.java │ │ │ │ │ │ ├── BpmProcessInstanceEventListener.java │ │ │ │ │ │ ├── BpmTaskEventListener.java │ │ │ │ │ │ ├── BpmTriggerTaskDelegate.java │ │ │ │ │ │ └── demo/ │ │ │ │ │ │ ├── exection/ │ │ │ │ │ │ │ ├── DemoDelegateClassExecutionListener.java │ │ │ │ │ │ │ ├── DemoDelegateExpressionExecutionListener.java │ │ │ │ │ │ │ └── DemoSpringExpressionExecutionListener.java │ │ │ │ │ │ └── task/ │ │ │ │ │ │ ├── DemoDelegateClassTaskListener.java │ │ │ │ │ │ ├── DemoDelegateExpressionTaskListener.java │ │ │ │ │ │ └── DemoSpringExpressionTaskListener.java │ │ │ │ │ └── util/ │ │ │ │ │ ├── BpmHttpRequestUtils.java │ │ │ │ │ ├── BpmnModelUtils.java │ │ │ │ │ ├── FlowableUtils.java │ │ │ │ │ └── SimpleModelUtils.java │ │ │ │ ├── package-info.java │ │ │ │ ├── rpc/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── RpcConfiguration.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── security/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── SecurityConfiguration.java │ │ │ │ │ └── core/ │ │ │ │ │ └── package-info.java │ │ │ │ └── web/ │ │ │ │ ├── config/ │ │ │ │ │ └── BpmWebConfiguration.java │ │ │ │ ├── core/ │ │ │ │ │ └── FlowableWebFilter.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ └── service/ │ │ │ ├── definition/ │ │ │ │ ├── BpmCategoryService.java │ │ │ │ ├── BpmCategoryServiceImpl.java │ │ │ │ ├── BpmFormService.java │ │ │ │ ├── BpmFormServiceImpl.java │ │ │ │ ├── BpmModelService.java │ │ │ │ ├── BpmModelServiceImpl.java │ │ │ │ ├── BpmProcessDefinitionService.java │ │ │ │ ├── BpmProcessDefinitionServiceImpl.java │ │ │ │ ├── BpmProcessExpressionService.java │ │ │ │ ├── BpmProcessExpressionServiceImpl.java │ │ │ │ ├── BpmProcessListenerService.java │ │ │ │ ├── BpmProcessListenerServiceImpl.java │ │ │ │ ├── BpmUserGroupService.java │ │ │ │ ├── BpmUserGroupServiceImpl.java │ │ │ │ └── dto/ │ │ │ │ ├── BpmFormFieldRespDTO.java │ │ │ │ ├── BpmModelMetaInfoRespDTO.java │ │ │ │ └── BpmProcessDefinitionCreateReqDTO.java │ │ │ ├── message/ │ │ │ │ ├── BpmMessageService.java │ │ │ │ ├── BpmMessageServiceImpl.java │ │ │ │ └── dto/ │ │ │ │ ├── BpmMessageSendWhenProcessInstanceApproveReqDTO.java │ │ │ │ ├── BpmMessageSendWhenProcessInstanceRejectReqDTO.java │ │ │ │ ├── BpmMessageSendWhenTaskCreatedReqDTO.java │ │ │ │ └── BpmMessageSendWhenTaskTimeoutReqDTO.java │ │ │ ├── oa/ │ │ │ │ ├── BpmOALeaveService.java │ │ │ │ ├── BpmOALeaveServiceImpl.java │ │ │ │ └── listener/ │ │ │ │ └── BpmOALeaveStatusListener.java │ │ │ └── task/ │ │ │ ├── BpmProcessInstanceCopyService.java │ │ │ ├── BpmProcessInstanceCopyServiceImpl.java │ │ │ ├── BpmProcessInstanceService.java │ │ │ ├── BpmProcessInstanceServiceImpl.java │ │ │ ├── BpmTaskService.java │ │ │ ├── BpmTaskServiceImpl.java │ │ │ ├── listener/ │ │ │ │ ├── BpmCallActivityListener.java │ │ │ │ └── BpmUserTaskListener.java │ │ │ └── trigger/ │ │ │ ├── BpmTrigger.java │ │ │ ├── form/ │ │ │ │ ├── BpmFormDeleteTrigger.java │ │ │ │ └── BpmFormUpdateTrigger.java │ │ │ └── http/ │ │ │ ├── BpmAbstractHttpRequestTrigger.java │ │ │ ├── BpmHttpCallbackTrigger.java │ │ │ └── BpmSyncHttpRequestTrigger.java │ │ └── resources/ │ │ ├── application-dev.yaml │ │ ├── application-local.yaml │ │ ├── application.yaml │ │ └── logback-spring.xml │ └── test/ │ ├── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── yudao/ │ │ └── module/ │ │ └── bpm/ │ │ ├── framework/ │ │ │ └── flowable/ │ │ │ └── core/ │ │ │ └── candidate/ │ │ │ ├── BpmTaskCandidateInvokerTest.java │ │ │ ├── expression/ │ │ │ │ └── BpmTaskAssignLeaderExpressionTest.java │ │ │ └── strategy/ │ │ │ ├── dept/ │ │ │ │ ├── BpmTaskCandidateDeptLeaderMultiStrategyTest.java │ │ │ │ ├── BpmTaskCandidateDeptLeaderStrategyTest.java │ │ │ │ ├── BpmTaskCandidateDeptMemberStrategyTest.java │ │ │ │ ├── BpmTaskCandidateStartUserDeptLeaderMultiStrategyTest.java │ │ │ │ ├── BpmTaskCandidateStartUserDeptLeaderStrategyTest.java │ │ │ │ └── BpmTaskCandidateStartUserSelectStrategyTest.java │ │ │ ├── other/ │ │ │ │ ├── BpmTaskCandidateAssignEmptyStrategyTest.java │ │ │ │ └── BpmTaskCandidateExpressionStrategyTest.java │ │ │ └── user/ │ │ │ ├── BpmTaskCandidateGroupStrategyTest.java │ │ │ ├── BpmTaskCandidatePostStrategyTest.java │ │ │ ├── BpmTaskCandidateRoleStrategyTest.java │ │ │ ├── BpmTaskCandidateStartUserStrategyTest.java │ │ │ └── BpmTaskCandidateUserStrategyTest.java │ │ └── service/ │ │ ├── category/ │ │ │ └── BpmCategoryServiceImplTest.java │ │ └── definition/ │ │ ├── BpmFormServiceTest.java │ │ └── BpmUserGroupServiceTest.java │ └── resources/ │ ├── application-unit-test.yaml │ ├── logback.xml │ └── sql/ │ ├── clean.sql │ └── create_tables.sql ├── yudao-module-crm/ │ ├── pom.xml │ ├── yudao-module-crm-api/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── yudao/ │ │ └── module/ │ │ └── crm/ │ │ ├── api/ │ │ │ └── package-info.java │ │ └── enums/ │ │ ├── ApiConstants.java │ │ ├── DictTypeConstants.java │ │ ├── ErrorCodeConstants.java │ │ ├── LogRecordConstants.java │ │ ├── business/ │ │ │ └── CrmBusinessEndStatusEnum.java │ │ ├── common/ │ │ │ ├── CrmAuditStatusEnum.java │ │ │ ├── CrmBizTypeEnum.java │ │ │ └── CrmSceneTypeEnum.java │ │ ├── customer/ │ │ │ ├── CrmCustomerLevelEnum.java │ │ │ └── CrmCustomerLimitConfigTypeEnum.java │ │ ├── permission/ │ │ │ └── CrmPermissionLevelEnum.java │ │ ├── product/ │ │ │ └── CrmProductStatusEnum.java │ │ └── receivable/ │ │ └── CrmReceivableReturnTypeEnum.java │ └── yudao-module-crm-server/ │ ├── Dockerfile │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── yudao/ │ │ │ └── module/ │ │ │ └── crm/ │ │ │ ├── CrmServerApplication.java │ │ │ ├── api/ │ │ │ │ └── package-info.java │ │ │ ├── controller/ │ │ │ │ ├── admin/ │ │ │ │ │ ├── business/ │ │ │ │ │ │ ├── CrmBusinessController.java │ │ │ │ │ │ ├── CrmBusinessStatusController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── business/ │ │ │ │ │ │ │ ├── CrmBusinessPageReqVO.java │ │ │ │ │ │ │ ├── CrmBusinessRespVO.java │ │ │ │ │ │ │ ├── CrmBusinessSaveReqVO.java │ │ │ │ │ │ │ ├── CrmBusinessTransferReqVO.java │ │ │ │ │ │ │ └── CrmBusinessUpdateStatusReqVO.java │ │ │ │ │ │ └── status/ │ │ │ │ │ │ ├── CrmBusinessStatusRespVO.java │ │ │ │ │ │ └── CrmBusinessStatusSaveReqVO.java │ │ │ │ │ ├── clue/ │ │ │ │ │ │ ├── CrmClueController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── CrmCluePageReqVO.java │ │ │ │ │ │ ├── CrmClueRespVO.java │ │ │ │ │ │ ├── CrmClueSaveReqVO.java │ │ │ │ │ │ └── CrmClueTransferReqVO.java │ │ │ │ │ ├── contact/ │ │ │ │ │ │ ├── CrmContactController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── CrmContactBusiness2ReqVO.java │ │ │ │ │ │ ├── CrmContactBusinessReqVO.java │ │ │ │ │ │ ├── CrmContactPageReqVO.java │ │ │ │ │ │ ├── CrmContactRespVO.java │ │ │ │ │ │ ├── CrmContactSaveReqVO.java │ │ │ │ │ │ └── CrmContactTransferReqVO.java │ │ │ │ │ ├── contract/ │ │ │ │ │ │ ├── CrmContractConfigController.java │ │ │ │ │ │ ├── CrmContractController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── CrmContractConfigRespVO.java │ │ │ │ │ │ │ └── CrmContractConfigSaveReqVO.java │ │ │ │ │ │ └── contract/ │ │ │ │ │ │ ├── CrmContractPageReqVO.java │ │ │ │ │ │ ├── CrmContractRespVO.java │ │ │ │ │ │ ├── CrmContractSaveReqVO.java │ │ │ │ │ │ └── CrmContractTransferReqVO.java │ │ │ │ │ ├── customer/ │ │ │ │ │ │ ├── CrmCustomerController.java │ │ │ │ │ │ ├── CrmCustomerLimitConfigController.java │ │ │ │ │ │ ├── CrmCustomerPoolConfigController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── customer/ │ │ │ │ │ │ │ ├── CrmCustomerDistributeReqVO.java │ │ │ │ │ │ │ ├── CrmCustomerImportExcelVO.java │ │ │ │ │ │ │ ├── CrmCustomerImportReqVO.java │ │ │ │ │ │ │ ├── CrmCustomerImportRespVO.java │ │ │ │ │ │ │ ├── CrmCustomerLockReqVO.java │ │ │ │ │ │ │ ├── CrmCustomerPageReqVO.java │ │ │ │ │ │ │ ├── CrmCustomerRespVO.java │ │ │ │ │ │ │ ├── CrmCustomerSaveReqVO.java │ │ │ │ │ │ │ └── CrmCustomerTransferReqVO.java │ │ │ │ │ │ ├── limitconfig/ │ │ │ │ │ │ │ ├── CrmCustomerLimitConfigPageReqVO.java │ │ │ │ │ │ │ ├── CrmCustomerLimitConfigRespVO.java │ │ │ │ │ │ │ └── CrmCustomerLimitConfigSaveReqVO.java │ │ │ │ │ │ └── poolconfig/ │ │ │ │ │ │ ├── CrmCustomerPoolConfigRespVO.java │ │ │ │ │ │ └── CrmCustomerPoolConfigSaveReqVO.java │ │ │ │ │ ├── followup/ │ │ │ │ │ │ ├── CrmFollowUpRecordController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── CrmFollowUpRecordPageReqVO.java │ │ │ │ │ │ ├── CrmFollowUpRecordRespVO.java │ │ │ │ │ │ └── CrmFollowUpRecordSaveReqVO.java │ │ │ │ │ ├── operatelog/ │ │ │ │ │ │ ├── CrmOperateLogController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── CrmOperateLogPageReqVO.java │ │ │ │ │ │ └── CrmOperateLogRespVO.java │ │ │ │ │ ├── permission/ │ │ │ │ │ │ ├── CrmPermissionController.http │ │ │ │ │ │ ├── CrmPermissionController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── CrmPermissionRespVO.java │ │ │ │ │ │ ├── CrmPermissionSaveReqVO.java │ │ │ │ │ │ └── CrmPermissionUpdateReqVO.java │ │ │ │ │ ├── product/ │ │ │ │ │ │ ├── CrmProductCategoryController.java │ │ │ │ │ │ ├── CrmProductController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ ├── CrmProductCategoryCreateReqVO.java │ │ │ │ │ │ │ ├── CrmProductCategoryListReqVO.java │ │ │ │ │ │ │ └── CrmProductCategoryRespVO.java │ │ │ │ │ │ └── product/ │ │ │ │ │ │ ├── CrmProductPageReqVO.java │ │ │ │ │ │ ├── CrmProductRespVO.java │ │ │ │ │ │ └── CrmProductSaveReqVO.java │ │ │ │ │ ├── receivable/ │ │ │ │ │ │ ├── CrmReceivableController.java │ │ │ │ │ │ ├── CrmReceivablePlanController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── plan/ │ │ │ │ │ │ │ ├── CrmReceivablePlanPageReqVO.java │ │ │ │ │ │ │ ├── CrmReceivablePlanRespVO.java │ │ │ │ │ │ │ └── CrmReceivablePlanSaveReqVO.java │ │ │ │ │ │ └── receivable/ │ │ │ │ │ │ ├── CrmReceivablePageReqVO.java │ │ │ │ │ │ ├── CrmReceivableRespVO.java │ │ │ │ │ │ └── CrmReceivableSaveReqVO.java │ │ │ │ │ └── statistics/ │ │ │ │ │ ├── CrmStatisticsCustomerController.http │ │ │ │ │ ├── CrmStatisticsCustomerController.java │ │ │ │ │ ├── CrmStatisticsFunnelController.java │ │ │ │ │ ├── CrmStatisticsPerformanceController.java │ │ │ │ │ ├── CrmStatisticsPortraitController.java │ │ │ │ │ ├── CrmStatisticsRankController.http │ │ │ │ │ ├── CrmStatisticsRankController.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── customer/ │ │ │ │ │ │ ├── CrmStatisticsCustomerByUserBaseRespVO.java │ │ │ │ │ │ ├── CrmStatisticsCustomerContractSummaryRespVO.java │ │ │ │ │ │ ├── CrmStatisticsCustomerDealCycleByAreaRespVO.java │ │ │ │ │ │ ├── CrmStatisticsCustomerDealCycleByDateRespVO.java │ │ │ │ │ │ ├── CrmStatisticsCustomerDealCycleByProductRespVO.java │ │ │ │ │ │ ├── CrmStatisticsCustomerDealCycleByUserRespVO.java │ │ │ │ │ │ ├── CrmStatisticsCustomerReqVO.java │ │ │ │ │ │ ├── CrmStatisticsCustomerSummaryByDateRespVO.java │ │ │ │ │ │ ├── CrmStatisticsCustomerSummaryByUserRespVO.java │ │ │ │ │ │ ├── CrmStatisticsFollowUpSummaryByDateRespVO.java │ │ │ │ │ │ ├── CrmStatisticsFollowUpSummaryByTypeRespVO.java │ │ │ │ │ │ ├── CrmStatisticsFollowUpSummaryByUserRespVO.java │ │ │ │ │ │ ├── CrmStatisticsPoolSummaryByDateRespVO.java │ │ │ │ │ │ └── CrmStatisticsPoolSummaryByUserRespVO.java │ │ │ │ │ ├── funnel/ │ │ │ │ │ │ ├── CrmStatisticFunnelSummaryRespVO.java │ │ │ │ │ │ ├── CrmStatisticsBusinessInversionRateSummaryByDateRespVO.java │ │ │ │ │ │ ├── CrmStatisticsBusinessSummaryByDateRespVO.java │ │ │ │ │ │ ├── CrmStatisticsBusinessSummaryByEndStatusRespVO.java │ │ │ │ │ │ └── CrmStatisticsFunnelReqVO.java │ │ │ │ │ ├── performance/ │ │ │ │ │ │ ├── CrmStatisticsPerformanceReqVO.java │ │ │ │ │ │ └── CrmStatisticsPerformanceRespVO.java │ │ │ │ │ ├── portrait/ │ │ │ │ │ │ ├── CrmStatisticCustomerAreaRespVO.java │ │ │ │ │ │ ├── CrmStatisticCustomerIndustryRespVO.java │ │ │ │ │ │ ├── CrmStatisticCustomerLevelRespVO.java │ │ │ │ │ │ ├── CrmStatisticCustomerSourceRespVO.java │ │ │ │ │ │ └── CrmStatisticsPortraitReqVO.java │ │ │ │ │ └── rank/ │ │ │ │ │ ├── CrmStatisticsRankReqVO.java │ │ │ │ │ └── CrmStatisticsRankRespVO.java │ │ │ │ ├── app/ │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ ├── convert/ │ │ │ │ ├── package-info.java │ │ │ │ └── 《芋道 Spring Boot 对象转换 MapStruct 入门》.md │ │ │ ├── dal/ │ │ │ │ ├── dataobject/ │ │ │ │ │ ├── business/ │ │ │ │ │ │ ├── CrmBusinessDO.java │ │ │ │ │ │ ├── CrmBusinessProductDO.java │ │ │ │ │ │ ├── CrmBusinessStatusDO.java │ │ │ │ │ │ └── CrmBusinessStatusTypeDO.java │ │ │ │ │ ├── clue/ │ │ │ │ │ │ ├── CrmClueDO.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── contact/ │ │ │ │ │ │ ├── CrmContactBusinessDO.java │ │ │ │ │ │ ├── CrmContactDO.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── contract/ │ │ │ │ │ │ ├── CrmContractConfigDO.java │ │ │ │ │ │ ├── CrmContractDO.java │ │ │ │ │ │ └── CrmContractProductDO.java │ │ │ │ │ ├── customer/ │ │ │ │ │ │ ├── CrmCustomerDO.java │ │ │ │ │ │ ├── CrmCustomerLimitConfigDO.java │ │ │ │ │ │ └── CrmCustomerPoolConfigDO.java │ │ │ │ │ ├── followup/ │ │ │ │ │ │ └── CrmFollowUpRecordDO.java │ │ │ │ │ ├── permission/ │ │ │ │ │ │ └── CrmPermissionDO.java │ │ │ │ │ ├── product/ │ │ │ │ │ │ ├── CrmProductCategoryDO.java │ │ │ │ │ │ ├── CrmProductDO.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── receivable/ │ │ │ │ │ ├── CrmReceivableDO.java │ │ │ │ │ └── CrmReceivablePlanDO.java │ │ │ │ ├── mysql/ │ │ │ │ │ ├── business/ │ │ │ │ │ │ ├── CrmBusinessMapper.java │ │ │ │ │ │ ├── CrmBusinessProductMapper.java │ │ │ │ │ │ ├── CrmBusinessStatusMapper.java │ │ │ │ │ │ └── CrmBusinessStatusTypeMapper.java │ │ │ │ │ ├── clue/ │ │ │ │ │ │ ├── CrmClueMapper.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── contact/ │ │ │ │ │ │ ├── CrmContactBusinessMapper.java │ │ │ │ │ │ └── CrmContactMapper.java │ │ │ │ │ ├── contract/ │ │ │ │ │ │ ├── CrmContractConfigMapper.java │ │ │ │ │ │ ├── CrmContractMapper.java │ │ │ │ │ │ └── CrmContractProductMapper.java │ │ │ │ │ ├── customer/ │ │ │ │ │ │ ├── CrmCustomerLimitConfigMapper.java │ │ │ │ │ │ ├── CrmCustomerMapper.java │ │ │ │ │ │ └── CrmCustomerPoolConfigMapper.java │ │ │ │ │ ├── followup/ │ │ │ │ │ │ └── CrmFollowUpRecordMapper.java │ │ │ │ │ ├── permission/ │ │ │ │ │ │ ├── CrmPermissionMapper.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── product/ │ │ │ │ │ │ ├── CrmProductCategoryMapper.java │ │ │ │ │ │ └── CrmProductMapper.java │ │ │ │ │ ├── receivable/ │ │ │ │ │ │ ├── CrmReceivableMapper.java │ │ │ │ │ │ └── CrmReceivablePlanMapper.java │ │ │ │ │ └── statistics/ │ │ │ │ │ ├── CrmStatisticsCustomerMapper.java │ │ │ │ │ ├── CrmStatisticsFunnelMapper.java │ │ │ │ │ ├── CrmStatisticsPerformanceMapper.java │ │ │ │ │ ├── CrmStatisticsPortraitMapper.java │ │ │ │ │ └── CrmStatisticsRankMapper.java │ │ │ │ └── redis/ │ │ │ │ ├── RedisKeyConstants.java │ │ │ │ └── no/ │ │ │ │ └── CrmNoRedisDAO.java │ │ │ ├── framework/ │ │ │ │ ├── excel/ │ │ │ │ │ ├── core/ │ │ │ │ │ │ └── AreaExcelColumnSelectFunction.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── operatelog/ │ │ │ │ │ ├── core/ │ │ │ │ │ │ ├── CrmBusinessParseFunction.java │ │ │ │ │ │ ├── CrmContactParseFunction.java │ │ │ │ │ │ ├── CrmContractParseFunction.java │ │ │ │ │ │ ├── CrmCustomerIndustryParseFunction.java │ │ │ │ │ │ ├── CrmCustomerLevelParseFunction.java │ │ │ │ │ │ ├── CrmCustomerParseFunction.java │ │ │ │ │ │ ├── CrmCustomerSourceParseFunction.java │ │ │ │ │ │ ├── CrmProductStatusParseFunction.java │ │ │ │ │ │ ├── CrmProductUnitParseFunction.java │ │ │ │ │ │ ├── CrmReceivablePlanParseFunction.java │ │ │ │ │ │ ├── CrmReceivableReturnTypeParseFunction.java │ │ │ │ │ │ ├── SysAdminUserParseFunction.java │ │ │ │ │ │ ├── SysAreaParseFunction.java │ │ │ │ │ │ ├── SysBooleanParseFunction.java │ │ │ │ │ │ ├── SysDeptParseFunction.java │ │ │ │ │ │ └── SysSexParseFunction.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── package-info.java │ │ │ │ ├── permission/ │ │ │ │ │ ├── core/ │ │ │ │ │ │ ├── annotations/ │ │ │ │ │ │ │ └── CrmPermission.java │ │ │ │ │ │ ├── aop/ │ │ │ │ │ │ │ └── CrmPermissionAspect.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── rpc/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── RpcConfiguration.java │ │ │ │ │ └── package-info.java │ │ │ │ └── security/ │ │ │ │ ├── config/ │ │ │ │ │ └── SecurityConfiguration.java │ │ │ │ └── core/ │ │ │ │ └── package-info.java │ │ │ ├── job/ │ │ │ │ ├── customer/ │ │ │ │ │ └── CrmCustomerAutoPutPoolJob.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── service/ │ │ │ │ ├── business/ │ │ │ │ │ ├── CrmBusinessService.java │ │ │ │ │ ├── CrmBusinessServiceImpl.java │ │ │ │ │ ├── CrmBusinessStatusService.java │ │ │ │ │ └── CrmBusinessStatusServiceImpl.java │ │ │ │ ├── clue/ │ │ │ │ │ ├── CrmClueService.java │ │ │ │ │ └── CrmClueServiceImpl.java │ │ │ │ ├── contact/ │ │ │ │ │ ├── CrmContactBusinessService.java │ │ │ │ │ ├── CrmContactBusinessServiceImpl.java │ │ │ │ │ ├── CrmContactService.java │ │ │ │ │ └── CrmContactServiceImpl.java │ │ │ │ ├── contract/ │ │ │ │ │ ├── CrmContractConfigService.java │ │ │ │ │ ├── CrmContractConfigServiceImpl.java │ │ │ │ │ ├── CrmContractService.java │ │ │ │ │ ├── CrmContractServiceImpl.java │ │ │ │ │ └── listener/ │ │ │ │ │ └── CrmContractStatusListener.java │ │ │ │ ├── customer/ │ │ │ │ │ ├── CrmCustomerLimitConfigService.java │ │ │ │ │ ├── CrmCustomerLimitConfigServiceImpl.java │ │ │ │ │ ├── CrmCustomerPoolConfigService.java │ │ │ │ │ ├── CrmCustomerPoolConfigServiceImpl.java │ │ │ │ │ ├── CrmCustomerService.java │ │ │ │ │ ├── CrmCustomerServiceImpl.java │ │ │ │ │ └── bo/ │ │ │ │ │ └── CrmCustomerCreateReqBO.java │ │ │ │ ├── followup/ │ │ │ │ │ ├── CrmFollowUpRecordService.java │ │ │ │ │ ├── CrmFollowUpRecordServiceImpl.java │ │ │ │ │ └── bo/ │ │ │ │ │ └── CrmFollowUpCreateReqBO.java │ │ │ │ ├── permission/ │ │ │ │ │ ├── CrmPermissionService.java │ │ │ │ │ ├── CrmPermissionServiceImpl.java │ │ │ │ │ └── bo/ │ │ │ │ │ ├── CrmPermissionCreateReqBO.java │ │ │ │ │ └── CrmPermissionTransferReqBO.java │ │ │ │ ├── product/ │ │ │ │ │ ├── CrmProductCategoryService.java │ │ │ │ │ ├── CrmProductCategoryServiceImpl.java │ │ │ │ │ ├── CrmProductService.java │ │ │ │ │ └── CrmProductServiceImpl.java │ │ │ │ ├── receivable/ │ │ │ │ │ ├── CrmReceivablePlanService.java │ │ │ │ │ ├── CrmReceivablePlanServiceImpl.java │ │ │ │ │ ├── CrmReceivableService.java │ │ │ │ │ ├── CrmReceivableServiceImpl.java │ │ │ │ │ └── listener/ │ │ │ │ │ └── CrmReceivableStatusListener.java │ │ │ │ └── statistics/ │ │ │ │ ├── CrmStatisticsCustomerService.java │ │ │ │ ├── CrmStatisticsCustomerServiceImpl.java │ │ │ │ ├── CrmStatisticsFunnelService.java │ │ │ │ ├── CrmStatisticsFunnelServiceImpl.java │ │ │ │ ├── CrmStatisticsPerformanceService.java │ │ │ │ ├── CrmStatisticsPerformanceServiceImpl.java │ │ │ │ ├── CrmStatisticsPortraitService.java │ │ │ │ ├── CrmStatisticsPortraitServiceImpl.java │ │ │ │ ├── CrmStatisticsRankService.java │ │ │ │ └── CrmStatisticsRankServiceImpl.java │ │ │ └── util/ │ │ │ ├── CrmAuditStatusUtils.java │ │ │ └── CrmPermissionUtils.java │ │ └── resources/ │ │ ├── application-dev.yaml │ │ ├── application-local.yaml │ │ ├── application.yaml │ │ ├── logback-spring.xml │ │ └── mapper/ │ │ └── statistics/ │ │ ├── CrmStatisticsCustomerMapper.xml │ │ ├── CrmStatisticsFunnelMapper.xml │ │ ├── CrmStatisticsPerformanceMapper.xml │ │ ├── CrmStatisticsPortraitMapper.xml │ │ └── CrmStatisticsRankMapper.xml │ └── test/ │ └── resources/ │ ├── application-unit-test.yaml │ └── logback.xml ├── yudao-module-erp/ │ ├── pom.xml │ ├── yudao-module-erp-api/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── yudao/ │ │ └── module/ │ │ └── erp/ │ │ ├── api/ │ │ │ └── package-info.java │ │ └── enums/ │ │ ├── ApiConstants.java │ │ ├── DictTypeConstants.java │ │ ├── ErpAuditStatus.java │ │ ├── ErrorCodeConstants.java │ │ ├── LogRecordConstants.java │ │ ├── common/ │ │ │ └── ErpBizTypeEnum.java │ │ └── stock/ │ │ └── ErpStockRecordBizTypeEnum.java │ └── yudao-module-erp-server/ │ ├── Dockerfile │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── yudao/ │ │ └── module/ │ │ └── erp/ │ │ ├── ErpServerApplication.java │ │ ├── controller/ │ │ │ ├── admin/ │ │ │ │ ├── finance/ │ │ │ │ │ ├── ErpAccountController.java │ │ │ │ │ ├── ErpFinancePaymentController.java │ │ │ │ │ ├── ErpFinanceReceiptController.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── account/ │ │ │ │ │ │ ├── ErpAccountPageReqVO.java │ │ │ │ │ │ ├── ErpAccountRespVO.java │ │ │ │ │ │ └── ErpAccountSaveReqVO.java │ │ │ │ │ ├── payment/ │ │ │ │ │ │ ├── ErpFinancePaymentPageReqVO.java │ │ │ │ │ │ ├── ErpFinancePaymentRespVO.java │ │ │ │ │ │ └── ErpFinancePaymentSaveReqVO.java │ │ │ │ │ └── receipt/ │ │ │ │ │ ├── ErpFinanceReceiptPageReqVO.java │ │ │ │ │ ├── ErpFinanceReceiptRespVO.java │ │ │ │ │ └── ErpFinanceReceiptSaveReqVO.java │ │ │ │ ├── product/ │ │ │ │ │ ├── ErpProductCategoryController.java │ │ │ │ │ ├── ErpProductController.java │ │ │ │ │ ├── ErpProductUnitController.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── category/ │ │ │ │ │ │ ├── ErpProductCategoryListReqVO.java │ │ │ │ │ │ ├── ErpProductCategoryRespVO.java │ │ │ │ │ │ └── ErpProductCategorySaveReqVO.java │ │ │ │ │ ├── product/ │ │ │ │ │ │ ├── ErpProductPageReqVO.java │ │ │ │ │ │ ├── ErpProductRespVO.java │ │ │ │ │ │ └── ProductSaveReqVO.java │ │ │ │ │ └── unit/ │ │ │ │ │ ├── ErpProductUnitPageReqVO.java │ │ │ │ │ ├── ErpProductUnitRespVO.java │ │ │ │ │ └── ErpProductUnitSaveReqVO.java │ │ │ │ ├── purchase/ │ │ │ │ │ ├── ErpPurchaseInController.java │ │ │ │ │ ├── ErpPurchaseOrderController.java │ │ │ │ │ ├── ErpPurchaseReturnController.java │ │ │ │ │ ├── ErpSupplierController.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── in/ │ │ │ │ │ │ ├── ErpPurchaseInPageReqVO.java │ │ │ │ │ │ ├── ErpPurchaseInRespVO.java │ │ │ │ │ │ └── ErpPurchaseInSaveReqVO.java │ │ │ │ │ ├── order/ │ │ │ │ │ │ ├── ErpPurchaseOrderPageReqVO.java │ │ │ │ │ │ ├── ErpPurchaseOrderRespVO.java │ │ │ │ │ │ └── ErpPurchaseOrderSaveReqVO.java │ │ │ │ │ ├── returns/ │ │ │ │ │ │ ├── ErpPurchaseReturnPageReqVO.java │ │ │ │ │ │ ├── ErpPurchaseReturnRespVO.java │ │ │ │ │ │ └── ErpPurchaseReturnSaveReqVO.java │ │ │ │ │ └── supplier/ │ │ │ │ │ ├── ErpSupplierPageReqVO.java │ │ │ │ │ ├── ErpSupplierRespVO.java │ │ │ │ │ └── ErpSupplierSaveReqVO.java │ │ │ │ ├── sale/ │ │ │ │ │ ├── ErpCustomerController.java │ │ │ │ │ ├── ErpSaleOrderController.java │ │ │ │ │ ├── ErpSaleOutController.java │ │ │ │ │ ├── ErpSaleReturnController.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── customer/ │ │ │ │ │ │ ├── ErpCustomerPageReqVO.java │ │ │ │ │ │ ├── ErpCustomerRespVO.java │ │ │ │ │ │ └── ErpCustomerSaveReqVO.java │ │ │ │ │ ├── order/ │ │ │ │ │ │ ├── ErpSaleOrderPageReqVO.java │ │ │ │ │ │ ├── ErpSaleOrderRespVO.java │ │ │ │ │ │ └── ErpSaleOrderSaveReqVO.java │ │ │ │ │ ├── out/ │ │ │ │ │ │ ├── ErpSaleOutPageReqVO.java │ │ │ │ │ │ ├── ErpSaleOutRespVO.java │ │ │ │ │ │ └── ErpSaleOutSaveReqVO.java │ │ │ │ │ └── returns/ │ │ │ │ │ ├── ErpSaleReturnPageReqVO.java │ │ │ │ │ ├── ErpSaleReturnRespVO.java │ │ │ │ │ └── ErpSaleReturnSaveReqVO.java │ │ │ │ ├── statistics/ │ │ │ │ │ ├── ErpPurchaseStatisticsController.java │ │ │ │ │ ├── ErpSaleStatisticsController.http │ │ │ │ │ ├── ErpSaleStatisticsController.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── purchase/ │ │ │ │ │ │ ├── ErpPurchaseSummaryRespVO.java │ │ │ │ │ │ └── ErpPurchaseTimeSummaryRespVO.java │ │ │ │ │ └── sale/ │ │ │ │ │ ├── ErpSaleSummaryRespVO.java │ │ │ │ │ └── ErpSaleTimeSummaryRespVO.java │ │ │ │ └── stock/ │ │ │ │ ├── ErpStockCheckController.java │ │ │ │ ├── ErpStockController.java │ │ │ │ ├── ErpStockInController.java │ │ │ │ ├── ErpStockMoveController.java │ │ │ │ ├── ErpStockOutController.java │ │ │ │ ├── ErpStockRecordController.java │ │ │ │ ├── ErpWarehouseController.java │ │ │ │ └── vo/ │ │ │ │ ├── check/ │ │ │ │ │ ├── ErpStockCheckPageReqVO.java │ │ │ │ │ ├── ErpStockCheckRespVO.java │ │ │ │ │ └── ErpStockCheckSaveReqVO.java │ │ │ │ ├── in/ │ │ │ │ │ ├── ErpStockInPageReqVO.java │ │ │ │ │ ├── ErpStockInRespVO.java │ │ │ │ │ └── ErpStockInSaveReqVO.java │ │ │ │ ├── move/ │ │ │ │ │ ├── ErpStockMovePageReqVO.java │ │ │ │ │ ├── ErpStockMoveRespVO.java │ │ │ │ │ └── ErpStockMoveSaveReqVO.java │ │ │ │ ├── out/ │ │ │ │ │ ├── ErpStockOutPageReqVO.java │ │ │ │ │ ├── ErpStockOutRespVO.java │ │ │ │ │ └── ErpStockOutSaveReqVO.java │ │ │ │ ├── record/ │ │ │ │ │ ├── ErpStockRecordPageReqVO.java │ │ │ │ │ └── ErpStockRecordRespVO.java │ │ │ │ ├── stock/ │ │ │ │ │ ├── ErpStockPageReqVO.java │ │ │ │ │ └── ErpStockRespVO.java │ │ │ │ └── warehouse/ │ │ │ │ ├── ErpWarehousePageReqVO.java │ │ │ │ ├── ErpWarehouseRespVO.java │ │ │ │ └── ErpWarehouseSaveReqVO.java │ │ │ └── package-info.java │ │ ├── dal/ │ │ │ ├── dataobject/ │ │ │ │ ├── finance/ │ │ │ │ │ ├── ErpAccountDO.java │ │ │ │ │ ├── ErpFinancePaymentDO.java │ │ │ │ │ ├── ErpFinancePaymentItemDO.java │ │ │ │ │ ├── ErpFinanceReceiptDO.java │ │ │ │ │ └── ErpFinanceReceiptItemDO.java │ │ │ │ ├── product/ │ │ │ │ │ ├── ErpProductCategoryDO.java │ │ │ │ │ ├── ErpProductDO.java │ │ │ │ │ └── ErpProductUnitDO.java │ │ │ │ ├── purchase/ │ │ │ │ │ ├── ErpPurchaseInDO.java │ │ │ │ │ ├── ErpPurchaseInItemDO.java │ │ │ │ │ ├── ErpPurchaseOrderDO.java │ │ │ │ │ ├── ErpPurchaseOrderItemDO.java │ │ │ │ │ ├── ErpPurchaseReturnDO.java │ │ │ │ │ ├── ErpPurchaseReturnItemDO.java │ │ │ │ │ └── ErpSupplierDO.java │ │ │ │ ├── sale/ │ │ │ │ │ ├── ErpCustomerDO.java │ │ │ │ │ ├── ErpSaleOrderDO.java │ │ │ │ │ ├── ErpSaleOrderItemDO.java │ │ │ │ │ ├── ErpSaleOutDO.java │ │ │ │ │ ├── ErpSaleOutItemDO.java │ │ │ │ │ ├── ErpSaleReturnDO.java │ │ │ │ │ └── ErpSaleReturnItemDO.java │ │ │ │ └── stock/ │ │ │ │ ├── ErpStockCheckDO.java │ │ │ │ ├── ErpStockCheckItemDO.java │ │ │ │ ├── ErpStockDO.java │ │ │ │ ├── ErpStockInDO.java │ │ │ │ ├── ErpStockInItemDO.java │ │ │ │ ├── ErpStockMoveDO.java │ │ │ │ ├── ErpStockMoveItemDO.java │ │ │ │ ├── ErpStockOutDO.java │ │ │ │ ├── ErpStockOutItemDO.java │ │ │ │ ├── ErpStockRecordDO.java │ │ │ │ └── ErpWarehouseDO.java │ │ │ ├── mysql/ │ │ │ │ ├── finance/ │ │ │ │ │ ├── ErpAccountMapper.java │ │ │ │ │ ├── ErpFinancePaymentItemMapper.java │ │ │ │ │ ├── ErpFinancePaymentMapper.java │ │ │ │ │ ├── ErpFinanceReceiptItemMapper.java │ │ │ │ │ └── ErpFinanceReceiptMapper.java │ │ │ │ ├── product/ │ │ │ │ │ ├── ErpProductCategoryMapper.java │ │ │ │ │ ├── ErpProductMapper.java │ │ │ │ │ └── ErpProductUnitMapper.java │ │ │ │ ├── purchase/ │ │ │ │ │ ├── ErpPurchaseInItemMapper.java │ │ │ │ │ ├── ErpPurchaseInMapper.java │ │ │ │ │ ├── ErpPurchaseOrderItemMapper.java │ │ │ │ │ ├── ErpPurchaseOrderMapper.java │ │ │ │ │ ├── ErpPurchaseReturnItemMapper.java │ │ │ │ │ ├── ErpPurchaseReturnMapper.java │ │ │ │ │ └── ErpSupplierMapper.java │ │ │ │ ├── sale/ │ │ │ │ │ ├── ErpCustomerMapper.java │ │ │ │ │ ├── ErpSaleOrderItemMapper.java │ │ │ │ │ ├── ErpSaleOrderMapper.java │ │ │ │ │ ├── ErpSaleOutItemMapper.java │ │ │ │ │ ├── ErpSaleOutMapper.java │ │ │ │ │ ├── ErpSaleReturnItemMapper.java │ │ │ │ │ └── ErpSaleReturnMapper.java │ │ │ │ ├── statistics/ │ │ │ │ │ ├── ErpPurchaseStatisticsMapper.java │ │ │ │ │ └── ErpSaleStatisticsMapper.java │ │ │ │ └── stock/ │ │ │ │ ├── ErpStockCheckItemMapper.java │ │ │ │ ├── ErpStockCheckMapper.java │ │ │ │ ├── ErpStockInItemMapper.java │ │ │ │ ├── ErpStockInMapper.java │ │ │ │ ├── ErpStockMapper.java │ │ │ │ ├── ErpStockMoveItemMapper.java │ │ │ │ ├── ErpStockMoveMapper.java │ │ │ │ ├── ErpStockOutItemMapper.java │ │ │ │ ├── ErpStockOutMapper.java │ │ │ │ ├── ErpStockRecordMapper.java │ │ │ │ └── ErpWarehouseMapper.java │ │ │ └── redis/ │ │ │ ├── RedisKeyConstants.java │ │ │ └── no/ │ │ │ └── ErpNoRedisDAO.java │ │ ├── framework/ │ │ │ ├── package-info.java │ │ │ ├── rpc/ │ │ │ │ ├── config/ │ │ │ │ │ └── RpcConfiguration.java │ │ │ │ └── package-info.java │ │ │ └── security/ │ │ │ ├── config/ │ │ │ │ └── SecurityConfiguration.java │ │ │ └── core/ │ │ │ └── package-info.java │ │ ├── package-info.java │ │ └── service/ │ │ ├── finance/ │ │ │ ├── ErpAccountService.java │ │ │ ├── ErpAccountServiceImpl.java │ │ │ ├── ErpFinancePaymentService.java │ │ │ ├── ErpFinancePaymentServiceImpl.java │ │ │ ├── ErpFinanceReceiptService.java │ │ │ └── ErpFinanceReceiptServiceImpl.java │ │ ├── product/ │ │ │ ├── ErpProductCategoryService.java │ │ │ ├── ErpProductCategoryServiceImpl.java │ │ │ ├── ErpProductService.java │ │ │ ├── ErpProductServiceImpl.java │ │ │ ├── ErpProductUnitService.java │ │ │ └── ErpProductUnitServiceImpl.java │ │ ├── purchase/ │ │ │ ├── ErpPurchaseInService.java │ │ │ ├── ErpPurchaseInServiceImpl.java │ │ │ ├── ErpPurchaseOrderService.java │ │ │ ├── ErpPurchaseOrderServiceImpl.java │ │ │ ├── ErpPurchaseReturnService.java │ │ │ ├── ErpPurchaseReturnServiceImpl.java │ │ │ ├── ErpSupplierService.java │ │ │ └── ErpSupplierServiceImpl.java │ │ ├── sale/ │ │ │ ├── ErpCustomerService.java │ │ │ ├── ErpCustomerServiceImpl.java │ │ │ ├── ErpSaleOrderService.java │ │ │ ├── ErpSaleOrderServiceImpl.java │ │ │ ├── ErpSaleOutService.java │ │ │ ├── ErpSaleOutServiceImpl.java │ │ │ ├── ErpSaleReturnService.java │ │ │ └── ErpSaleReturnServiceImpl.java │ │ ├── statistics/ │ │ │ ├── ErpPurchaseStatisticsService.java │ │ │ ├── ErpPurchaseStatisticsServiceImpl.java │ │ │ ├── ErpSaleStatisticsService.java │ │ │ └── ErpSaleStatisticsServiceImpl.java │ │ └── stock/ │ │ ├── ErpStockCheckService.java │ │ ├── ErpStockCheckServiceImpl.java │ │ ├── ErpStockInService.java │ │ ├── ErpStockInServiceImpl.java │ │ ├── ErpStockMoveService.java │ │ ├── ErpStockMoveServiceImpl.java │ │ ├── ErpStockOutService.java │ │ ├── ErpStockOutServiceImpl.java │ │ ├── ErpStockRecordService.java │ │ ├── ErpStockRecordServiceImpl.java │ │ ├── ErpStockService.java │ │ ├── ErpStockServiceImpl.java │ │ ├── ErpWarehouseService.java │ │ ├── ErpWarehouseServiceImpl.java │ │ └── bo/ │ │ └── ErpStockRecordCreateReqBO.java │ └── resources/ │ ├── application-dev.yaml │ ├── application-local.yaml │ ├── application.yaml │ ├── logback-spring.xml │ └── mapper/ │ └── statistics/ │ ├── ErpPurchaseStatisticsMapper.xml │ └── ErpSaleStatisticsMapper.xml ├── yudao-module-infra/ │ ├── pom.xml │ ├── yudao-module-infra-api/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── yudao/ │ │ └── module/ │ │ └── infra/ │ │ ├── api/ │ │ │ ├── config/ │ │ │ │ └── ConfigApi.java │ │ │ ├── file/ │ │ │ │ ├── FileApi.java │ │ │ │ └── dto/ │ │ │ │ └── FileCreateReqDTO.java │ │ │ ├── package-info.java │ │ │ └── websocket/ │ │ │ ├── WebSocketSenderApi.java │ │ │ └── dto/ │ │ │ └── WebSocketSendReqDTO.java │ │ └── enums/ │ │ ├── ApiConstants.java │ │ ├── DictTypeConstants.java │ │ ├── ErrorCodeConstants.java │ │ ├── codegen/ │ │ │ ├── CodegenColumnHtmlTypeEnum.java │ │ │ ├── CodegenColumnListConditionEnum.java │ │ │ ├── CodegenFrontTypeEnum.java │ │ │ ├── CodegenSceneEnum.java │ │ │ ├── CodegenTemplateTypeEnum.java │ │ │ └── CodegenVOTypeEnum.java │ │ ├── config/ │ │ │ └── ConfigTypeEnum.java │ │ ├── logger/ │ │ │ └── ApiErrorLogProcessStatusEnum.java │ │ └── package-info.java │ └── yudao-module-infra-server/ │ ├── Dockerfile │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── cn/ │ │ │ └── iocoder/ │ │ │ └── yudao/ │ │ │ └── module/ │ │ │ └── infra/ │ │ │ ├── InfraServerApplication.java │ │ │ ├── api/ │ │ │ │ ├── config/ │ │ │ │ │ └── ConfigApiImpl.java │ │ │ │ ├── file/ │ │ │ │ │ └── FileApiImpl.java │ │ │ │ ├── logger/ │ │ │ │ │ ├── ApiAccessLogApiImpl.java │ │ │ │ │ └── ApiErrorLogApiImpl.java │ │ │ │ ├── package-info.java │ │ │ │ └── websocket/ │ │ │ │ └── WebSocketSenderApiImpl.java │ │ │ ├── controller/ │ │ │ │ ├── admin/ │ │ │ │ │ ├── codegen/ │ │ │ │ │ │ ├── CodegenController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── CodegenCreateListReqVO.java │ │ │ │ │ │ ├── CodegenDetailRespVO.java │ │ │ │ │ │ ├── CodegenPreviewRespVO.java │ │ │ │ │ │ ├── CodegenUpdateReqVO.java │ │ │ │ │ │ ├── column/ │ │ │ │ │ │ │ ├── CodegenColumnRespVO.java │ │ │ │ │ │ │ └── CodegenColumnSaveReqVO.java │ │ │ │ │ │ └── table/ │ │ │ │ │ │ ├── CodegenTablePageReqVO.java │ │ │ │ │ │ ├── CodegenTableRespVO.java │ │ │ │ │ │ ├── CodegenTableSaveReqVO.java │ │ │ │ │ │ └── DatabaseTableRespVO.java │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── ConfigController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── ConfigPageReqVO.java │ │ │ │ │ │ ├── ConfigRespVO.java │ │ │ │ │ │ └── ConfigSaveReqVO.java │ │ │ │ │ ├── db/ │ │ │ │ │ │ ├── DataSourceConfigController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── DataSourceConfigRespVO.java │ │ │ │ │ │ └── DataSourceConfigSaveReqVO.java │ │ │ │ │ ├── demo/ │ │ │ │ │ │ ├── demo01/ │ │ │ │ │ │ │ ├── Demo01ContactController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── Demo01ContactPageReqVO.java │ │ │ │ │ │ │ ├── Demo01ContactRespVO.java │ │ │ │ │ │ │ └── Demo01ContactSaveReqVO.java │ │ │ │ │ │ ├── demo02/ │ │ │ │ │ │ │ ├── Demo02CategoryController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── Demo02CategoryListReqVO.java │ │ │ │ │ │ │ ├── Demo02CategoryRespVO.java │ │ │ │ │ │ │ └── Demo02CategorySaveReqVO.java │ │ │ │ │ │ ├── demo03/ │ │ │ │ │ │ │ ├── erp/ │ │ │ │ │ │ │ │ ├── Demo03StudentErpController.java │ │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ │ ├── Demo03StudentErpPageReqVO.java │ │ │ │ │ │ │ │ ├── Demo03StudentErpRespVO.java │ │ │ │ │ │ │ │ └── Demo03StudentErpSaveReqVO.java │ │ │ │ │ │ │ ├── inner/ │ │ │ │ │ │ │ │ ├── Demo03StudentInnerController.java │ │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ │ ├── Demo03StudentInnerPageReqVO.java │ │ │ │ │ │ │ │ ├── Demo03StudentInnerRespVO.java │ │ │ │ │ │ │ │ └── Demo03StudentInnerSaveReqVO.java │ │ │ │ │ │ │ └── normal/ │ │ │ │ │ │ │ ├── Demo03StudentNormalController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── Demo03StudentNormalPageReqVO.java │ │ │ │ │ │ │ ├── Demo03StudentNormalRespVO.java │ │ │ │ │ │ │ └── Demo03StudentNormalSaveReqVO.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── file/ │ │ │ │ │ │ ├── FileConfigController.http │ │ │ │ │ │ ├── FileConfigController.java │ │ │ │ │ │ ├── FileController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── FileConfigPageReqVO.java │ │ │ │ │ │ │ ├── FileConfigRespVO.java │ │ │ │ │ │ │ └── FileConfigSaveReqVO.java │ │ │ │ │ │ └── file/ │ │ │ │ │ │ ├── FileCreateReqVO.java │ │ │ │ │ │ ├── FilePageReqVO.java │ │ │ │ │ │ ├── FilePresignedUrlRespVO.java │ │ │ │ │ │ ├── FileRespVO.java │ │ │ │ │ │ └── FileUploadReqVO.java │ │ │ │ │ ├── logger/ │ │ │ │ │ │ ├── ApiAccessLogController.java │ │ │ │ │ │ ├── ApiErrorLogController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── apiaccesslog/ │ │ │ │ │ │ │ ├── ApiAccessLogPageReqVO.java │ │ │ │ │ │ │ └── ApiAccessLogRespVO.java │ │ │ │ │ │ └── apierrorlog/ │ │ │ │ │ │ ├── ApiErrorLogPageReqVO.java │ │ │ │ │ │ └── ApiErrorLogRespVO.java │ │ │ │ │ └── redis/ │ │ │ │ │ ├── RedisController.http │ │ │ │ │ ├── RedisController.java │ │ │ │ │ └── vo/ │ │ │ │ │ └── RedisMonitorRespVO.java │ │ │ │ ├── app/ │ │ │ │ │ ├── file/ │ │ │ │ │ │ ├── AppFileController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ └── AppFileUploadReqVO.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ ├── convert/ │ │ │ │ ├── codegen/ │ │ │ │ │ └── CodegenConvert.java │ │ │ │ ├── config/ │ │ │ │ │ └── ConfigConvert.java │ │ │ │ ├── file/ │ │ │ │ │ └── FileConfigConvert.java │ │ │ │ ├── package-info.java │ │ │ │ ├── redis/ │ │ │ │ │ └── RedisConvert.java │ │ │ │ └── 《芋道 Spring Boot 对象转换 MapStruct 入门》.md │ │ │ ├── dal/ │ │ │ │ ├── dataobject/ │ │ │ │ │ ├── codegen/ │ │ │ │ │ │ ├── CodegenColumnDO.java │ │ │ │ │ │ └── CodegenTableDO.java │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── ConfigDO.java │ │ │ │ │ ├── db/ │ │ │ │ │ │ └── DataSourceConfigDO.java │ │ │ │ │ ├── demo/ │ │ │ │ │ │ ├── demo01/ │ │ │ │ │ │ │ └── Demo01ContactDO.java │ │ │ │ │ │ ├── demo02/ │ │ │ │ │ │ │ └── Demo02CategoryDO.java │ │ │ │ │ │ └── demo03/ │ │ │ │ │ │ ├── Demo03CourseDO.java │ │ │ │ │ │ ├── Demo03GradeDO.java │ │ │ │ │ │ └── Demo03StudentDO.java │ │ │ │ │ ├── file/ │ │ │ │ │ │ ├── FileConfigDO.java │ │ │ │ │ │ ├── FileContentDO.java │ │ │ │ │ │ └── FileDO.java │ │ │ │ │ └── logger/ │ │ │ │ │ ├── ApiAccessLogDO.java │ │ │ │ │ └── ApiErrorLogDO.java │ │ │ │ └── mysql/ │ │ │ │ ├── codegen/ │ │ │ │ │ ├── CodegenColumnMapper.java │ │ │ │ │ └── CodegenTableMapper.java │ │ │ │ ├── config/ │ │ │ │ │ └── ConfigMapper.java │ │ │ │ ├── db/ │ │ │ │ │ └── DataSourceConfigMapper.java │ │ │ │ ├── demo/ │ │ │ │ │ ├── demo01/ │ │ │ │ │ │ └── Demo01ContactMapper.java │ │ │ │ │ ├── demo02/ │ │ │ │ │ │ └── Demo02CategoryMapper.java │ │ │ │ │ └── demo03/ │ │ │ │ │ ├── erp/ │ │ │ │ │ │ ├── Demo03CourseErpMapper.java │ │ │ │ │ │ ├── Demo03GradeErpMapper.java │ │ │ │ │ │ └── Demo03StudentErpMapper.java │ │ │ │ │ ├── inner/ │ │ │ │ │ │ ├── Demo03CourseInnerMapper.java │ │ │ │ │ │ ├── Demo03GradeInnerMapper.java │ │ │ │ │ │ └── Demo03StudentInnerMapper.java │ │ │ │ │ └── normal/ │ │ │ │ │ ├── Demo03CourseNormalMapper.java │ │ │ │ │ ├── Demo03GradeNormalMapper.java │ │ │ │ │ └── Demo03StudentNormalMapper.java │ │ │ │ ├── file/ │ │ │ │ │ ├── FileConfigMapper.java │ │ │ │ │ ├── FileContentMapper.java │ │ │ │ │ └── FileMapper.java │ │ │ │ └── logger/ │ │ │ │ ├── ApiAccessLogMapper.java │ │ │ │ └── ApiErrorLogMapper.java │ │ │ ├── framework/ │ │ │ │ ├── codegen/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── CodegenConfiguration.java │ │ │ │ │ │ └── CodegenProperties.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── file/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── YudaoFileAutoConfiguration.java │ │ │ │ │ ├── core/ │ │ │ │ │ │ ├── client/ │ │ │ │ │ │ │ ├── AbstractFileClient.java │ │ │ │ │ │ │ ├── FileClient.java │ │ │ │ │ │ │ ├── FileClientConfig.java │ │ │ │ │ │ │ ├── FileClientFactory.java │ │ │ │ │ │ │ ├── FileClientFactoryImpl.java │ │ │ │ │ │ │ ├── db/ │ │ │ │ │ │ │ │ ├── DBFileClient.java │ │ │ │ │ │ │ │ └── DBFileClientConfig.java │ │ │ │ │ │ │ ├── ftp/ │ │ │ │ │ │ │ │ ├── FtpFileClient.java │ │ │ │ │ │ │ │ └── FtpFileClientConfig.java │ │ │ │ │ │ │ ├── local/ │ │ │ │ │ │ │ │ ├── LocalFileClient.java │ │ │ │ │ │ │ │ └── LocalFileClientConfig.java │ │ │ │ │ │ │ ├── s3/ │ │ │ │ │ │ │ │ ├── S3FileClient.java │ │ │ │ │ │ │ │ └── S3FileClientConfig.java │ │ │ │ │ │ │ └── sftp/ │ │ │ │ │ │ │ ├── SftpFileClient.java │ │ │ │ │ │ │ └── SftpFileClientConfig.java │ │ │ │ │ │ ├── enums/ │ │ │ │ │ │ │ └── FileStorageEnum.java │ │ │ │ │ │ └── utils/ │ │ │ │ │ │ └── FileTypeUtils.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── monitor/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── AdminServerConfiguration.java │ │ │ │ │ ├── package-info.java │ │ │ │ │ └── 《芋道 Spring Boot 监控工具 Admin 入门》.md │ │ │ │ ├── package-info.java │ │ │ │ ├── rpc/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── RpcConfiguration.java │ │ │ │ │ └── package-info.java │ │ │ │ └── security/ │ │ │ │ ├── config/ │ │ │ │ │ └── SecurityConfiguration.java │ │ │ │ └── core/ │ │ │ │ └── package-info.java │ │ │ ├── job/ │ │ │ │ ├── logger/ │ │ │ │ │ ├── AccessLogCleanJob.java │ │ │ │ │ └── ErrorLogCleanJob.java │ │ │ │ └── package-info.java │ │ │ ├── mq/ │ │ │ │ ├── consumer/ │ │ │ │ │ └── package-info.java │ │ │ │ ├── message/ │ │ │ │ │ └── package-info.java │ │ │ │ └── producer/ │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── service/ │ │ │ │ ├── codegen/ │ │ │ │ │ ├── CodegenService.java │ │ │ │ │ ├── CodegenServiceImpl.java │ │ │ │ │ └── inner/ │ │ │ │ │ ├── CodegenBuilder.java │ │ │ │ │ └── CodegenEngine.java │ │ │ │ ├── config/ │ │ │ │ │ ├── ConfigService.java │ │ │ │ │ └── ConfigServiceImpl.java │ │ │ │ ├── db/ │ │ │ │ │ ├── DataSourceConfigService.java │ │ │ │ │ ├── DataSourceConfigServiceImpl.java │ │ │ │ │ ├── DatabaseTableService.java │ │ │ │ │ └── DatabaseTableServiceImpl.java │ │ │ │ ├── demo/ │ │ │ │ │ ├── demo01/ │ │ │ │ │ │ ├── Demo01ContactService.java │ │ │ │ │ │ └── Demo01ContactServiceImpl.java │ │ │ │ │ ├── demo02/ │ │ │ │ │ │ ├── Demo02CategoryService.java │ │ │ │ │ │ └── Demo02CategoryServiceImpl.java │ │ │ │ │ └── demo03/ │ │ │ │ │ ├── erp/ │ │ │ │ │ │ ├── Demo03StudentErpService.java │ │ │ │ │ │ └── Demo03StudentErpServiceImpl.java │ │ │ │ │ ├── inner/ │ │ │ │ │ │ ├── Demo03StudentInnerService.java │ │ │ │ │ │ └── Demo03StudentInnerServiceImpl.java │ │ │ │ │ └── normal/ │ │ │ │ │ ├── Demo03StudentNormalService.java │ │ │ │ │ └── Demo03StudentNormalServiceImpl.java │ │ │ │ ├── file/ │ │ │ │ │ ├── FileConfigService.java │ │ │ │ │ ├── FileConfigServiceImpl.java │ │ │ │ │ ├── FileService.java │ │ │ │ │ └── FileServiceImpl.java │ │ │ │ └── logger/ │ │ │ │ ├── ApiAccessLogService.java │ │ │ │ ├── ApiAccessLogServiceImpl.java │ │ │ │ ├── ApiErrorLogService.java │ │ │ │ └── ApiErrorLogServiceImpl.java │ │ │ └── websocket/ │ │ │ ├── DemoWebSocketMessageListener.java │ │ │ └── message/ │ │ │ ├── DemoReceiveMessage.java │ │ │ └── DemoSendMessage.java │ │ └── resources/ │ │ ├── application-dev.yaml │ │ ├── application-local.yaml │ │ ├── application.yaml │ │ ├── codegen/ │ │ │ ├── java/ │ │ │ │ ├── controller/ │ │ │ │ │ ├── controller.vm │ │ │ │ │ └── vo/ │ │ │ │ │ ├── listReqVO.vm │ │ │ │ │ ├── pageReqVO.vm │ │ │ │ │ ├── respVO.vm │ │ │ │ │ └── saveReqVO.vm │ │ │ │ ├── dal/ │ │ │ │ │ ├── do.vm │ │ │ │ │ ├── do_sub.vm │ │ │ │ │ ├── mapper.vm │ │ │ │ │ ├── mapper.xml.vm │ │ │ │ │ └── mapper_sub.vm │ │ │ │ ├── enums/ │ │ │ │ │ └── errorcode.vm │ │ │ │ ├── service/ │ │ │ │ │ ├── service.vm │ │ │ │ │ └── serviceImpl.vm │ │ │ │ └── test/ │ │ │ │ └── serviceTest.vm │ │ │ ├── sql/ │ │ │ │ ├── h2.vm │ │ │ │ └── sql.vm │ │ │ ├── vue/ │ │ │ │ ├── api/ │ │ │ │ │ └── api.js.vm │ │ │ │ └── views/ │ │ │ │ ├── components/ │ │ │ │ │ ├── form_sub_erp.vue.vm │ │ │ │ │ ├── form_sub_inner.vue.vm │ │ │ │ │ ├── form_sub_normal.vue.vm │ │ │ │ │ ├── list_sub_erp.vue.vm │ │ │ │ │ └── list_sub_inner.vue.vm │ │ │ │ ├── form.vue.vm │ │ │ │ └── index.vue.vm │ │ │ ├── vue3/ │ │ │ │ ├── api/ │ │ │ │ │ └── api.ts.vm │ │ │ │ └── views/ │ │ │ │ ├── components/ │ │ │ │ │ ├── form_sub_erp.vue.vm │ │ │ │ │ ├── form_sub_inner.vue.vm │ │ │ │ │ ├── form_sub_normal.vue.vm │ │ │ │ │ ├── list_sub_erp.vue.vm │ │ │ │ │ └── list_sub_inner.vue.vm │ │ │ │ ├── form.vue.vm │ │ │ │ └── index.vue.vm │ │ │ ├── vue3_admin_uniapp/ │ │ │ │ ├── components/ │ │ │ │ │ └── search-form.vue.vm │ │ │ │ └── views/ │ │ │ │ ├── detail/ │ │ │ │ │ └── index.vue.vm │ │ │ │ ├── form/ │ │ │ │ │ └── index.vue.vm │ │ │ │ └── index.vue.vm │ │ │ ├── vue3_vben/ │ │ │ │ ├── api/ │ │ │ │ │ └── api.ts.vm │ │ │ │ └── views/ │ │ │ │ ├── data.ts.vm │ │ │ │ ├── form.vue.vm │ │ │ │ └── index.vue.vm │ │ │ ├── vue3_vben5_antd/ │ │ │ │ ├── general/ │ │ │ │ │ ├── api/ │ │ │ │ │ │ └── api.ts.vm │ │ │ │ │ └── views/ │ │ │ │ │ ├── form.vue.vm │ │ │ │ │ ├── index.vue.vm │ │ │ │ │ └── modules/ │ │ │ │ │ ├── form_sub_erp.vue.vm │ │ │ │ │ ├── form_sub_inner.vue.vm │ │ │ │ │ ├── form_sub_normal.vue.vm │ │ │ │ │ ├── list_sub_erp.vue.vm │ │ │ │ │ └── list_sub_inner.vue.vm │ │ │ │ └── schema/ │ │ │ │ ├── api/ │ │ │ │ │ └── api.ts.vm │ │ │ │ └── views/ │ │ │ │ ├── data.ts.vm │ │ │ │ ├── form.vue.vm │ │ │ │ ├── index.vue.vm │ │ │ │ └── modules/ │ │ │ │ ├── form_sub_erp.vue.vm │ │ │ │ ├── form_sub_inner.vue.vm │ │ │ │ ├── form_sub_normal.vue.vm │ │ │ │ ├── list_sub_erp.vue.vm │ │ │ │ └── list_sub_inner.vue.vm │ │ │ └── vue3_vben5_ele/ │ │ │ ├── general/ │ │ │ │ ├── api/ │ │ │ │ │ └── api.ts.vm │ │ │ │ └── views/ │ │ │ │ ├── form.vue.vm │ │ │ │ ├── index.vue.vm │ │ │ │ └── modules/ │ │ │ │ ├── form_sub_erp.vue.vm │ │ │ │ ├── form_sub_inner.vue.vm │ │ │ │ ├── form_sub_normal.vue.vm │ │ │ │ ├── list_sub_erp.vue.vm │ │ │ │ └── list_sub_inner.vue.vm │ │ │ └── schema/ │ │ │ ├── api/ │ │ │ │ └── api.ts.vm │ │ │ └── views/ │ │ │ ├── data.ts.vm │ │ │ ├── form.vue.vm │ │ │ ├── index.vue.vm │ │ │ └── modules/ │ │ │ ├── form_sub_erp.vue.vm │ │ │ ├── form_sub_inner.vue.vm │ │ │ ├── form_sub_normal.vue.vm │ │ │ ├── list_sub_erp.vue.vm │ │ │ └── list_sub_inner.vue.vm │ │ └── logback-spring.xml │ └── test/ │ ├── java/ │ │ └── cn/ │ │ └── iocoder/ │ │ └── yudao/ │ │ └── module/ │ │ └── infra/ │ │ ├── framework/ │ │ │ └── file/ │ │ │ └── core/ │ │ │ ├── ftp/ │ │ │ │ └── FtpFileClientTest.java │ │ │ ├── local/ │ │ │ │ └── LocalFileClientTest.java │ │ │ ├── s3/ │ │ │ │ └── S3FileClientTest.java │ │ │ └── sftp/ │ │ │ └── SftpFileClientTest.java │ │ └── service/ │ │ ├── DefaultDatabaseQueryTest.java │ │ ├── codegen/ │ │ │ ├── CodegenServiceImplTest.java │ │ │ └── inner/ │ │ │ ├── CodegenBuilderTest.java │ │
Showing preview only (1,328K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (12020 symbols across 2542 files)
FILE: sql/dm/flowable-patch/src/main/java/liquibase/database/core/DmDatabase.java
class DmDatabase (line 41) | public class DmDatabase extends AbstractJdbcDatabase {
method getDefaultDatabaseProductName (line 44) | @Override
method isCorrectDatabaseImplementation (line 54) | @Override
method getDefaultDriver (line 64) | @Override
method getShortName (line 77) | @Override
method getDefaultPort (line 82) | @Override
method supportsInitiallyDeferrableColumns (line 90) | @Override
method supportsTablespaces (line 95) | @Override
method getPriority (line 100) | @Override
method DmDatabase (line 122) | public DmDatabase() {
method tryProxySession (line 139) | private void tryProxySession(final String url, final Connection con) {
method getDatabaseMajorVersion (line 154) | @Override
method getDatabaseMinorVersion (line 163) | @Override
method getJdbcCatalogName (line 172) | @Override
method getJdbcSchemaName (line 177) | @Override
method getAutoIncrementClause (line 182) | @Override
method generatePrimaryKeyName (line 196) | @Override
method isReservedWord (line 207) | @Override
method supportsSequences (line 212) | @Override
method supportsSchemas (line 222) | @Override
method getConnectionCatalogName (line 227) | @Override
method getDefaultCatalogName (line 242) | @Override
method getDateLiteral (line 261) | @Override
method isSystemObject (line 281) | @Override
method supportsAutoIncrement (line 364) | @Override
method supportsRestrictForeignKeys (line 408) | @Override
method getDataTypeMaxParameters (line 413) | @Override
method getSystemTableWhereClause (line 426) | public String getSystemTableWhereClause(String tableNameColumn) {
method jdbcCallsCatalogsSchemas (line 444) | @Override
method getUserDefinedTypes (line 449) | public Set<String> getUserDefinedTypes() {
method generateDatabaseFunctionValue (line 470) | @Override
method validate (line 487) | @Override
method getDbaRecycleBinWarning (line 505) | public String getDbaRecycleBinWarning() {
method canAccessDbaRecycleBin (line 521) | public boolean canAccessDbaRecycleBin() {
method supportsNotNullConstraintNames (line 551) | @Override
method isValidOracleIdentifier (line 563) | public boolean isValidOracleIdentifier(String identifier, Class<? exte...
method getIdentifierMaximumLength (line 584) | public int getIdentifierMaximumLength() {
FILE: sql/dm/flowable-patch/src/main/java/liquibase/datatype/core/BooleanType.java
class BooleanType (line 16) | @DataTypeInfo(name = "boolean", aliases = {"java.sql.Types.BOOLEAN", "ja...
method toDatabaseDataType (line 19) | @Override
method objectToSql (line 63) | @Override
method isNumericBoolean (line 114) | protected boolean isNumericBoolean(Database database) {
method getFalseBooleanValue (line 137) | public String getFalseBooleanValue(Database database) {
method getTrueBooleanValue (line 150) | public String getTrueBooleanValue(Database database) {
method getLoadTypeName (line 160) | @Override
FILE: sql/dm/flowable-patch/src/main/java/org/flowable/common/engine/impl/AbstractEngineConfiguration.java
class AbstractEngineConfiguration (line 132) | public abstract class AbstractEngineConfiguration {
method getDefaultDatabaseTypeMappings (line 379) | public static Properties getDefaultDatabaseTypeMappings() {
method initEngineConfigurations (line 433) | protected void initEngineConfigurations() {
method initDataSource (line 440) | protected void initDataSource() {
method initDatabaseType (line 496) | public void initDatabaseType() {
method initSchemaManager (line 545) | public void initSchemaManager() {
method addSessionFactory (line 553) | public void addSessionFactory(SessionFactory sessionFactory) {
method initCommandContextFactory (line 557) | public void initCommandContextFactory() {
method initTransactionContextFactory (line 563) | public void initTransactionContextFactory() {
method initCommandExecutors (line 569) | public void initCommandExecutors() {
method initDefaultCommandConfig (line 578) | public void initDefaultCommandConfig() {
method initSchemaCommandConfig (line 584) | public void initSchemaCommandConfig() {
method initCommandInvoker (line 590) | public void initCommandInvoker() {
method initCommandInterceptors (line 596) | public void initCommandInterceptors() {
method getDefaultCommandInterceptors (line 610) | public Collection<? extends CommandInterceptor> getDefaultCommandInter...
method getEngineCfgKey (line 648) | public abstract String getEngineCfgKey();
method getEngineScopeType (line 650) | public abstract String getEngineScopeType();
method getAdditionalDefaultCommandInterceptors (line 652) | public List<CommandInterceptor> getAdditionalDefaultCommandInterceptor...
method initCommandExecutor (line 656) | public void initCommandExecutor() {
method initInterceptorChain (line 663) | public CommandInterceptor initInterceptorChain(List<CommandInterceptor...
method createTransactionInterceptor (line 673) | public abstract CommandInterceptor createTransactionInterceptor();
method initBeans (line 676) | public void initBeans() {
method initIdGenerator (line 685) | public void initIdGenerator() {
method initObjectMapper (line 691) | public void initObjectMapper() {
method initClock (line 698) | public void initClock() {
method initDataManagers (line 706) | public void initDataManagers() {
method initEntityManagers (line 718) | public void initEntityManagers() {
method initService (line 735) | protected void initService(Object service) {
method initSessionFactories (line 744) | public void initSessionFactories() {
method initDbSqlSessionFactory (line 778) | public void initDbSqlSessionFactory() {
method createDbSqlSessionFactory (line 796) | public DbSqlSessionFactory createDbSqlSessionFactory() {
method initDbSqlSessionFactoryEntitySettings (line 800) | protected abstract void initDbSqlSessionFactoryEntitySettings();
method defaultInitDbSqlSessionFactoryEntitySettings (line 802) | protected void defaultInitDbSqlSessionFactoryEntitySettings(List<Class...
method initTransactionFactory (line 820) | public void initTransactionFactory() {
method initSqlSessionFactory (line 833) | public void initSqlSessionFactory() {
method pathToEngineDbProperties (line 878) | public String pathToEngineDbProperties() {
method initMybatisConfiguration (line 882) | public Configuration initMybatisConfiguration(Environment environment,...
method initCustomMybatisMappers (line 902) | public void initCustomMybatisMappers(Configuration configuration) {
method initMybatisTypeHandlers (line 912) | public void initMybatisTypeHandlers(Configuration configuration) {
method initCustomMybatisInterceptors (line 958) | public void initCustomMybatisInterceptors(Configuration configuration) {
method initMyBatisLogSqlExecutionTimePlugin (line 966) | public void initMyBatisLogSqlExecutionTimePlugin(Configuration configu...
method parseMybatisConfiguration (line 970) | public Configuration parseMybatisConfiguration(XMLConfigBuilder parser) {
method applyCustomMybatisCustomizations (line 977) | protected void applyCustomMybatisCustomizations(Configuration configur...
method parseCustomMybatisXMLMappers (line 995) | public void parseCustomMybatisXMLMappers(Configuration configuration) {
method parseDependentEngineMybatisXMLMappers (line 1003) | public void parseDependentEngineMybatisXMLMappers(Configuration config...
method parseMybatisXmlMapping (line 1011) | protected void parseMybatisXmlMapping(Configuration configuration, Str...
method getResourceAsStream (line 1017) | protected InputStream getResourceAsStream(String resource) {
method setMybatisMappingFile (line 1026) | public void setMybatisMappingFile(String file) {
method getMybatisMappingFile (line 1030) | public String getMybatisMappingFile() {
method getMyBatisXmlConfigurationStream (line 1034) | public abstract InputStream getMyBatisXmlConfigurationStream();
method initConfigurators (line 1036) | public void initConfigurators() {
method close (line 1095) | public void close() {
method getEngineSpecificEngineConfigurators (line 1106) | protected List<EngineConfigurator> getEngineSpecificEngineConfigurator...
method configuratorsBeforeInit (line 1111) | public void configuratorsBeforeInit() {
method configuratorsAfterInit (line 1118) | public void configuratorsAfterInit() {
method getLockManager (line 1125) | public LockManager getLockManager(String lockName) {
method getEngineName (line 1132) | public abstract String getEngineName();
method getClassLoader (line 1134) | public ClassLoader getClassLoader() {
method setClassLoader (line 1138) | public AbstractEngineConfiguration setClassLoader(ClassLoader classLoa...
method isUseClassForNameClassLoading (line 1143) | public boolean isUseClassForNameClassLoading() {
method setUseClassForNameClassLoading (line 1147) | public AbstractEngineConfiguration setUseClassForNameClassLoading(bool...
method addEngineLifecycleListener (line 1152) | public void addEngineLifecycleListener(EngineLifecycleListener engineL...
method getEngineLifecycleListeners (line 1159) | public List<EngineLifecycleListener> getEngineLifecycleListeners() {
method setEngineLifecycleListeners (line 1163) | public AbstractEngineConfiguration setEngineLifecycleListeners(List<En...
method getDatabaseType (line 1168) | public String getDatabaseType() {
method setDatabaseType (line 1172) | public AbstractEngineConfiguration setDatabaseType(String databaseType) {
method getDataSource (line 1177) | public DataSource getDataSource() {
method setDataSource (line 1181) | public AbstractEngineConfiguration setDataSource(DataSource dataSource) {
method getSchemaManager (line 1186) | public SchemaManager getSchemaManager() {
method setSchemaManager (line 1190) | public AbstractEngineConfiguration setSchemaManager(SchemaManager sche...
method getCommonSchemaManager (line 1195) | public SchemaManager getCommonSchemaManager() {
method setCommonSchemaManager (line 1199) | public AbstractEngineConfiguration setCommonSchemaManager(SchemaManage...
method getSchemaManagementCmd (line 1204) | public Command<Void> getSchemaManagementCmd() {
method setSchemaManagementCmd (line 1208) | public AbstractEngineConfiguration setSchemaManagementCmd(Command<Void...
method getJdbcDriver (line 1213) | public String getJdbcDriver() {
method setJdbcDriver (line 1217) | public AbstractEngineConfiguration setJdbcDriver(String jdbcDriver) {
method getJdbcUrl (line 1222) | public String getJdbcUrl() {
method setJdbcUrl (line 1226) | public AbstractEngineConfiguration setJdbcUrl(String jdbcUrl) {
method getJdbcUsername (line 1231) | public String getJdbcUsername() {
method setJdbcUsername (line 1235) | public AbstractEngineConfiguration setJdbcUsername(String jdbcUsername) {
method getJdbcPassword (line 1240) | public String getJdbcPassword() {
method setJdbcPassword (line 1244) | public AbstractEngineConfiguration setJdbcPassword(String jdbcPassword) {
method getJdbcMaxActiveConnections (line 1249) | public int getJdbcMaxActiveConnections() {
method setJdbcMaxActiveConnections (line 1253) | public AbstractEngineConfiguration setJdbcMaxActiveConnections(int jdb...
method getJdbcMaxIdleConnections (line 1258) | public int getJdbcMaxIdleConnections() {
method setJdbcMaxIdleConnections (line 1262) | public AbstractEngineConfiguration setJdbcMaxIdleConnections(int jdbcM...
method getJdbcMaxCheckoutTime (line 1267) | public int getJdbcMaxCheckoutTime() {
method setJdbcMaxCheckoutTime (line 1271) | public AbstractEngineConfiguration setJdbcMaxCheckoutTime(int jdbcMaxC...
method getJdbcMaxWaitTime (line 1276) | public int getJdbcMaxWaitTime() {
method setJdbcMaxWaitTime (line 1280) | public AbstractEngineConfiguration setJdbcMaxWaitTime(int jdbcMaxWaitT...
method isJdbcPingEnabled (line 1285) | public boolean isJdbcPingEnabled() {
method setJdbcPingEnabled (line 1289) | public AbstractEngineConfiguration setJdbcPingEnabled(boolean jdbcPing...
method getJdbcPingConnectionNotUsedFor (line 1294) | public int getJdbcPingConnectionNotUsedFor() {
method setJdbcPingConnectionNotUsedFor (line 1298) | public AbstractEngineConfiguration setJdbcPingConnectionNotUsedFor(int...
method getJdbcDefaultTransactionIsolationLevel (line 1303) | public int getJdbcDefaultTransactionIsolationLevel() {
method setJdbcDefaultTransactionIsolationLevel (line 1307) | public AbstractEngineConfiguration setJdbcDefaultTransactionIsolationL...
method getJdbcPingQuery (line 1312) | public String getJdbcPingQuery() {
method setJdbcPingQuery (line 1316) | public AbstractEngineConfiguration setJdbcPingQuery(String jdbcPingQue...
method getDataSourceJndiName (line 1321) | public String getDataSourceJndiName() {
method setDataSourceJndiName (line 1325) | public AbstractEngineConfiguration setDataSourceJndiName(String dataSo...
method getSchemaCommandConfig (line 1330) | public CommandConfig getSchemaCommandConfig() {
method setSchemaCommandConfig (line 1334) | public AbstractEngineConfiguration setSchemaCommandConfig(CommandConfi...
method isTransactionsExternallyManaged (line 1339) | public boolean isTransactionsExternallyManaged() {
method setTransactionsExternallyManaged (line 1343) | public AbstractEngineConfiguration setTransactionsExternallyManaged(bo...
method getBeans (line 1348) | public Map<Object, Object> getBeans() {
method setBeans (line 1352) | public AbstractEngineConfiguration setBeans(Map<Object, Object> beans) {
method getIdGenerator (line 1357) | public IdGenerator getIdGenerator() {
method setIdGenerator (line 1361) | public AbstractEngineConfiguration setIdGenerator(IdGenerator idGenera...
method isUsePrefixId (line 1366) | public boolean isUsePrefixId() {
method setUsePrefixId (line 1370) | public AbstractEngineConfiguration setUsePrefixId(boolean usePrefixId) {
method getXmlEncoding (line 1375) | public String getXmlEncoding() {
method setXmlEncoding (line 1379) | public AbstractEngineConfiguration setXmlEncoding(String xmlEncoding) {
method getDefaultCommandConfig (line 1384) | public CommandConfig getDefaultCommandConfig() {
method setDefaultCommandConfig (line 1388) | public AbstractEngineConfiguration setDefaultCommandConfig(CommandConf...
method getCommandExecutor (line 1393) | public CommandExecutor getCommandExecutor() {
method setCommandExecutor (line 1397) | public AbstractEngineConfiguration setCommandExecutor(CommandExecutor ...
method getCommandContextFactory (line 1402) | public CommandContextFactory getCommandContextFactory() {
method setCommandContextFactory (line 1406) | public AbstractEngineConfiguration setCommandContextFactory(CommandCon...
method getCommandInvoker (line 1411) | public CommandInterceptor getCommandInvoker() {
method setCommandInvoker (line 1415) | public AbstractEngineConfiguration setCommandInvoker(CommandIntercepto...
method getAgendaOperationRunner (line 1420) | public AgendaOperationRunner getAgendaOperationRunner() {
method setAgendaOperationRunner (line 1424) | public AbstractEngineConfiguration setAgendaOperationRunner(AgendaOper...
method getCustomPreCommandInterceptors (line 1429) | public List<CommandInterceptor> getCustomPreCommandInterceptors() {
method setCustomPreCommandInterceptors (line 1433) | public AbstractEngineConfiguration setCustomPreCommandInterceptors(Lis...
method getCustomPostCommandInterceptors (line 1438) | public List<CommandInterceptor> getCustomPostCommandInterceptors() {
method setCustomPostCommandInterceptors (line 1442) | public AbstractEngineConfiguration setCustomPostCommandInterceptors(Li...
method getCommandInterceptors (line 1447) | public List<CommandInterceptor> getCommandInterceptors() {
method setCommandInterceptors (line 1451) | public AbstractEngineConfiguration setCommandInterceptors(List<Command...
method getEngineConfigurations (line 1456) | public Map<String, AbstractEngineConfiguration> getEngineConfiguration...
method setEngineConfigurations (line 1460) | public AbstractEngineConfiguration setEngineConfigurations(Map<String,...
method addEngineConfiguration (line 1465) | public void addEngineConfiguration(String key, String scopeType, Abstr...
method getServiceConfigurations (line 1473) | public Map<String, AbstractServiceConfiguration> getServiceConfigurati...
method setServiceConfigurations (line 1477) | public AbstractEngineConfiguration setServiceConfigurations(Map<String...
method addServiceConfiguration (line 1482) | public void addServiceConfiguration(String key, AbstractServiceConfigu...
method getEventRegistryEventConsumers (line 1489) | public Map<String, EventRegistryEventConsumer> getEventRegistryEventCo...
method setEventRegistryEventConsumers (line 1493) | public AbstractEngineConfiguration setEventRegistryEventConsumers(Map<...
method addEventRegistryEventConsumer (line 1498) | public void addEventRegistryEventConsumer(String key, EventRegistryEve...
method setDefaultCommandInterceptors (line 1505) | public AbstractEngineConfiguration setDefaultCommandInterceptors(Colle...
method getSqlSessionFactory (line 1510) | public SqlSessionFactory getSqlSessionFactory() {
method setSqlSessionFactory (line 1514) | public AbstractEngineConfiguration setSqlSessionFactory(SqlSessionFact...
method isDbHistoryUsed (line 1519) | public boolean isDbHistoryUsed() {
method setDbHistoryUsed (line 1523) | public AbstractEngineConfiguration setDbHistoryUsed(boolean isDbHistor...
method getDbSqlSessionFactory (line 1528) | public DbSqlSessionFactory getDbSqlSessionFactory() {
method setDbSqlSessionFactory (line 1532) | public AbstractEngineConfiguration setDbSqlSessionFactory(DbSqlSession...
method getTransactionFactory (line 1537) | public TransactionFactory getTransactionFactory() {
method setTransactionFactory (line 1541) | public AbstractEngineConfiguration setTransactionFactory(TransactionFa...
method getTransactionContextFactory (line 1546) | public TransactionContextFactory getTransactionContextFactory() {
method setTransactionContextFactory (line 1550) | public AbstractEngineConfiguration setTransactionContextFactory(Transa...
method getMaxNrOfStatementsInBulkInsert (line 1555) | public int getMaxNrOfStatementsInBulkInsert() {
method setMaxNrOfStatementsInBulkInsert (line 1559) | public AbstractEngineConfiguration setMaxNrOfStatementsInBulkInsert(in...
method isBulkInsertEnabled (line 1564) | public boolean isBulkInsertEnabled() {
method setBulkInsertEnabled (line 1568) | public AbstractEngineConfiguration setBulkInsertEnabled(boolean isBulk...
method getCustomMybatisMappers (line 1573) | public Set<Class<?>> getCustomMybatisMappers() {
method setCustomMybatisMappers (line 1577) | public AbstractEngineConfiguration setCustomMybatisMappers(Set<Class<?...
method getCustomMybatisXMLMappers (line 1582) | public Set<String> getCustomMybatisXMLMappers() {
method setCustomMybatisXMLMappers (line 1586) | public AbstractEngineConfiguration setCustomMybatisXMLMappers(Set<Stri...
method getDependentEngineMyBatisXmlMappers (line 1591) | public Set<String> getDependentEngineMyBatisXmlMappers() {
method setCustomMybatisInterceptors (line 1595) | public AbstractEngineConfiguration setCustomMybatisInterceptors(List<I...
method getCustomMybatisInterceptors (line 1600) | public List<Interceptor> getCustomMybatisInterceptors() {
method setDependentEngineMyBatisXmlMappers (line 1604) | public AbstractEngineConfiguration setDependentEngineMyBatisXmlMappers...
method getDependentEngineMybatisTypeAliasConfigs (line 1609) | public List<MybatisTypeAliasConfigurator> getDependentEngineMybatisTyp...
method setDependentEngineMybatisTypeAliasConfigs (line 1613) | public AbstractEngineConfiguration setDependentEngineMybatisTypeAliasC...
method getDependentEngineMybatisTypeHandlerConfigs (line 1618) | public List<MybatisTypeHandlerConfigurator> getDependentEngineMybatisT...
method setDependentEngineMybatisTypeHandlerConfigs (line 1622) | public AbstractEngineConfiguration setDependentEngineMybatisTypeHandle...
method getCustomSessionFactories (line 1627) | public List<SessionFactory> getCustomSessionFactories() {
method addCustomSessionFactory (line 1631) | public AbstractEngineConfiguration addCustomSessionFactory(SessionFact...
method setCustomSessionFactories (line 1639) | public AbstractEngineConfiguration setCustomSessionFactories(List<Sess...
method isUsingRelationalDatabase (line 1644) | public boolean isUsingRelationalDatabase() {
method setUsingRelationalDatabase (line 1648) | public AbstractEngineConfiguration setUsingRelationalDatabase(boolean ...
method isUsingSchemaMgmt (line 1653) | public boolean isUsingSchemaMgmt() {
method setUsingSchemaMgmt (line 1657) | public AbstractEngineConfiguration setUsingSchemaMgmt(boolean usingSch...
method getDatabaseTablePrefix (line 1662) | public String getDatabaseTablePrefix() {
method setDatabaseTablePrefix (line 1666) | public AbstractEngineConfiguration setDatabaseTablePrefix(String datab...
method getDatabaseWildcardEscapeCharacter (line 1671) | public String getDatabaseWildcardEscapeCharacter() {
method setDatabaseWildcardEscapeCharacter (line 1675) | public AbstractEngineConfiguration setDatabaseWildcardEscapeCharacter(...
method getDatabaseCatalog (line 1680) | public String getDatabaseCatalog() {
method setDatabaseCatalog (line 1684) | public AbstractEngineConfiguration setDatabaseCatalog(String databaseC...
method getDatabaseSchema (line 1689) | public String getDatabaseSchema() {
method setDatabaseSchema (line 1693) | public AbstractEngineConfiguration setDatabaseSchema(String databaseSc...
method isTablePrefixIsSchema (line 1698) | public boolean isTablePrefixIsSchema() {
method setTablePrefixIsSchema (line 1702) | public AbstractEngineConfiguration setTablePrefixIsSchema(boolean tabl...
method isAlwaysLookupLatestDefinitionVersion (line 1707) | public boolean isAlwaysLookupLatestDefinitionVersion() {
method setAlwaysLookupLatestDefinitionVersion (line 1711) | public AbstractEngineConfiguration setAlwaysLookupLatestDefinitionVers...
method isFallbackToDefaultTenant (line 1716) | public boolean isFallbackToDefaultTenant() {
method setFallbackToDefaultTenant (line 1720) | public AbstractEngineConfiguration setFallbackToDefaultTenant(boolean ...
method getDefaultTenantValue (line 1729) | @Deprecated
method setDefaultTenantValue (line 1734) | public AbstractEngineConfiguration setDefaultTenantValue(String defaul...
method getDefaultTenantProvider (line 1739) | public DefaultTenantProvider getDefaultTenantProvider() {
method setDefaultTenantProvider (line 1743) | public AbstractEngineConfiguration setDefaultTenantProvider(DefaultTen...
method isEnableLogSqlExecutionTime (line 1748) | public boolean isEnableLogSqlExecutionTime() {
method setEnableLogSqlExecutionTime (line 1752) | public void setEnableLogSqlExecutionTime(boolean enableLogSqlExecution...
method getSessionFactories (line 1756) | public Map<Class<?>, SessionFactory> getSessionFactories() {
method setSessionFactories (line 1760) | public AbstractEngineConfiguration setSessionFactories(Map<Class<?>, S...
method getDatabaseSchemaUpdate (line 1765) | public String getDatabaseSchemaUpdate() {
method setDatabaseSchemaUpdate (line 1769) | public AbstractEngineConfiguration setDatabaseSchemaUpdate(String data...
method isUseLockForDatabaseSchemaUpdate (line 1774) | public boolean isUseLockForDatabaseSchemaUpdate() {
method setUseLockForDatabaseSchemaUpdate (line 1778) | public AbstractEngineConfiguration setUseLockForDatabaseSchemaUpdate(b...
method isEnableEventDispatcher (line 1783) | public boolean isEnableEventDispatcher() {
method setEnableEventDispatcher (line 1787) | public AbstractEngineConfiguration setEnableEventDispatcher(boolean en...
method getEventDispatcher (line 1792) | public FlowableEventDispatcher getEventDispatcher() {
method setEventDispatcher (line 1796) | public AbstractEngineConfiguration setEventDispatcher(FlowableEventDis...
method getEventListeners (line 1801) | public List<FlowableEventListener> getEventListeners() {
method setEventListeners (line 1805) | public AbstractEngineConfiguration setEventListeners(List<FlowableEven...
method getTypedEventListeners (line 1810) | public Map<String, List<FlowableEventListener>> getTypedEventListeners...
method setTypedEventListeners (line 1814) | public AbstractEngineConfiguration setTypedEventListeners(Map<String, ...
method getAdditionalEventDispatchActions (line 1819) | public List<EventDispatchAction> getAdditionalEventDispatchActions() {
method setAdditionalEventDispatchActions (line 1823) | public AbstractEngineConfiguration setAdditionalEventDispatchActions(L...
method initEventDispatcher (line 1828) | public void initEventDispatcher() {
method initEventListeners (line 1841) | protected void initEventListeners() {
method initAdditionalEventDispatchActions (line 1849) | protected void initAdditionalEventDispatchActions() {
method initTypedEventListeners (line 1855) | protected void initTypedEventListeners() {
method isLoggingSessionEnabled (line 1868) | public boolean isLoggingSessionEnabled() {
method getLoggingListener (line 1872) | public LoggingListener getLoggingListener() {
method setLoggingListener (line 1876) | public void setLoggingListener(LoggingListener loggingListener) {
method getClock (line 1880) | public Clock getClock() {
method setClock (line 1884) | public AbstractEngineConfiguration setClock(Clock clock) {
method getObjectMapper (line 1889) | public ObjectMapper getObjectMapper() {
method setObjectMapper (line 1893) | public AbstractEngineConfiguration setObjectMapper(ObjectMapper object...
method getMaxLengthString (line 1898) | public int getMaxLengthString() {
method getMaxLengthStringVariableType (line 1910) | public int getMaxLengthStringVariableType() {
method setMaxLengthStringVariableType (line 1914) | public AbstractEngineConfiguration setMaxLengthStringVariableType(int ...
method getPropertyDataManager (line 1919) | public PropertyDataManager getPropertyDataManager() {
method getLockPollRate (line 1923) | public Duration getLockPollRate() {
method setLockPollRate (line 1927) | public AbstractEngineConfiguration setLockPollRate(Duration lockPollRa...
method getSchemaLockWaitTime (line 1932) | public Duration getSchemaLockWaitTime() {
method setSchemaLockWaitTime (line 1936) | public void setSchemaLockWaitTime(Duration schemaLockWaitTime) {
method setPropertyDataManager (line 1940) | public AbstractEngineConfiguration setPropertyDataManager(PropertyData...
method getPropertyEntityManager (line 1945) | public PropertyEntityManager getPropertyEntityManager() {
method setPropertyEntityManager (line 1949) | public AbstractEngineConfiguration setPropertyEntityManager(PropertyEn...
method getByteArrayDataManager (line 1954) | public ByteArrayDataManager getByteArrayDataManager() {
method setByteArrayDataManager (line 1958) | public AbstractEngineConfiguration setByteArrayDataManager(ByteArrayDa...
method getByteArrayEntityManager (line 1963) | public ByteArrayEntityManager getByteArrayEntityManager() {
method setByteArrayEntityManager (line 1967) | public AbstractEngineConfiguration setByteArrayEntityManager(ByteArray...
method getTableDataManager (line 1972) | public TableDataManager getTableDataManager() {
method setTableDataManager (line 1976) | public AbstractEngineConfiguration setTableDataManager(TableDataManage...
method getDeployers (line 1981) | public List<EngineDeployer> getDeployers() {
method setDeployers (line 1985) | public AbstractEngineConfiguration setDeployers(List<EngineDeployer> d...
method getCustomPreDeployers (line 1990) | public List<EngineDeployer> getCustomPreDeployers() {
method setCustomPreDeployers (line 1994) | public AbstractEngineConfiguration setCustomPreDeployers(List<EngineDe...
method getCustomPostDeployers (line 1999) | public List<EngineDeployer> getCustomPostDeployers() {
method setCustomPostDeployers (line 2003) | public AbstractEngineConfiguration setCustomPostDeployers(List<EngineD...
method isEnableConfiguratorServiceLoader (line 2008) | public boolean isEnableConfiguratorServiceLoader() {
method setEnableConfiguratorServiceLoader (line 2012) | public AbstractEngineConfiguration setEnableConfiguratorServiceLoader(...
method getConfigurators (line 2017) | public List<EngineConfigurator> getConfigurators() {
method addConfigurator (line 2021) | public AbstractEngineConfiguration addConfigurator(EngineConfigurator ...
method getAllConfigurators (line 2033) | public List<EngineConfigurator> getAllConfigurators() {
method setConfigurators (line 2037) | public AbstractEngineConfiguration setConfigurators(List<EngineConfigu...
method getIdmEngineConfigurator (line 2042) | public EngineConfigurator getIdmEngineConfigurator() {
method setIdmEngineConfigurator (line 2046) | public AbstractEngineConfiguration setIdmEngineConfigurator(EngineConf...
method getEventRegistryConfigurator (line 2051) | public EngineConfigurator getEventRegistryConfigurator() {
method setEventRegistryConfigurator (line 2055) | public AbstractEngineConfiguration setEventRegistryConfigurator(Engine...
method setForceCloseMybatisConnectionPool (line 2060) | public AbstractEngineConfiguration setForceCloseMybatisConnectionPool(...
method isForceCloseMybatisConnectionPool (line 2065) | public boolean isForceCloseMybatisConnectionPool() {
FILE: sql/dm/quartz.sql
type qrtz_job_details (line 23) | CREATE TABLE qrtz_job_details
type qrtz_triggers (line 37) | CREATE TABLE qrtz_triggers
type qrtz_simple_triggers (line 59) | CREATE TABLE qrtz_simple_triggers
type qrtz_cron_triggers (line 71) | CREATE TABLE qrtz_cron_triggers
type qrtz_simprop_triggers (line 82) | CREATE TABLE qrtz_simprop_triggers
type qrtz_blob_triggers (line 103) | CREATE TABLE qrtz_blob_triggers
type qrtz_calendars (line 113) | CREATE TABLE qrtz_calendars
type qrtz_paused_trigger_grps (line 120) | CREATE TABLE qrtz_paused_trigger_grps
type qrtz_fired_triggers (line 126) | CREATE TABLE qrtz_fired_triggers
type qrtz_scheduler_state (line 143) | CREATE TABLE qrtz_scheduler_state
type qrtz_locks (line 151) | CREATE TABLE qrtz_locks
type idx_qrtz_j_req_recovery (line 158) | create index idx_qrtz_j_req_recovery on qrtz_job_details(SCHED_NAME,REQU...
type idx_qrtz_j_grp (line 159) | create index idx_qrtz_j_grp on qrtz_job_details(SCHED_NAME,JOB_GROUP)
type idx_qrtz_t_j (line 161) | create index idx_qrtz_t_j on qrtz_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP)
type idx_qrtz_t_jg (line 162) | create index idx_qrtz_t_jg on qrtz_triggers(SCHED_NAME,JOB_GROUP)
type idx_qrtz_t_c (line 163) | create index idx_qrtz_t_c on qrtz_triggers(SCHED_NAME,CALENDAR_NAME)
type idx_qrtz_t_g (line 164) | create index idx_qrtz_t_g on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP)
type idx_qrtz_t_state (line 165) | create index idx_qrtz_t_state on qrtz_triggers(SCHED_NAME,TRIGGER_STATE)
type idx_qrtz_t_n_state (line 166) | create index idx_qrtz_t_n_state on qrtz_triggers(SCHED_NAME,TRIGGER_NAME...
type idx_qrtz_t_n_g_state (line 167) | create index idx_qrtz_t_n_g_state on qrtz_triggers(SCHED_NAME,TRIGGER_GR...
type idx_qrtz_t_next_fire_time (line 168) | create index idx_qrtz_t_next_fire_time on qrtz_triggers(SCHED_NAME,NEXT_...
type idx_qrtz_t_nft_st (line 169) | create index idx_qrtz_t_nft_st on qrtz_triggers(SCHED_NAME,TRIGGER_STATE...
type idx_qrtz_t_nft_misfire (line 170) | create index idx_qrtz_t_nft_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_...
type idx_qrtz_t_nft_st_misfire (line 171) | create index idx_qrtz_t_nft_st_misfire on qrtz_triggers(SCHED_NAME,MISFI...
type idx_qrtz_t_nft_st_misfire_grp (line 172) | create index idx_qrtz_t_nft_st_misfire_grp on qrtz_triggers(SCHED_NAME,M...
type idx_qrtz_ft_trig_inst_name (line 174) | create index idx_qrtz_ft_trig_inst_name on qrtz_fired_triggers(SCHED_NAM...
type idx_qrtz_ft_inst_job_req_rcvry (line 175) | create index idx_qrtz_ft_inst_job_req_rcvry on qrtz_fired_triggers(SCHED...
type idx_qrtz_ft_j_g (line 176) | create index idx_qrtz_ft_j_g on qrtz_fired_triggers(SCHED_NAME,JOB_NAME,...
type idx_qrtz_ft_jg (line 177) | create index idx_qrtz_ft_jg on qrtz_fired_triggers(SCHED_NAME,JOB_GROUP)
type idx_qrtz_ft_t_g (line 178) | create index idx_qrtz_ft_t_g on qrtz_fired_triggers(SCHED_NAME,TRIGGER_N...
type idx_qrtz_ft_tg (line 179) | create index idx_qrtz_ft_tg on qrtz_fired_triggers(SCHED_NAME,TRIGGER_GR...
FILE: sql/dm/ruoyi-vue-pro-dm8.sql
type infra_api_access_log (line 15) | CREATE TABLE infra_api_access_log
type idx_infra_api_access_log_01 (line 44) | CREATE INDEX idx_infra_api_access_log_01 ON infra_api_access_log (create...
type infra_api_error_log (line 76) | CREATE TABLE infra_api_error_log
type infra_codegen_column (line 141) | CREATE TABLE infra_codegen_column
type infra_codegen_table (line 196) | CREATE TABLE infra_codegen_table
type infra_config (line 253) | CREATE TABLE infra_config
type infra_file (line 334) | CREATE TABLE infra_file
type infra_file_config (line 367) | CREATE TABLE infra_file_config
type infra_job (line 443) | CREATE TABLE infra_job
type system_dept (line 541) | CREATE TABLE system_dept
type system_mail_account (line 1437) | CREATE TABLE system_mail_account
type system_mail_template (line 1536) | CREATE TABLE system_mail_template
type system_oauth2_access_token (line 2695) | CREATE TABLE system_oauth2_access_token
type idx_system_oauth2_access_token_01 (line 2714) | CREATE INDEX idx_system_oauth2_access_token_01 ON system_oauth2_access_t...
type idx_system_oauth2_access_token_02 (line 2715) | CREATE INDEX idx_system_oauth2_access_token_02 ON system_oauth2_access_t...
type system_oauth2_approve (line 2737) | CREATE TABLE system_oauth2_approve
type system_oauth2_client (line 2772) | CREATE TABLE system_oauth2_client
type system_oauth2_refresh_token (line 2875) | CREATE TABLE system_oauth2_refresh_token
type system_operate_log (line 2910) | CREATE TABLE system_operate_log
type system_post (line 2959) | CREATE TABLE system_post
type idx_system_sms_code_01 (line 4026) | CREATE INDEX idx_system_sms_code_01 ON system_sms_code (mobile)
type system_sms_log (line 4048) | CREATE TABLE system_sms_log
type system_sms_template (line 4111) | CREATE TABLE system_sms_template
type system_social_user_bind (line 4270) | CREATE TABLE system_social_user_bind
type system_tenant (line 4301) | CREATE TABLE system_tenant
FILE: sql/kingbase/quartz.sql
type qrtz_job_details (line 15) | CREATE TABLE qrtz_job_details
type qrtz_triggers (line 30) | CREATE TABLE qrtz_triggers
type qrtz_simple_triggers (line 53) | CREATE TABLE qrtz_simple_triggers
type QRTZ_SIMPROP_TRIGGERS (line 66) | CREATE TABLE QRTZ_SIMPROP_TRIGGERS
type qrtz_cron_triggers (line 88) | CREATE TABLE qrtz_cron_triggers
type qrtz_blob_triggers (line 100) | CREATE TABLE qrtz_blob_triggers
type qrtz_calendars (line 111) | CREATE TABLE qrtz_calendars
type qrtz_paused_trigger_grps (line 119) | CREATE TABLE qrtz_paused_trigger_grps
type qrtz_fired_triggers (line 126) | CREATE TABLE qrtz_fired_triggers
type qrtz_scheduler_state (line 144) | CREATE TABLE qrtz_scheduler_state
type qrtz_locks (line 153) | CREATE TABLE qrtz_locks
type idx_qrtz_j_req_recovery (line 160) | create index idx_qrtz_j_req_recovery on qrtz_job_details(requests_recovery)
type idx_qrtz_t_next_fire_time (line 161) | create index idx_qrtz_t_next_fire_time on qrtz_triggers(next_fire_time)
type idx_qrtz_t_state (line 162) | create index idx_qrtz_t_state on qrtz_triggers(trigger_state)
type idx_qrtz_t_nft_st (line 163) | create index idx_qrtz_t_nft_st on qrtz_triggers(next_fire_time,trigger_s...
type idx_qrtz_ft_trig_name (line 164) | create index idx_qrtz_ft_trig_name on qrtz_fired_triggers(trigger_name)
type idx_qrtz_ft_trig_group (line 165) | create index idx_qrtz_ft_trig_group on qrtz_fired_triggers(trigger_group)
type idx_qrtz_ft_trig_nm_gp (line 166) | create index idx_qrtz_ft_trig_nm_gp on qrtz_fired_triggers(sched_name,tr...
type idx_qrtz_ft_trig_inst_name (line 167) | create index idx_qrtz_ft_trig_inst_name on qrtz_fired_triggers(instance_...
type idx_qrtz_ft_job_name (line 168) | create index idx_qrtz_ft_job_name on qrtz_fired_triggers(job_name)
type idx_qrtz_ft_job_group (line 169) | create index idx_qrtz_ft_job_group on qrtz_fired_triggers(job_group)
type idx_qrtz_ft_job_req_recovery (line 170) | create index idx_qrtz_ft_job_req_recovery on qrtz_fired_triggers(request...
FILE: sql/kingbase/ruoyi-vue-pro.sql
type dual (line 16) | CREATE TABLE dual
type infra_api_access_log (line 34) | CREATE TABLE infra_api_access_log
type idx_infra_api_access_log_01 (line 66) | CREATE INDEX idx_infra_api_access_log_01 ON infra_api_access_log (create...
type infra_api_error_log (line 103) | CREATE TABLE infra_api_error_log
type infra_codegen_column (line 176) | CREATE TABLE infra_codegen_column
type infra_codegen_table (line 239) | CREATE TABLE infra_codegen_table
type infra_config (line 304) | CREATE TABLE infra_config
type infra_data_source_config (line 363) | CREATE TABLE infra_data_source_config
type infra_file (line 400) | CREATE TABLE infra_file
type infra_file_config (line 441) | CREATE TABLE infra_file_config
type infra_file_content (line 497) | CREATE TABLE infra_file_content
type infra_job (line 532) | CREATE TABLE infra_job
type infra_job_log (line 598) | CREATE TABLE infra_job_log
type system_dept (line 645) | CREATE TABLE system_dept
type system_dict_data (line 712) | CREATE TABLE system_dict_data
type system_dict_type (line 1369) | CREATE TABLE system_dict_type
type system_login_log (line 1523) | CREATE TABLE system_login_log
type system_mail_account (line 1570) | CREATE TABLE system_mail_account
type system_mail_log (line 1625) | CREATE TABLE system_mail_log
type system_mail_template (line 1684) | CREATE TABLE system_mail_template
type system_menu (line 1742) | CREATE TABLE system_menu
type system_notice (line 2716) | CREATE TABLE system_notice
type system_notify_message (line 2766) | CREATE TABLE system_notify_message
type system_notify_template (line 2834) | CREATE TABLE system_notify_template
type system_oauth2_access_token (line 2879) | CREATE TABLE system_oauth2_access_token
type idx_system_oauth2_access_token_01 (line 2901) | CREATE INDEX idx_system_oauth2_access_token_01 ON system_oauth2_access_t...
type idx_system_oauth2_access_token_02 (line 2902) | CREATE INDEX idx_system_oauth2_access_token_02 ON system_oauth2_access_t...
type system_oauth2_approve (line 2929) | CREATE TABLE system_oauth2_approve
type system_oauth2_client (line 2972) | CREATE TABLE system_oauth2_client
type system_oauth2_code (line 3043) | CREATE TABLE system_oauth2_code
type system_oauth2_refresh_token (line 3090) | CREATE TABLE system_oauth2_refresh_token
type system_operate_log (line 3133) | CREATE TABLE system_operate_log
type system_post (line 3190) | CREATE TABLE system_post
type system_role (line 3243) | CREATE TABLE system_role
type system_role_menu (line 3306) | CREATE TABLE system_role_menu
type system_sms_channel (line 4212) | CREATE TABLE system_sms_channel
type system_sms_code (line 4266) | CREATE TABLE system_sms_code
type idx_system_sms_code_01 (line 4288) | CREATE INDEX idx_system_sms_code_01 ON system_sms_code (mobile)
type system_sms_log (line 4315) | CREATE TABLE system_sms_log
type system_sms_template (line 4386) | CREATE TABLE system_sms_template
type system_social_client (line 4458) | CREATE TABLE system_social_client
type system_social_user (line 4518) | CREATE TABLE system_social_user
type system_social_user_bind (line 4567) | CREATE TABLE system_social_user_bind
type system_tenant (line 4606) | CREATE TABLE system_tenant
type system_tenant_package (line 4664) | CREATE TABLE system_tenant_package
type system_user_post (line 4711) | CREATE TABLE system_user_post
type system_user_role (line 4763) | CREATE TABLE system_user_role
type system_users (line 4823) | CREATE TABLE system_users
type yudao_demo01_contact (line 4906) | CREATE TABLE yudao_demo01_contact
type yudao_demo02_category (line 4956) | CREATE TABLE yudao_demo02_category
type yudao_demo03_course (line 5005) | CREATE TABLE yudao_demo03_course
type yudao_demo03_grade (line 5067) | CREATE TABLE yudao_demo03_grade
type yudao_demo03_student (line 5115) | CREATE TABLE yudao_demo03_student
FILE: sql/mysql/quartz.sql
type `QRTZ_BLOB_TRIGGERS` (line 24) | CREATE TABLE `QRTZ_BLOB_TRIGGERS` (
type `QRTZ_CALENDARS` (line 44) | CREATE TABLE `QRTZ_CALENDARS` (
type `QRTZ_CRON_TRIGGERS` (line 61) | CREATE TABLE `QRTZ_CRON_TRIGGERS` (
type `QRTZ_FIRED_TRIGGERS` (line 82) | CREATE TABLE `QRTZ_FIRED_TRIGGERS` (
type `QRTZ_JOB_DETAILS` (line 115) | CREATE TABLE `QRTZ_JOB_DETAILS` (
type `QRTZ_LOCKS` (line 142) | CREATE TABLE `QRTZ_LOCKS` (
type `QRTZ_PAUSED_TRIGGER_GRPS` (line 159) | CREATE TABLE `QRTZ_PAUSED_TRIGGER_GRPS` (
type `QRTZ_SCHEDULER_STATE` (line 175) | CREATE TABLE `QRTZ_SCHEDULER_STATE` (
type `QRTZ_SIMPLE_TRIGGERS` (line 194) | CREATE TABLE `QRTZ_SIMPLE_TRIGGERS` (
type `QRTZ_SIMPROP_TRIGGERS` (line 215) | CREATE TABLE `QRTZ_SIMPROP_TRIGGERS` (
type `QRTZ_TRIGGERS` (line 244) | CREATE TABLE `QRTZ_TRIGGERS` (
FILE: sql/mysql/ruoyi-vue-pro.sql
type `infra_api_access_log` (line 24) | CREATE TABLE `infra_api_access_log` (
type `infra_api_error_log` (line 64) | CREATE TABLE `infra_api_error_log` (
type `infra_codegen_column` (line 106) | CREATE TABLE `infra_codegen_column` (
type `infra_codegen_table` (line 143) | CREATE TABLE `infra_codegen_table` (
type `infra_config` (line 181) | CREATE TABLE `infra_config` (
type `infra_data_source_config` (line 215) | CREATE TABLE `infra_data_source_config` (
type `infra_file` (line 239) | CREATE TABLE `infra_file` (
type `infra_file_config` (line 265) | CREATE TABLE `infra_file_config` (
type `infra_file_content` (line 301) | CREATE TABLE `infra_file_content` (
type `infra_job` (line 324) | CREATE TABLE `infra_job` (
type `infra_job_log` (line 370) | CREATE TABLE `infra_job_log` (
type `system_dept` (line 399) | CREATE TABLE `system_dept` (
type `system_dict_data` (line 443) | CREATE TABLE `system_dict_data` (
type `system_dict_type` (line 1114) | CREATE TABLE `system_dict_type` (
type `system_login_log` (line 1252) | CREATE TABLE `system_login_log` (
type `system_mail_account` (line 1281) | CREATE TABLE `system_mail_account` (
type `system_mail_log` (line 1312) | CREATE TABLE `system_mail_log` (
type `system_mail_template` (line 1349) | CREATE TABLE `system_mail_template` (
type `system_menu` (line 1381) | CREATE TABLE `system_menu` (
type `system_notice` (line 2350) | CREATE TABLE `system_notice` (
type `system_notify_message` (line 2378) | CREATE TABLE `system_notify_message` (
type `system_notify_template` (line 2418) | CREATE TABLE `system_notify_template` (
type `system_oauth2_access_token` (line 2446) | CREATE TABLE `system_oauth2_access_token` (
type `system_oauth2_approve` (line 2477) | CREATE TABLE `system_oauth2_approve` (
type `system_oauth2_client` (line 2504) | CREATE TABLE `system_oauth2_client` (
type `system_oauth2_code` (line 2543) | CREATE TABLE `system_oauth2_code` (
type `system_oauth2_refresh_token` (line 2572) | CREATE TABLE `system_oauth2_refresh_token` (
type `system_operate_log` (line 2599) | CREATE TABLE `system_operate_log` (
type `system_post` (line 2633) | CREATE TABLE `system_post` (
type `system_role` (line 2663) | CREATE TABLE `system_role` (
type `system_role_menu` (line 2698) | CREATE TABLE `system_role_menu` (
type `system_sms_channel` (line 3594) | CREATE TABLE `system_sms_channel` (
type `system_sms_code` (line 3624) | CREATE TABLE `system_sms_code` (
type `system_sms_log` (line 3654) | CREATE TABLE `system_sms_log` (
type `system_sms_template` (line 3695) | CREATE TABLE `system_sms_template` (
type `system_social_client` (line 3740) | CREATE TABLE `system_social_client` (
type `system_social_user` (line 3777) | CREATE TABLE `system_social_user` (
type `system_social_user_bind` (line 3807) | CREATE TABLE `system_social_user_bind` (
type `system_tenant` (line 3832) | CREATE TABLE `system_tenant` (
type `system_tenant_package` (line 3864) | CREATE TABLE `system_tenant_package` (
type `system_user_post` (line 3889) | CREATE TABLE `system_user_post` (
type `system_user_role` (line 3923) | CREATE TABLE `system_user_role` (
type `system_users` (line 3967) | CREATE TABLE `system_users` (
type `yudao_demo01_contact` (line 4021) | CREATE TABLE `yudao_demo01_contact` (
type `yudao_demo02_category` (line 4048) | CREATE TABLE `yudao_demo02_category` (
type `yudao_demo03_course` (line 4078) | CREATE TABLE `yudao_demo03_course` (
type `yudao_demo03_grade` (line 4119) | CREATE TABLE `yudao_demo03_grade` (
type `yudao_demo03_student` (line 4146) | CREATE TABLE `yudao_demo03_student` (
FILE: sql/opengauss/quartz.sql
type qrtz_blob_triggers (line 4) | CREATE TABLE qrtz_blob_triggers
type idx_qrtz_blob_triggers_sched_name (line 13) | CREATE INDEX idx_qrtz_blob_triggers_sched_name ON qrtz_blob_triggers (sc...
type qrtz_calendars (line 18) | CREATE TABLE qrtz_calendars
type qrtz_cron_triggers (line 30) | CREATE TABLE qrtz_cron_triggers
type qrtz_fired_triggers (line 48) | CREATE TABLE qrtz_fired_triggers
type idx_qrtz_ft_trig_inst_name (line 66) | CREATE INDEX idx_qrtz_ft_trig_inst_name ON qrtz_fired_triggers (sched_na...
type idx_qrtz_ft_inst_job_req_rcvry (line 67) | CREATE INDEX idx_qrtz_ft_inst_job_req_rcvry ON qrtz_fired_triggers (sche...
type idx_qrtz_ft_j_g (line 68) | CREATE INDEX idx_qrtz_ft_j_g ON qrtz_fired_triggers (sched_name, job_nam...
type idx_qrtz_ft_jg (line 69) | CREATE INDEX idx_qrtz_ft_jg ON qrtz_fired_triggers (sched_name, job_group)
type idx_qrtz_ft_t_g (line 70) | CREATE INDEX idx_qrtz_ft_t_g ON qrtz_fired_triggers (sched_name, trigger...
type idx_qrtz_ft_tg (line 71) | CREATE INDEX idx_qrtz_ft_tg ON qrtz_fired_triggers (sched_name, trigger_...
type qrtz_job_details (line 76) | CREATE TABLE qrtz_job_details
type idx_qrtz_j_req_recovery (line 91) | CREATE INDEX idx_qrtz_j_req_recovery ON qrtz_job_details (sched_name, re...
type idx_qrtz_j_grp (line 92) | CREATE INDEX idx_qrtz_j_grp ON qrtz_job_details (sched_name, job_group)
type qrtz_locks (line 102) | CREATE TABLE qrtz_locks
type qrtz_paused_trigger_grps (line 117) | CREATE TABLE qrtz_paused_trigger_grps
type qrtz_scheduler_state (line 127) | CREATE TABLE qrtz_scheduler_state
type qrtz_simple_triggers (line 144) | CREATE TABLE qrtz_simple_triggers
type qrtz_simprop_triggers (line 158) | CREATE TABLE qrtz_simprop_triggers
type qrtz_triggers (line 180) | CREATE TABLE qrtz_triggers
type idx_qrtz_t_j (line 201) | CREATE INDEX idx_qrtz_t_j ON qrtz_triggers (sched_name, job_name, job_gr...
type idx_qrtz_t_jg (line 202) | CREATE INDEX idx_qrtz_t_jg ON qrtz_triggers (sched_name, job_group)
type idx_qrtz_t_c (line 203) | CREATE INDEX idx_qrtz_t_c ON qrtz_triggers (sched_name, calendar_name)
type idx_qrtz_t_g (line 204) | CREATE INDEX idx_qrtz_t_g ON qrtz_triggers (sched_name, trigger_group)
type idx_qrtz_t_state (line 205) | CREATE INDEX idx_qrtz_t_state ON qrtz_triggers (sched_name, trigger_state)
type idx_qrtz_t_n_state (line 206) | CREATE INDEX idx_qrtz_t_n_state ON qrtz_triggers (sched_name, trigger_na...
type idx_qrtz_t_n_g_state (line 207) | CREATE INDEX idx_qrtz_t_n_g_state ON qrtz_triggers (sched_name, trigger_...
type idx_qrtz_t_next_fire_time (line 208) | CREATE INDEX idx_qrtz_t_next_fire_time ON qrtz_triggers (sched_name, nex...
type idx_qrtz_t_nft_st (line 209) | CREATE INDEX idx_qrtz_t_nft_st ON qrtz_triggers (sched_name, trigger_sta...
type idx_qrtz_t_nft_misfire (line 210) | CREATE INDEX idx_qrtz_t_nft_misfire ON qrtz_triggers (sched_name, misfir...
type idx_qrtz_t_nft_st_misfire (line 211) | CREATE INDEX idx_qrtz_t_nft_st_misfire ON qrtz_triggers (sched_name, mis...
type idx_qrtz_t_nft_st_misfire_grp (line 212) | CREATE INDEX idx_qrtz_t_nft_st_misfire_grp ON qrtz_triggers (sched_name,...
FILE: sql/opengauss/ruoyi-vue-pro.sql
type dual (line 16) | CREATE TABLE dual
type infra_api_access_log (line 34) | CREATE TABLE infra_api_access_log
type idx_infra_api_access_log_01 (line 66) | CREATE INDEX idx_infra_api_access_log_01 ON infra_api_access_log (create...
type infra_api_error_log (line 103) | CREATE TABLE infra_api_error_log
type infra_codegen_column (line 176) | CREATE TABLE infra_codegen_column
type infra_codegen_table (line 239) | CREATE TABLE infra_codegen_table
type infra_config (line 304) | CREATE TABLE infra_config
type infra_data_source_config (line 363) | CREATE TABLE infra_data_source_config
type infra_file (line 400) | CREATE TABLE infra_file
type infra_file_config (line 441) | CREATE TABLE infra_file_config
type infra_file_content (line 497) | CREATE TABLE infra_file_content
type infra_job (line 532) | CREATE TABLE infra_job
type infra_job_log (line 598) | CREATE TABLE infra_job_log
type system_dept (line 645) | CREATE TABLE system_dept
type system_dict_data (line 712) | CREATE TABLE system_dict_data
type system_dict_type (line 1369) | CREATE TABLE system_dict_type
type system_login_log (line 1523) | CREATE TABLE system_login_log
type system_mail_account (line 1570) | CREATE TABLE system_mail_account
type system_mail_log (line 1625) | CREATE TABLE system_mail_log
type system_mail_template (line 1684) | CREATE TABLE system_mail_template
type system_menu (line 1742) | CREATE TABLE system_menu
type system_notice (line 2716) | CREATE TABLE system_notice
type system_notify_message (line 2766) | CREATE TABLE system_notify_message
type system_notify_template (line 2834) | CREATE TABLE system_notify_template
type system_oauth2_access_token (line 2879) | CREATE TABLE system_oauth2_access_token
type idx_system_oauth2_access_token_01 (line 2901) | CREATE INDEX idx_system_oauth2_access_token_01 ON system_oauth2_access_t...
type idx_system_oauth2_access_token_02 (line 2902) | CREATE INDEX idx_system_oauth2_access_token_02 ON system_oauth2_access_t...
type system_oauth2_approve (line 2929) | CREATE TABLE system_oauth2_approve
type system_oauth2_client (line 2972) | CREATE TABLE system_oauth2_client
type system_oauth2_code (line 3043) | CREATE TABLE system_oauth2_code
type system_oauth2_refresh_token (line 3090) | CREATE TABLE system_oauth2_refresh_token
type system_operate_log (line 3133) | CREATE TABLE system_operate_log
type system_post (line 3190) | CREATE TABLE system_post
type system_role (line 3243) | CREATE TABLE system_role
type system_role_menu (line 3306) | CREATE TABLE system_role_menu
type system_sms_channel (line 4212) | CREATE TABLE system_sms_channel
type system_sms_code (line 4266) | CREATE TABLE system_sms_code
type idx_system_sms_code_01 (line 4288) | CREATE INDEX idx_system_sms_code_01 ON system_sms_code (mobile)
type system_sms_log (line 4315) | CREATE TABLE system_sms_log
type system_sms_template (line 4386) | CREATE TABLE system_sms_template
type system_social_client (line 4458) | CREATE TABLE system_social_client
type system_social_user (line 4518) | CREATE TABLE system_social_user
type system_social_user_bind (line 4567) | CREATE TABLE system_social_user_bind
type system_tenant (line 4606) | CREATE TABLE system_tenant
type system_tenant_package (line 4664) | CREATE TABLE system_tenant_package
type system_user_post (line 4711) | CREATE TABLE system_user_post
type system_user_role (line 4763) | CREATE TABLE system_user_role
type system_users (line 4823) | CREATE TABLE system_users
type yudao_demo01_contact (line 4906) | CREATE TABLE yudao_demo01_contact
type yudao_demo02_category (line 4956) | CREATE TABLE yudao_demo02_category
type yudao_demo03_course (line 5005) | CREATE TABLE yudao_demo03_course
type yudao_demo03_grade (line 5067) | CREATE TABLE yudao_demo03_grade
type yudao_demo03_student (line 5115) | CREATE TABLE yudao_demo03_student
FILE: sql/oracle/quartz.sql
type "QRTZ_BLOB_TRIGGERS" (line 11) | CREATE TABLE "QRTZ_BLOB_TRIGGERS" (
type "QRTZ_CALENDARS" (line 45) | CREATE TABLE "QRTZ_CALENDARS" (
type "QRTZ_CRON_TRIGGERS" (line 78) | CREATE TABLE "QRTZ_CRON_TRIGGERS" (
type "QRTZ_FIRED_TRIGGERS" (line 113) | CREATE TABLE "QRTZ_FIRED_TRIGGERS" (
type "QRTZ_JOB_DETAILS" (line 156) | CREATE TABLE "QRTZ_JOB_DETAILS" (
type "QRTZ_LOCKS" (line 196) | CREATE TABLE "QRTZ_LOCKS" (
type "QRTZ_PAUSED_TRIGGER_GRPS" (line 228) | CREATE TABLE "QRTZ_PAUSED_TRIGGER_GRPS" (
type "QRTZ_SCHEDULER_STATE" (line 260) | CREATE TABLE "QRTZ_SCHEDULER_STATE" (
type "QRTZ_SIMPLE_TRIGGERS" (line 294) | CREATE TABLE "QRTZ_SIMPLE_TRIGGERS" (
type "QRTZ_SIMPROP_TRIGGERS" (line 330) | CREATE TABLE "QRTZ_SIMPROP_TRIGGERS" (
type "QRTZ_TRIGGERS" (line 374) | CREATE TABLE "QRTZ_TRIGGERS" (
type "QRTZ_FIRED_TRIGGERS" (line 493) | CREATE INDEX "IDX_QRTZ_FT_INST_JOB_REQ_RCVRY"
type "QRTZ_FIRED_TRIGGERS" (line 508) | CREATE INDEX "IDX_QRTZ_FT_JG"
type "QRTZ_FIRED_TRIGGERS" (line 525) | CREATE INDEX "IDX_QRTZ_FT_J_G"
type "QRTZ_FIRED_TRIGGERS" (line 540) | CREATE INDEX "IDX_QRTZ_FT_TG"
type "QRTZ_JOB_DETAILS" (line 577) | CREATE INDEX "IDX_QRTZ_J_GRP"
type "QRTZ_JOB_DETAILS" (line 592) | CREATE INDEX "IDX_QRTZ_J_REQ_RECOVERY"
type "QRTZ_TRIGGERS" (line 715) | CREATE INDEX "IDX_QRTZ_T_C"
type "QRTZ_TRIGGERS" (line 732) | CREATE INDEX "IDX_QRTZ_T_J"
type "QRTZ_TRIGGERS" (line 747) | CREATE INDEX "IDX_QRTZ_T_JG"
type "QRTZ_TRIGGERS" (line 764) | CREATE INDEX "IDX_QRTZ_T_NEXT_FIRE_TIME"
type "QRTZ_TRIGGERS" (line 779) | CREATE INDEX "IDX_QRTZ_T_NFT_ST"
type "QRTZ_TRIGGERS" (line 794) | CREATE INDEX "IDX_QRTZ_T_NFT_ST_MISFIRE"
type "QRTZ_TRIGGERS" (line 811) | CREATE INDEX "IDX_QRTZ_T_STATE"
FILE: sql/oracle/ruoyi-vue-pro.sql
type infra_api_access_log (line 15) | CREATE TABLE infra_api_access_log
type idx_infra_api_access_log_01 (line 47) | CREATE INDEX idx_infra_api_access_log_01 ON infra_api_access_log (create...
type infra_api_error_log (line 82) | CREATE TABLE infra_api_error_log
type infra_codegen_column (line 153) | CREATE TABLE infra_codegen_column
type infra_codegen_table (line 214) | CREATE TABLE infra_codegen_table
type infra_config (line 277) | CREATE TABLE infra_config
type infra_data_source_config (line 333) | CREATE TABLE infra_data_source_config
type infra_file (line 368) | CREATE TABLE infra_file
type infra_file_config (line 407) | CREATE TABLE infra_file_config
type infra_file_content (line 460) | CREATE TABLE infra_file_content
type infra_job (line 493) | CREATE TABLE infra_job
type infra_job_log (line 556) | CREATE TABLE infra_job_log
type system_dept (line 601) | CREATE TABLE system_dept
type system_dict_data (line 665) | CREATE TABLE system_dict_data
type system_dict_type (line 1319) | CREATE TABLE system_dict_type
type system_login_log (line 1470) | CREATE TABLE system_login_log
type system_mail_account (line 1515) | CREATE TABLE system_mail_account
type system_mail_log (line 1567) | CREATE TABLE system_mail_log
type system_mail_template (line 1624) | CREATE TABLE system_mail_template
type system_menu (line 1679) | CREATE TABLE system_menu
type system_notice (line 2650) | CREATE TABLE system_notice
type system_notify_message (line 2697) | CREATE TABLE system_notify_message
type system_notify_template (line 2762) | CREATE TABLE system_notify_template
type system_oauth2_access_token (line 2805) | CREATE TABLE system_oauth2_access_token
type idx_system_oauth2_access_token_01 (line 2827) | CREATE INDEX idx_system_oauth2_access_token_01 ON system_oauth2_access_t...
type idx_system_oauth2_access_token_02 (line 2828) | CREATE INDEX idx_system_oauth2_access_token_02 ON system_oauth2_access_t...
type system_oauth2_approve (line 2853) | CREATE TABLE system_oauth2_approve
type system_oauth2_client (line 2894) | CREATE TABLE system_oauth2_client
type system_oauth2_code (line 2962) | CREATE TABLE system_oauth2_code
type system_oauth2_refresh_token (line 3007) | CREATE TABLE system_oauth2_refresh_token
type system_operate_log (line 3048) | CREATE TABLE system_operate_log
type system_post (line 3103) | CREATE TABLE system_post
type system_role (line 3153) | CREATE TABLE system_role
type system_role_menu (line 3213) | CREATE TABLE system_role_menu
type system_sms_channel (line 4116) | CREATE TABLE system_sms_channel
type system_sms_code (line 4167) | CREATE TABLE system_sms_code
type idx_system_sms_code_01 (line 4189) | CREATE INDEX idx_system_sms_code_01 ON system_sms_code (mobile)
type system_sms_log (line 4214) | CREATE TABLE system_sms_log
type system_sms_template (line 4283) | CREATE TABLE system_sms_template
type system_social_client (line 4352) | CREATE TABLE system_social_client
type system_social_user (line 4409) | CREATE TABLE system_social_user
type system_social_user_bind (line 4456) | CREATE TABLE system_social_user_bind
type system_tenant (line 4493) | CREATE TABLE system_tenant
type system_tenant_package (line 4548) | CREATE TABLE system_tenant_package
type system_user_post (line 4592) | CREATE TABLE system_user_post
type system_user_role (line 4641) | CREATE TABLE system_user_role
type system_users (line 4698) | CREATE TABLE system_users
type yudao_demo01_contact (line 4778) | CREATE TABLE yudao_demo01_contact
type yudao_demo02_category (line 4825) | CREATE TABLE yudao_demo02_category
type yudao_demo03_course (line 4871) | CREATE TABLE yudao_demo03_course
type yudao_demo03_grade (line 4930) | CREATE TABLE yudao_demo03_grade
type yudao_demo03_student (line 4975) | CREATE TABLE yudao_demo03_student
FILE: sql/postgresql/quartz.sql
type QRTZ_JOB_DETAILS (line 19) | CREATE TABLE QRTZ_JOB_DETAILS
type QRTZ_TRIGGERS (line 34) | CREATE TABLE QRTZ_TRIGGERS
type QRTZ_SIMPLE_TRIGGERS (line 57) | CREATE TABLE QRTZ_SIMPLE_TRIGGERS
type QRTZ_CRON_TRIGGERS (line 70) | CREATE TABLE QRTZ_CRON_TRIGGERS
type QRTZ_SIMPROP_TRIGGERS (line 82) | CREATE TABLE QRTZ_SIMPROP_TRIGGERS
type QRTZ_BLOB_TRIGGERS (line 103) | CREATE TABLE QRTZ_BLOB_TRIGGERS
type QRTZ_CALENDARS (line 114) | CREATE TABLE QRTZ_CALENDARS
type QRTZ_PAUSED_TRIGGER_GRPS (line 123) | CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS
type QRTZ_FIRED_TRIGGERS (line 130) | CREATE TABLE QRTZ_FIRED_TRIGGERS
type QRTZ_SCHEDULER_STATE (line 148) | CREATE TABLE QRTZ_SCHEDULER_STATE
type QRTZ_LOCKS (line 157) | CREATE TABLE QRTZ_LOCKS
type IDX_QRTZ_J_REQ_RECOVERY (line 164) | CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY
type IDX_QRTZ_J_GRP (line 166) | CREATE INDEX IDX_QRTZ_J_GRP
type IDX_QRTZ_T_J (line 169) | CREATE INDEX IDX_QRTZ_T_J
type IDX_QRTZ_T_JG (line 171) | CREATE INDEX IDX_QRTZ_T_JG
type IDX_QRTZ_T_C (line 173) | CREATE INDEX IDX_QRTZ_T_C
type IDX_QRTZ_T_G (line 175) | CREATE INDEX IDX_QRTZ_T_G
type IDX_QRTZ_T_STATE (line 177) | CREATE INDEX IDX_QRTZ_T_STATE
type IDX_QRTZ_T_N_STATE (line 179) | CREATE INDEX IDX_QRTZ_T_N_STATE
type IDX_QRTZ_T_N_G_STATE (line 181) | CREATE INDEX IDX_QRTZ_T_N_G_STATE
type IDX_QRTZ_T_NEXT_FIRE_TIME (line 183) | CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME
type IDX_QRTZ_T_NFT_ST (line 185) | CREATE INDEX IDX_QRTZ_T_NFT_ST
type IDX_QRTZ_T_NFT_MISFIRE (line 187) | CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE
type IDX_QRTZ_T_NFT_ST_MISFIRE (line 189) | CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE
type IDX_QRTZ_T_NFT_ST_MISFIRE_GRP (line 191) | CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP
type IDX_QRTZ_FT_TRIG_INST_NAME (line 194) | CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME
type IDX_QRTZ_FT_INST_JOB_REQ_RCVRY (line 196) | CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY
type IDX_QRTZ_FT_J_G (line 198) | CREATE INDEX IDX_QRTZ_FT_J_G
type IDX_QRTZ_FT_JG (line 200) | CREATE INDEX IDX_QRTZ_FT_JG
type IDX_QRTZ_FT_T_G (line 202) | CREATE INDEX IDX_QRTZ_FT_T_G
type IDX_QRTZ_FT_TG (line 204) | CREATE INDEX IDX_QRTZ_FT_TG
FILE: sql/postgresql/ruoyi-vue-pro.sql
type dual (line 16) | CREATE TABLE dual
type infra_api_access_log (line 34) | CREATE TABLE infra_api_access_log (
type idx_infra_api_access_log_01 (line 64) | CREATE INDEX idx_infra_api_access_log_01 ON infra_api_access_log (create...
type infra_api_error_log (line 101) | CREATE TABLE infra_api_error_log (
type infra_codegen_column (line 172) | CREATE TABLE infra_codegen_column (
type infra_codegen_table (line 233) | CREATE TABLE infra_codegen_table (
type infra_config (line 296) | CREATE TABLE infra_config (
type infra_data_source_config (line 353) | CREATE TABLE infra_data_source_config (
type infra_file (line 388) | CREATE TABLE infra_file (
type infra_file_config (line 427) | CREATE TABLE infra_file_config (
type infra_file_content (line 483) | CREATE TABLE infra_file_content (
type infra_job (line 516) | CREATE TABLE infra_job (
type infra_job_log (line 585) | CREATE TABLE infra_job_log (
type system_dept (line 630) | CREATE TABLE system_dept (
type system_dict_data (line 695) | CREATE TABLE system_dict_data (
type system_dict_type (line 1378) | CREATE TABLE system_dict_type (
type system_login_log (line 1534) | CREATE TABLE system_login_log (
type system_mail_account (line 1579) | CREATE TABLE system_mail_account (
type system_mail_log (line 1632) | CREATE TABLE system_mail_log (
type system_mail_template (line 1693) | CREATE TABLE system_mail_template (
type system_menu (line 1749) | CREATE TABLE system_menu (
type system_notice (line 2746) | CREATE TABLE system_notice (
type system_notify_message (line 2794) | CREATE TABLE system_notify_message (
type system_notify_template (line 2860) | CREATE TABLE system_notify_template (
type system_oauth2_access_token (line 2903) | CREATE TABLE system_oauth2_access_token (
type idx_system_oauth2_access_token_01 (line 2923) | CREATE INDEX idx_system_oauth2_access_token_01 ON system_oauth2_access_t...
type idx_system_oauth2_access_token_02 (line 2924) | CREATE INDEX idx_system_oauth2_access_token_02 ON system_oauth2_access_t...
type system_oauth2_approve (line 2951) | CREATE TABLE system_oauth2_approve (
type system_oauth2_client (line 2992) | CREATE TABLE system_oauth2_client (
type system_oauth2_code (line 3061) | CREATE TABLE system_oauth2_code (
type system_oauth2_refresh_token (line 3106) | CREATE TABLE system_oauth2_refresh_token (
type system_operate_log (line 3147) | CREATE TABLE system_operate_log (
type system_post (line 3202) | CREATE TABLE system_post (
type system_role (line 3253) | CREATE TABLE system_role (
type system_role_menu (line 3312) | CREATE TABLE system_role_menu (
type system_sms_channel (line 4167) | CREATE TABLE system_sms_channel (
type system_sms_code (line 4219) | CREATE TABLE system_sms_code (
type idx_system_sms_code_01 (line 4239) | CREATE INDEX idx_system_sms_code_01 ON system_sms_code (mobile)
type system_sms_log (line 4266) | CREATE TABLE system_sms_log (
type system_sms_template (line 4335) | CREATE TABLE system_sms_template (
type system_social_client (line 4405) | CREATE TABLE system_social_client (
type system_social_user (line 4464) | CREATE TABLE system_social_user (
type system_social_user_bind (line 4511) | CREATE TABLE system_social_user_bind (
type system_tenant (line 4548) | CREATE TABLE system_tenant (
type system_tenant_package (line 4604) | CREATE TABLE system_tenant_package (
type system_user_post (line 4648) | CREATE TABLE system_user_post (
type system_user_role (line 4698) | CREATE TABLE system_user_role (
type system_users (line 4756) | CREATE TABLE system_users (
type yudao_demo01_contact (line 4837) | CREATE TABLE yudao_demo01_contact (
type yudao_demo02_category (line 4885) | CREATE TABLE yudao_demo02_category (
type yudao_demo03_course (line 4933) | CREATE TABLE yudao_demo03_course (
type yudao_demo03_grade (line 4993) | CREATE TABLE yudao_demo03_grade (
type yudao_demo03_student (line 5039) | CREATE TABLE yudao_demo03_student (
FILE: sql/sqlserver/quartz.sql
type dbo (line 14) | CREATE TABLE [dbo].[QRTZ_BLOB_TRIGGERS] (
FILE: sql/tools/convertor.py
function load_and_clean (line 43) | def load_and_clean(sql_file: str) -> str:
class Convertor (line 75) | class Convertor(ABC):
method __init__ (line 76) | def __init__(self, src: str, db_type) -> None:
method translate_type (line 83) | def translate_type(self, type: str, size: Optional[Union[int, Tuple[in...
method gen_create (line 96) | def gen_create(self, table_ddl: Dict) -> str:
method gen_pk (line 108) | def gen_pk(self, table_name: str) -> str:
method gen_index (line 120) | def gen_index(self, ddl: Dict) -> str:
method gen_comment (line 132) | def gen_comment(self, table_ddl: Dict) -> str:
method gen_uk (line 144) | def gen_uk(self, table_ddl: Dict) -> str:
method gen_insert (line 155) | def gen_insert(self, table_name: str) -> str:
method gen_dual (line 166) | def gen_dual(self) -> str:
method inserts (line 175) | def inserts(table_name: str, script_content: str) -> Generator:
method index (line 188) | def index(ddl: Dict) -> Generator:
method unique_index (line 211) | def unique_index(ddl: Dict) -> Generator:
method filed_comments (line 221) | def filed_comments(table_sql: str) -> Generator:
method table_comment (line 229) | def table_comment(self, table_sql: str) -> str:
method print (line 233) | def print(self):
class PostgreSQLConvertor (line 312) | class PostgreSQLConvertor(Convertor):
method __init__ (line 313) | def __init__(self, src):
method translate_type (line 316) | def translate_type(self, type: str, size: Optional[Union[int, Tuple[in...
method gen_create (line 344) | def gen_create(self, ddl: Dict) -> str:
method gen_index (line 371) | def gen_index(self, ddl: Dict) -> str:
method gen_comment (line 374) | def gen_comment(self, table_ddl: Dict) -> str:
method gen_pk (line 393) | def gen_pk(self, table_name) -> str:
method gen_uk (line 397) | def gen_uk(self, table_ddl: Dict) -> str:
method gen_insert (line 406) | def gen_insert(self, table_name: str) -> str:
method gen_dual (line 437) | def gen_dual(self) -> str:
class OracleConvertor (line 454) | class OracleConvertor(Convertor):
method __init__ (line 455) | def __init__(self, src):
method translate_type (line 458) | def translate_type(self, type: str, size: Optional[Union[int, Tuple[in...
method gen_create (line 485) | def gen_create(self, ddl) -> str:
method gen_index (line 519) | def gen_index(self, ddl: Dict) -> str:
method gen_comment (line 522) | def gen_comment(self, table_ddl: Dict) -> str:
method gen_pk (line 539) | def gen_pk(self, table_name: str) -> str:
method gen_uk (line 543) | def gen_uk(self, table_ddl: Dict) -> str:
method gen_index (line 552) | def gen_index(self, ddl: Dict) -> str:
method gen_insert (line 555) | def gen_insert(self, table_name: str) -> str:
class SQLServerConvertor (line 592) | class SQLServerConvertor(Convertor):
method __init__ (line 599) | def __init__(self, src):
method translate_type (line 602) | def translate_type(self, type: str, size: Optional[Union[int, Tuple[in...
method gen_create (line 628) | def gen_create(self, ddl: Dict) -> str:
method gen_comment (line 659) | def gen_comment(self, table_ddl: Dict) -> str:
method gen_pk (line 689) | def gen_pk(self, table_name: str) -> str:
method gen_uk (line 693) | def gen_uk(self, table_ddl: Dict) -> str:
method gen_index (line 702) | def gen_index(self, ddl: Dict) -> str:
method gen_insert (line 706) | def gen_insert(self, table_name: str) -> str:
method gen_dual (line 741) | def gen_dual(self) -> str:
class DM8Convertor (line 765) | class DM8Convertor(Convertor):
method __init__ (line 766) | def __init__(self, src):
method translate_type (line 769) | def translate_type(self, type: str, size: Optional[Union[int, Tuple[in...
method gen_create (line 796) | def gen_create(self, ddl) -> str:
method gen_comment (line 825) | def gen_comment(self, table_ddl: Dict) -> str:
method gen_pk (line 842) | def gen_pk(self, table_name: str) -> str:
method gen_uk (line 846) | def gen_uk(self, table_ddl: Dict) -> str:
method gen_index (line 855) | def gen_index(self, ddl: Dict) -> str:
method gen_insert (line 858) | def gen_insert(self, table_name: str) -> str:
class KingbaseConvertor (line 879) | class KingbaseConvertor(PostgreSQLConvertor):
method __init__ (line 880) | def __init__(self, src):
method gen_create (line 884) | def gen_create(self, ddl: Dict) -> str:
class OpengaussConvertor (line 917) | class OpengaussConvertor(KingbaseConvertor):
method __init__ (line 918) | def __init__(self, src):
function main (line 923) | def main():
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/infra/logger/ApiAccessLogCommonApi.java
type ApiAccessLogCommonApi (line 15) | @FeignClient(name = RpcConstants.INFRA_NAME) // TODO 芋艿:fallbackFactory =
method createApiAccessLog (line 21) | @PostMapping(PREFIX + "/create")
method createApiAccessLogAsync (line 30) | @Async
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/infra/logger/ApiErrorLogCommonApi.java
type ApiErrorLogCommonApi (line 15) | @FeignClient(name = RpcConstants.INFRA_NAME) // TODO 芋艿:fallbackFactory =
method createApiErrorLog (line 21) | @PostMapping(PREFIX + "/create")
method createApiErrorLogAsync (line 30) | @Async
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/infra/logger/dto/ApiAccessLogCreateReqDTO.java
class ApiAccessLogCreateReqDTO (line 13) | @Data
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/infra/logger/dto/ApiErrorLogCreateReqDTO.java
class ApiErrorLogCreateReqDTO (line 9) | @Schema(description = "RPC 服务 - API 错误日志创建 Request DTO")
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/system/dict/DictDataCommonApi.java
type DictDataCommonApi (line 15) | @FeignClient(name = RpcConstants.SYSTEM_NAME, primary = false) // TODO 芋...
method getDictDataList (line 21) | @GetMapping(PREFIX + "/list")
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/system/dict/dto/DictDataRespDTO.java
class DictDataRespDTO (line 6) | @Schema(description = "RPC 服务 - 字典数据 Response DTO")
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/system/logger/OperateLogCommonApi.java
type OperateLogCommonApi (line 15) | @FeignClient(name = RpcConstants.SYSTEM_NAME, primary = false) // TODO 芋...
method createOperateLog (line 21) | @PostMapping(PREFIX + "/create")
method createOperateLogAsync (line 30) | @Async
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/system/logger/dto/OperateLogCreateReqDTO.java
class OperateLogCreateReqDTO (line 9) | @Schema(name = "RPC 服务 - 系统操作日志 Create Request DTO")
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/system/oauth2/OAuth2TokenCommonApi.java
type OAuth2TokenCommonApi (line 17) | @FeignClient(name = RpcConstants.SYSTEM_NAME) // TODO 芋艿:fallbackFactory =
method createAccessToken (line 29) | @PostMapping(PREFIX + "/create")
method checkAccessToken (line 33) | @GetMapping(PREFIX + "/check")
method removeAccessToken (line 38) | @DeleteMapping(PREFIX + "/remove")
method refreshAccessToken (line 43) | @PutMapping(PREFIX + "/refresh")
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/system/oauth2/dto/OAuth2AccessTokenCheckRespDTO.java
class OAuth2AccessTokenCheckRespDTO (line 11) | @Schema(description = "RPC 服务 - OAuth2 访问令牌的校验 Response DTO")
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/system/oauth2/dto/OAuth2AccessTokenCreateReqDTO.java
class OAuth2AccessTokenCreateReqDTO (line 12) | @Schema(description = "RPC 服务 - OAuth2 访问令牌创建 Request DTO")
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/system/oauth2/dto/OAuth2AccessTokenRespDTO.java
class OAuth2AccessTokenRespDTO (line 9) | @Schema(description = "RPC 服务 - OAuth2 访问令牌的信息 Response DTO")
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/system/permission/PermissionCommonApi.java
type PermissionCommonApi (line 14) | @FeignClient(name = RpcConstants.SYSTEM_NAME, primary = false) // TODO 芋...
method hasAnyPermissions (line 20) | @GetMapping(PREFIX + "/has-any-permissions")
method hasAnyRoles (line 29) | @GetMapping(PREFIX + "/has-any-roles")
method getDeptDataPermission (line 38) | @GetMapping(PREFIX + "/get-dept-data-permission")
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/system/permission/dto/DeptDataPermissionRespDTO.java
class DeptDataPermissionRespDTO (line 9) | @Schema(description = "RPC 服务 - 部门的数据权限 Response DTO")
method DeptDataPermissionRespDTO (line 22) | public DeptDataPermissionRespDTO() {
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/system/tenant/TenantCommonApi.java
type TenantCommonApi (line 14) | @FeignClient(name = RpcConstants.SYSTEM_NAME) // TODO 芋艿:fallbackFactory =
method getTenantIdList (line 20) | @GetMapping(PREFIX + "/id-list")
method validTenant (line 24) | @GetMapping(PREFIX + "/valid")
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/core/ArrayValuable.java
type ArrayValuable (line 8) | public interface ArrayValuable<T> {
method array (line 13) | T[] array();
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/core/KeyValue.java
class KeyValue (line 14) | @Data
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/CommonStatusEnum.java
type CommonStatusEnum (line 15) | @Getter
method array (line 33) | @Override
method isEnable (line 38) | public static boolean isEnable(Integer status) {
method isDisable (line 42) | public static boolean isDisable(Integer status) {
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/DateIntervalEnum.java
type DateIntervalEnum (line 15) | @Getter
method array (line 38) | @Override
method valueOf (line 43) | public static DateIntervalEnum valueOf(Integer interval) {
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/DocumentEnum.java
type DocumentEnum (line 11) | @Getter
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/RpcConstants.java
type RpcConstants (line 10) | public interface RpcConstants {
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/TerminalEnum.java
type TerminalEnum (line 14) | @RequiredArgsConstructor
method array (line 36) | @Override
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/UserTypeEnum.java
type UserTypeEnum (line 13) | @AllArgsConstructor
method valueOf (line 31) | public static UserTypeEnum valueOf(Integer value) {
method array (line 35) | @Override
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/WebFilterOrderEnum.java
type WebFilterOrderEnum (line 10) | public interface WebFilterOrderEnum {
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/ErrorCode.java
class ErrorCode (line 15) | @Data
method ErrorCode (line 27) | public ErrorCode(Integer code, String message) {
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/ServerException.java
class ServerException (line 10) | @Data
method ServerException (line 28) | public ServerException() {
method ServerException (line 31) | public ServerException(ErrorCode errorCode) {
method ServerException (line 36) | public ServerException(Integer code, String message) {
method getCode (line 41) | public Integer getCode() {
method setCode (line 45) | public ServerException setCode(Integer code) {
method getMessage (line 50) | @Override
method setMessage (line 55) | public ServerException setMessage(String message) {
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/ServiceException.java
class ServiceException (line 10) | @Data
method ServiceException (line 28) | public ServiceException() {
method ServiceException (line 31) | public ServiceException(ErrorCode errorCode) {
method ServiceException (line 36) | public ServiceException(Integer code, String message) {
method getCode (line 41) | public Integer getCode() {
method setCode (line 45) | public ServiceException setCode(Integer code) {
method getMessage (line 50) | @Override
method setMessage (line 55) | public ServiceException setMessage(String message) {
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/enums/GlobalErrorCodeConstants.java
type GlobalErrorCodeConstants (line 15) | public interface GlobalErrorCodeConstants {
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/enums/ServiceErrorCodeRange.java
class ServiceErrorCodeRange (line 30) | public class ServiceErrorCodeRange {
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/util/ServiceExceptionUtil.java
class ServiceExceptionUtil (line 16) | @Slf4j
method exception (line 21) | public static ServiceException exception(ErrorCode errorCode) {
method exception (line 25) | public static ServiceException exception(ErrorCode errorCode, Object.....
method exception0 (line 29) | public static ServiceException exception0(Integer code, String message...
method invalidParamException (line 34) | public static ServiceException invalidParamException(String messagePat...
method doFormat (line 48) | @VisibleForTesting
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/CommonResult.java
class CommonResult (line 19) | @Data
method error (line 48) | public static <T> CommonResult<T> error(CommonResult<?> result) {
method error (line 52) | public static <T> CommonResult<T> error(Integer code, String message) {
method error (line 60) | public static <T> CommonResult<T> error(ErrorCode errorCode, Object......
method error (line 68) | public static <T> CommonResult<T> error(ErrorCode errorCode) {
method success (line 72) | public static <T> CommonResult<T> success(T data) {
method isSuccess (line 80) | public static boolean isSuccess(Integer code) {
method isSuccess (line 84) | @JsonIgnore // 避免 jackson 序列化
method isError (line 89) | @JsonIgnore // 避免 jackson 序列化
method checkError (line 99) | public void checkError() throws ServiceException {
method getCheckedData (line 111) | @JsonIgnore // 避免 jackson 序列化
method error (line 117) | public static <T> CommonResult<T> error(ServiceException serviceExcept...
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/PageParam.java
class PageParam (line 11) | @Schema(description="分页参数")
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/PageResult.java
class PageResult (line 10) | @Schema(description = "分页结果")
method PageResult (line 20) | public PageResult() {
method PageResult (line 23) | public PageResult(List<T> list, Long total) {
method PageResult (line 28) | public PageResult(Long total) {
method empty (line 33) | public static <T> PageResult<T> empty() {
method empty (line 37) | public static <T> PageResult<T> empty(Long total) {
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/SortablePageParam.java
class SortablePageParam (line 10) | @Schema(description = "可排序的分页参数")
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/SortingField.java
class SortingField (line 14) | @Data
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/cache/CacheUtils.java
class CacheUtils (line 15) | public class CacheUtils {
method buildAsyncReloadingCache (line 37) | public static <K, V> LoadingCache<K, V> buildAsyncReloadingCache(Durat...
method buildCache (line 53) | public static <K, V> LoadingCache<K, V> buildCache(Duration duration, ...
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/ArrayUtils.java
class ArrayUtils (line 18) | public class ArrayUtils {
method append (line 28) | @SafeVarargs
method toArray (line 39) | public static <T, V> V[] toArray(Collection<T> from, Function<T, V> ma...
method toArray (line 43) | @SuppressWarnings("unchecked")
method get (line 51) | public static <T> T get(T[] array, int index) {
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtils.java
class CollectionUtils (line 22) | public class CollectionUtils {
method containsAny (line 24) | public static boolean containsAny(Object source, Object... targets) {
method isAnyEmpty (line 28) | public static boolean isAnyEmpty(Collection<?>... collections) {
method anyMatch (line 32) | public static <T> boolean anyMatch(Collection<T> from, Predicate<T> pr...
method filterList (line 36) | public static <T> List<T> filterList(Collection<T> from, Predicate<T> ...
method distinct (line 43) | public static <T, R> List<T> distinct(Collection<T> from, Function<T, ...
method distinct (line 50) | public static <T, R> List<T> distinct(Collection<T> from, Function<T, ...
method convertList (line 57) | public static <T, U> List<U> convertList(T[] from, Function<T, U> func) {
method convertList (line 64) | public static <T, U> List<U> convertList(Collection<T> from, Function<...
method convertList (line 71) | public static <T, U> List<U> convertList(Collection<T> from, Function<...
method convertPage (line 78) | public static <T, U> PageResult<U> convertPage(PageResult<T> from, Fun...
method convertListByFlatMap (line 85) | public static <T, U> List<U> convertListByFlatMap(Collection<T> from,
method convertListByFlatMap (line 93) | public static <T, U, R> List<R> convertListByFlatMap(Collection<T> from,
method mergeValuesFromMap (line 102) | public static <K, V> List<V> mergeValuesFromMap(Map<K, List<V>> map) {
method convertSet (line 109) | public static <T> Set<T> convertSet(Collection<T> from) {
method convertSet (line 113) | public static <T, U> Set<U> convertSet(Collection<T> from, Function<T,...
method convertSet (line 120) | public static <T, U> Set<U> convertSet(Collection<T> from, Function<T,...
method convertMapByFilter (line 127) | public static <T, K> Map<K, T> convertMapByFilter(Collection<T> from, ...
method convertSetByFlatMap (line 134) | public static <T, U> Set<U> convertSetByFlatMap(Collection<T> from,
method convertSetByFlatMap (line 142) | public static <T, U, R> Set<R> convertSetByFlatMap(Collection<T> from,
method convertMap (line 151) | public static <T, K> Map<K, T> convertMap(Collection<T> from, Function...
method convertMap (line 158) | public static <T, K> Map<K, T> convertMap(Collection<T> from, Function...
method convertMap (line 165) | public static <T, K, V> Map<K, V> convertMap(Collection<T> from, Funct...
method convertMap (line 172) | public static <T, K, V> Map<K, V> convertMap(Collection<T> from, Funct...
method convertMap (line 179) | public static <T, K, V> Map<K, V> convertMap(Collection<T> from, Funct...
method convertMap (line 186) | public static <T, K, V> Map<K, V> convertMap(Collection<T> from, Funct...
method convertMultiMap (line 193) | public static <T, K> Map<K, List<T>> convertMultiMap(Collection<T> fro...
method convertMultiMap (line 200) | public static <T, K, V> Map<K, List<V>> convertMultiMap(Collection<T> ...
method convertMultiMap2 (line 209) | public static <T, K, V> Map<K, Set<V>> convertMultiMap2(Collection<T> ...
method convertImmutableMap (line 216) | public static <T, K> Map<K, T> convertImmutableMap(Collection<T> from,...
method diffList (line 234) | public static <T> List<List<T>> diffList(Collection<T> oldList, Collec...
method containsAny (line 265) | public static boolean containsAny(Collection<?> source, Collection<?> ...
method getFirst (line 269) | public static <T> T getFirst(List<T> from) {
method findFirst (line 273) | public static <T> T findFirst(Collection<T> from, Predicate<T> predica...
method findFirst (line 277) | public static <T, U> U findFirst(Collection<T> from, Predicate<T> pred...
method getMaxValue (line 284) | public static <T, V extends Comparable<? super V>> V getMaxValue(Colle...
method getMinValue (line 293) | public static <T, V extends Comparable<? super V>> V getMinValue(List<...
method getMinObject (line 302) | public static <T, V extends Comparable<? super V>> T getMinObject(List...
method getSumValue (line 310) | public static <T, V extends Comparable<? super V>> V getSumValue(Colle...
method getSumValue (line 315) | public static <T, V extends Comparable<? super V>> V getSumValue(Colle...
method addIfNotNull (line 324) | public static <T> void addIfNotNull(Collection<T> coll, T item) {
method singleton (line 331) | public static <T> Collection<T> singleton(T obj) {
method newArrayList (line 335) | public static <T> List<T> newArrayList(List<List<T>> list) {
method toLinkedHashSet (line 347) | @SuppressWarnings("unchecked")
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/MapUtils.java
class MapUtils (line 22) | public class MapUtils {
method getList (line 31) | public static <K, V> List<V> getList(Multimap<K, V> multimap, Collecti...
method findAndThen (line 52) | public static <K, V> void findAndThen(Map<K, V> map, K key, Consumer<V...
method convertMap (line 63) | public static <K, V> Map<K, V> convertMap(List<KeyValue<K, V>> keyValu...
method getBigDecimal (line 76) | public static BigDecimal getBigDecimal(Map<String, ?> map, String key) {
method getBigDecimal (line 88) | public static BigDecimal getBigDecimal(Map<String, ?> map, String key,...
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/SetUtils.java
class SetUtils (line 12) | public class SetUtils {
method asSet (line 14) | @SafeVarargs
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java
class DateUtils (line 14) | public class DateUtils {
method of (line 36) | public static Date of(LocalDateTime date) {
method of (line 54) | public static LocalDateTime of(Date date) {
method addTime (line 64) | public static Date addTime(Duration duration) {
method isExpired (line 68) | public static boolean isExpired(LocalDateTime time) {
method buildTime (line 81) | public static Date buildTime(int year, int month, int day) {
method buildTime (line 96) | public static Date buildTime(int year, int month, int day,
method max (line 109) | public static Date max(Date a, Date b) {
method max (line 119) | public static LocalDateTime max(LocalDateTime a, LocalDateTime b) {
method isToday (line 135) | public static boolean isToday(LocalDateTime date) {
method isYesterday (line 145) | public static boolean isYesterday(LocalDateTime date) {
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/LocalDateTimeUtils.java
class LocalDateTimeUtils (line 27) | public class LocalDateTimeUtils {
method parse (line 44) | public static LocalDateTime parse(String time) {
method addTime (line 52) | public static LocalDateTime addTime(Duration duration) {
method minusTime (line 56) | public static LocalDateTime minusTime(Duration duration) {
method beforeNow (line 60) | public static boolean beforeNow(LocalDateTime date) {
method afterNow (line 64) | public static boolean afterNow(LocalDateTime date) {
method buildTime (line 76) | public static LocalDateTime buildTime(int year, int month, int day) {
method buildBetweenTime (line 80) | public static LocalDateTime[] buildBetweenTime(int year1, int month1, ...
method isBetween (line 93) | public static boolean isBetween(LocalDateTime startTime, LocalDateTime...
method isBetween (line 108) | public static boolean isBetween(LocalDateTime startTime, LocalDateTime...
method isBetween (line 122) | public static boolean isBetween(LocalDateTime startTime, LocalDateTime...
method isBetween (line 136) | public static boolean isBetween(String startTime, String endTime) {
method isOverlap (line 155) | public static boolean isOverlap(LocalTime startTime1, LocalTime endTim...
method beginOfMonth (line 168) | public static LocalDateTime beginOfMonth(LocalDateTime date) {
method endOfMonth (line 179) | public static LocalDateTime endOfMonth(LocalDateTime date) {
method getQuarterOfYear (line 189) | public static int getQuarterOfYear(LocalDateTime date) {
method between (line 199) | public static Long between(LocalDateTime dateTime) {
method getToday (line 208) | public static LocalDateTime getToday() {
method getYesterday (line 217) | public static LocalDateTime getYesterday() {
method getMonth (line 226) | public static LocalDateTime getMonth() {
method getYear (line 235) | public static LocalDateTime getYear() {
method getDateRangeList (line 239) | public static List<LocalDateTime[]> getDateRangeList(LocalDateTime sta...
method formatDateRange (line 313) | public static String formatDateRange(LocalDateTime startTime, LocalDat...
method toEpochSecond (line 346) | public static Long toEpochSecond(LocalDateTime sourceDateTime) {
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/http/HttpUtils.java
class HttpUtils (line 28) | public class HttpUtils {
method encodeUtf8 (line 36) | @SneakyThrows
method decodeUtf8 (line 49) | @SneakyThrows
method decodeUrlPath (line 62) | @SneakyThrows
method replaceUrlQuery (line 69) | @SuppressWarnings("unchecked")
method removeUrlQuery (line 81) | public static String removeUrlQuery(String url) {
method append (line 103) | public static String append(String base, Map<String, ?> query, Map<Str...
method obtainBasicAuthorization (line 154) | public static String[] obtainBasicAuthorization(HttpServletRequest req...
method post (line 187) | public static String post(String url, Map<String, String> headers, Str...
method get (line 205) | public static String get(String url, Map<String, String> headers) {
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/io/FileUtils.java
class FileUtils (line 14) | public class FileUtils {
method createTempFile (line 23) | @SneakyThrows
method createTempFile (line 38) | @SneakyThrows
method createTempFile (line 52) | @SneakyThrows
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/io/IoUtils.java
class IoUtils (line 14) | public class IoUtils {
method readUtf8 (line 24) | public static String readUtf8(InputStream in, boolean isClose) throws ...
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/json/JsonUtils.java
class JsonUtils (line 31) | @Slf4j
method init (line 55) | public static void init(ObjectMapper objectMapper) {
method toJsonString (line 59) | @SneakyThrows
method toJsonByte (line 64) | @SneakyThrows
method toJsonPrettyString (line 69) | @SneakyThrows
method parseObject (line 74) | public static <T> T parseObject(String text, Class<T> clazz) {
method parseObject (line 86) | public static <T> T parseObject(String text, String path, Class<T> cla...
method parseObject (line 100) | public static <T> T parseObject(String text, Type type) {
method parseObject (line 112) | public static <T> T parseObject(byte[] text, Type type) {
method parseObject2 (line 133) | public static <T> T parseObject2(String text, Class<T> clazz) {
method parseObject (line 140) | public static <T> T parseObject(byte[] bytes, Class<T> clazz) {
method parseObject (line 152) | public static <T> T parseObject(String text, TypeReference<T> typeRefe...
method parseObjectQuietly (line 168) | public static <T> T parseObjectQuietly(String text, TypeReference<T> t...
method parseArray (line 176) | public static <T> List<T> parseArray(String text, Class<T> clazz) {
method parseArray (line 188) | public static <T> List<T> parseArray(String text, String path, Class<T...
method parseTree (line 202) | public static JsonNode parseTree(String text) {
method parseTree (line 211) | public static JsonNode parseTree(byte[] text) {
method isJson (line 220) | public static boolean isJson(String text) {
method isJsonObject (line 228) | public static boolean isJsonObject(String str) {
method convertObject (line 241) | public static <T> T convertObject(Object obj, Class<T> clazz) {
method convertObject (line 258) | public static <T> T convertObject(Object obj, TypeReference<T> typeRef...
method convertList (line 274) | public static <T> List<T> convertList(Object obj, Class<T> clazz) {
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/json/databind/NumberSerializer.java
class NumberSerializer (line 16) | @JacksonStdImpl
method NumberSerializer (line 24) | public NumberSerializer(Class<? extends Number> rawType) {
method serialize (line 28) | @Override
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/json/databind/TimestampLocalDateTimeDeserializer.java
class TimestampLocalDateTimeDeserializer (line 17) | public class TimestampLocalDateTimeDeserializer extends JsonDeserializer...
method deserialize (line 21) | @Override
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/json/databind/TimestampLocalDateTimeSerializer.java
class TimestampLocalDateTimeSerializer (line 27) | @Slf4j
method serialize (line 34) | @Override
method buildFieldMap (line 69) | private Map<String, Field> buildFieldMap(Class<?> clazz) {
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/monitor/TracerUtils.java
class TracerUtils (line 12) | public class TracerUtils {
method TracerUtils (line 17) | private TracerUtils() {
method getTraceId (line 26) | public static String getTraceId() {
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/number/MoneyUtils.java
class MoneyUtils (line 14) | public class MoneyUtils {
method calculateRatePrice (line 33) | public static Integer calculateRatePrice(Integer price, Double rate) {
method calculateRatePriceFloor (line 44) | public static Integer calculateRatePriceFloor(Integer price, Double ra...
method calculator (line 56) | public static Integer calculator(Integer price, Integer count, Integer...
method calculateRatePrice (line 72) | public static BigDecimal calculateRatePrice(Number price, Number rate,...
method fenToYuan (line 83) | public static BigDecimal fenToYuan(int fen) {
method fenToYuanStr (line 95) | public static String fenToYuanStr(int fen) {
method priceMultiply (line 108) | public static BigDecimal priceMultiply(BigDecimal price, BigDecimal co...
method priceMultiplyPercent (line 124) | public static BigDecimal priceMultiplyPercent(BigDecimal price, BigDec...
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/number/NumberUtils.java
class NumberUtils (line 15) | public class NumberUtils {
method parseLong (line 17) | public static Long parseLong(String str) {
method parseInt (line 21) | public static Integer parseInt(String str) {
method isAllNumber (line 25) | public static boolean isAllNumber(List<String> values) {
method getDistance (line 48) | public static double getDistance(double lat1, double lng1, double lat2...
method mul (line 69) | public static BigDecimal mul(BigDecimal... values) {
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/object/BeanUtils.java
class BeanUtils (line 18) | public class BeanUtils {
method toBean (line 20) | public static <T> T toBean(Object source, Class<T> targetClass) {
method toBean (line 24) | public static <T> T toBean(Object source, Class<T> targetClass, Consum...
method toBean (line 32) | public static <S, T> List<T> toBean(List<S> source, Class<T> targetTyp...
method toBean (line 39) | public static <S, T> List<T> toBean(List<S> source, Class<T> targetTyp...
method toBean (line 47) | public static <S, T> PageResult<T> toBean(PageResult<S> source, Class<...
method toBean (line 51) | public static <S, T> PageResult<T> toBean(PageResult<S> source, Class<...
method copyProperties (line 62) | public static void copyProperties(Object source, Object target) {
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/object/ObjectUtils.java
class ObjectUtils (line 15) | public class ObjectUtils {
method cloneIgnoreId (line 24) | public static <T> T cloneIgnoreId(T object, Consumer<T> consumer) {
method max (line 38) | public static <T extends Comparable<T>> T max(T obj1, T obj2) {
method defaultIfNull (line 48) | @SafeVarargs
method equalsAny (line 58) | @SafeVarargs
method isNotAllEmpty (line 63) | public static boolean isNotAllEmpty(Object... objs) {
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/object/PageUtils.java
class PageUtils (line 19) | public class PageUtils {
method getStart (line 23) | public static int getStart(PageParam pageParam) {
method buildSortingField (line 34) | public static <T> SortingField buildSortingField(Func1<T, ?> func) {
method buildSortingField (line 46) | public static <T> SortingField buildSortingField(Func1<T, ?> func, Str...
method buildDefaultSortingField (line 61) | public static <T> void buildDefaultSortingField(SortablePageParam sort...
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/servlet/ServletUtils.java
class ServletUtils (line 24) | public class ServletUtils {
method writeJSON (line 32) | @SuppressWarnings("deprecation") // 必须使用 APPLICATION_JSON_UTF8_VALUE,否...
method writeAttachment (line 45) | public static void writeAttachment(HttpServletResponse response, Strin...
method getUserAgent (line 57) | public static String getUserAgent(HttpServletRequest request) {
method getRequest (line 67) | public static HttpServletRequest getRequest() {
method getUserAgent (line 75) | public static String getUserAgent() {
method getClientIP (line 83) | public static String getClientIP() {
method isJsonRequest (line 91) | public static boolean isJsonRequest(ServletRequest request) {
method getBody (line 95) | public static String getBody(HttpServletRequest request) {
method getBodyBytes (line 103) | public static byte[] getBodyBytes(HttpServletRequest request) {
method getClientIP (line 111) | public static String getClientIP(HttpServletRequest request) {
method getParamMap (line 115) | public static Map<String, String> getParamMap(HttpServletRequest reque...
method getHeaderMap (line 119) | public static Map<String, String> getHeaderMap(HttpServletRequest requ...
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/spring/SpringExpressionUtils.java
class SpringExpressionUtils (line 29) | public class SpringExpressionUtils {
method SpringExpressionUtils (line 40) | private SpringExpressionUtils() {
method parseExpression (line 50) | public static Object parseExpression(JoinPoint joinPoint, String expre...
method parseExpressions (line 62) | public static Map<String, Object> parseExpressions(JoinPoint joinPoint...
method parseExpression (line 99) | public static Object parseExpression(String expressionString) {
method parseExpression (line 110) | public static Object parseExpression(String expressionString, Map<Stri...
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/spring/SpringUtils.java
class SpringUtils (line 12) | public class SpringUtils extends SpringUtil {
method isProd (line 19) | public static boolean isProd() {
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/string/StrUtils.java
class StrUtils (line 19) | public class StrUtils {
method maxLength (line 21) | public static String maxLength(CharSequence str, int maxLength) {
method startWithAny (line 33) | public static boolean startWithAny(String str, Collection<String> pref...
method splitToLong (line 46) | public static List<Long> splitToLong(String value, CharSequence separa...
method splitToLongSet (line 51) | public static Set<Long> splitToLongSet(String value) {
method splitToLongSet (line 55) | public static Set<Long> splitToLongSet(String value, CharSequence sepa...
method splitToInteger (line 60) | public static List<Integer> splitToInteger(String value, CharSequence ...
method removeLineContains (line 72) | public static String removeLineContains(String content, String sequenc...
method joinMethodArgs (line 89) | public static String joinMethodArgs(JoinPoint joinPoint) {
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/validation/ValidationUtils.java
class ValidationUtils (line 19) | public class ValidationUtils {
method isMobile (line 27) | public static boolean isMobile(String mobile) {
method isURL (line 32) | public static boolean isURL(String url) {
method isXmlNCName (line 37) | public static boolean isXmlNCName(String str) {
method validate (line 42) | public static void validate(Object object, Class<?>... groups) {
method validate (line 48) | public static void validate(Validator validator, Object object, Class<...
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/validation/InEnumCollectionValidator.java
class InEnumCollectionValidator (line 13) | public class InEnumCollectionValidator implements ConstraintValidator<In...
method initialize (line 17) | @Override
method isValid (line 27) | @Override
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/validation/InEnumValidator.java
class InEnumValidator (line 11) | public class InEnumValidator implements ConstraintValidator<InEnum, Obje...
method initialize (line 15) | @Override
method isValid (line 25) | @Override
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/validation/MobileValidator.java
class MobileValidator (line 9) | public class MobileValidator implements ConstraintValidator<Mobile, Stri...
method initialize (line 11) | @Override
method isValid (line 15) | @Override
FILE: yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/validation/TelephoneValidator.java
class TelephoneValidator (line 9) | public class TelephoneValidator implements ConstraintValidator<Telephone...
method initialize (line 11) | @Override
method isValid (line 15) | @Override
FILE: yudao-framework/yudao-common/src/main/java/com/fhs/trans/service/AutoTransable.java
type AutoTransable (line 17) | public interface AutoTransable<V extends VO> {
method findByIds (line 27) | @Deprecated
method selectByIds (line 38) | default List<V> selectByIds(List<? extends Object> ids){
method select (line 47) | default List<V> select(){
method selectById (line 57) | V selectById(Object primaryValue);
FILE: yudao-framework/yudao-common/src/test/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtilsTest.java
class CollectionUtilsTest (line 17) | public class CollectionUtilsTest {
class Dog (line 19) | @Data
method testDiffList (line 29) | @Test
FILE: yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/config/YudaoDataPermissionAutoConfiguration.java
class YudaoDataPermissionAutoConfiguration (line 21) | @AutoConfiguration
method dataPermissionRuleFactory (line 24) | @Bean
method dataPermissionRuleHandler (line 29) | @Bean
method dataPermissionAnnotationAdvisor (line 41) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/config/YudaoDataPermissionRpcAutoConfiguration.java
class YudaoDataPermissionRpcAutoConfiguration (line 17) | @AutoConfiguration
method dataPermissionRequestInterceptor (line 21) | @Bean
method dataPermissionRpcFilter (line 26) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/config/YudaoDeptDataPermissionAutoConfiguration.java
class YudaoDeptDataPermissionAutoConfiguration (line 21) | @AutoConfiguration
method deptDataPermissionRule (line 26) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/aop/DataPermissionAnnotationAdvisor.java
class DataPermissionAnnotationAdvisor (line 17) | @Getter
method DataPermissionAnnotationAdvisor (line 25) | public DataPermissionAnnotationAdvisor() {
method buildPointcut (line 30) | protected Pointcut buildPointcut() {
FILE: yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/aop/DataPermissionAnnotationInterceptor.java
class DataPermissionAnnotationInterceptor (line 21) | @DataPermission // 该注解,用于 {@link DATA_PERMISSION_NULL} 的空对象
method invoke (line 32) | @Override
method findAnnotation (line 50) | private DataPermission findAnnotation(MethodInvocation methodInvocatio...
FILE: yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/aop/DataPermissionContextHolder.java
class DataPermissionContextHolder (line 14) | public class DataPermissionContextHolder {
method get (line 27) | public static DataPermission get() {
method add (line 36) | public static void add(DataPermission dataPermission) {
method remove (line 45) | public static DataPermission remove() {
method getAll (line 59) | public static List<DataPermission> getAll() {
method clear (line 68) | public static void clear() {
FILE: yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/db/DataPermissionRuleHandler.java
class DataPermissionRuleHandler (line 25) | @RequiredArgsConstructor
method getSqlSegment (line 30) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rpc/DataPermissionRequestInterceptor.java
class DataPermissionRequestInterceptor (line 15) | public class DataPermissionRequestInterceptor implements RequestIntercep...
method apply (line 19) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rpc/DataPermissionRpcWebFilter.java
class DataPermissionRpcWebFilter (line 19) | public class DataPermissionRpcWebFilter extends OncePerRequestFilter {
method doFilterInternal (line 21) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/DataPermissionRule.java
type DataPermissionRule (line 15) | public interface DataPermissionRule {
method getTableNames (line 25) | Set<String> getTableNames();
method getExpression (line 34) | Expression getExpression(String tableName, Alias tableAlias);
FILE: yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/DataPermissionRuleFactory.java
type DataPermissionRuleFactory (line 11) | public interface DataPermissionRuleFactory {
method getDataPermissionRules (line 18) | List<DataPermissionRule> getDataPermissionRules();
method getDataPermissionRule (line 26) | List<DataPermissionRule> getDataPermissionRule(String mappedStatementId);
FILE: yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/DataPermissionRuleFactoryImpl.java
class DataPermissionRuleFactoryImpl (line 20) | @RequiredArgsConstructor
method getDataPermissionRules (line 28) | @Override
method getDataPermissionRule (line 33) | @Override // mappedStatementId 参数,暂时没有用。以后,可以基于 mappedStatementId + Da...
method isTranslateCall (line 74) | private boolean isTranslateCall() {
FILE: yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/dept/DeptDataPermissionRule.java
class DeptDataPermissionRule (line 48) | @AllArgsConstructor
method getTableNames (line 83) | @Override
method getExpression (line 88) | @Override
method buildDeptExpression (line 146) | private Expression buildDeptExpression(String tableName, Alias tableAl...
method buildUserExpression (line 162) | private Expression buildUserExpression(String tableName, Alias tableAl...
method addDeptColumn (line 177) | public void addDeptColumn(Class<? extends BaseDO> entityClass) {
method addDeptColumn (line 181) | public void addDeptColumn(Class<? extends BaseDO> entityClass, String ...
method addDeptColumn (line 186) | public void addDeptColumn(String tableName, String columnName) {
method addUserColumn (line 191) | public void addUserColumn(Class<? extends BaseDO> entityClass) {
method addUserColumn (line 195) | public void addUserColumn(Class<? extends BaseDO> entityClass, String ...
method addUserColumn (line 200) | public void addUserColumn(String tableName, String columnName) {
FILE: yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/dept/DeptDataPermissionRuleCustomizer.java
type DeptDataPermissionRuleCustomizer (line 8) | @FunctionalInterface
method customize (line 18) | void customize(DeptDataPermissionRule rule);
FILE: yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/util/DataPermissionUtils.java
class DataPermissionUtils (line 14) | public class DataPermissionUtils {
method getDisableDataPermissionDisable (line 18) | @DataPermission(enable = false)
method executeIgnore (line 34) | public static void executeIgnore(Runnable runnable) {
method executeIgnore (line 50) | @SneakyThrows
method addDisableDataPermission (line 64) | public static void addDisableDataPermission(){
method removeDataPermission (line 69) | public static void removeDataPermission(){
FILE: yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/test/java/cn/iocoder/yudao/framework/datapermission/core/aop/DataPermissionAnnotationInterceptorTest.java
class DataPermissionAnnotationInterceptorTest (line 22) | public class DataPermissionAnnotationInterceptorTest extends BaseMockito...
method setUp (line 30) | @BeforeEach
method testInvoke_none (line 35) | @Test // 无 @DataPermission 注解
method testInvoke_method (line 48) | @Test // 在 Method 上有 @DataPermission 注解
method testInvoke_class (line 61) | @Test // 在 Class 上有 @DataPermission 注解
method mockMethodInvocation (line 74) | private void mockMethodInvocation(Class<?> clazz) throws Throwable {
class TestMethod (line 82) | static class TestMethod {
method echo (line 84) | @DataPermission(enable = false)
class TestClass (line 91) | @DataPermission(enable = false)
method echo (line 94) | public String echo() {
class TestNone (line 100) | static class TestNone {
method echo (line 102) | public String echo() {
FILE: yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/test/java/cn/iocoder/yudao/framework/datapermission/core/aop/DataPermissionContextHolderTest.java
class DataPermissionContextHolderTest (line 16) | class DataPermissionContextHolderTest {
method setUp (line 18) | @BeforeEach
method testGet (line 23) | @Test
method testPush (line 37) | @Test
method testRemove (line 51) | @Test
FILE: yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/test/java/cn/iocoder/yudao/framework/datapermission/core/db/DataPermissionRuleHandlerTest.java
class DataPermissionRuleHandlerTest (line 36) | public class DataPermissionRuleHandlerTest extends BaseMockitoUnitTest {
method setUp (line 46) | @BeforeEach
method delete (line 92) | @Test
method update (line 98) | @Test
method selectSingle (line 104) | @Test
method selectSubSelectIn (line 121) | @Test
method selectSubSelectEq (line 143) | @Test
method selectSubSelectInnerNotEq (line 150) | @Test
method selectSubSelectExists (line 160) | @Test
method selectSubSelect (line 172) | @Test
method selectFromSelect (line 189) | @Test
method selectBodySubSelect (line 195) | @Test
method selectLeftJoin (line 201) | @Test
method selectRightJoin (line 227) | @Test
method selectMixJoin (line 258) | @Test
method selectJoinSubSelect (line 285) | @Test
method selectSubJoin (line 301) | @Test
method selectLeftJoinMultipleTrailingOn (line 352) | @Test
method selectInnerJoin (line 378) | @Test
method selectWithAs (line 441) | @Test
method selectIgnoreTable (line 448) | @Test
method assertSql (line 454) | private void assertSql(String sql, String targetSql) {
method testSelectSingle (line 460) | @Test
method testSelectLeftJoin (line 477) | @Test
method testSelectRightJoin (line 496) | @Test
method testSelectInnerJoin (line 515) | @Test
FILE: yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/test/java/cn/iocoder/yudao/framework/datapermission/core/rule/DataPermissionRuleFactoryImplTest.java
class DataPermissionRuleFactoryImplTest (line 26) | class DataPermissionRuleFactoryImplTest extends BaseMockitoUnitTest {
method setUp (line 35) | @BeforeEach
method testGetDataPermissionRule_02 (line 40) | @Test
method testGetDataPermissionRule_03 (line 51) | @Test
method testGetDataPermissionRule_04 (line 64) | @Test
method testGetDataPermissionRule_05 (line 78) | @Test
method testGetDataPermissionRule_06 (line 92) | @Test
class TestClass03 (line 105) | @DataPermission(enable = false)
class TestClass04 (line 108) | @DataPermission(includeRules = DataPermissionRule01.class)
class TestClass05 (line 111) | @DataPermission(excludeRules = DataPermissionRule01.class)
class TestClass06 (line 114) | @DataPermission
class DataPermissionRule01 (line 117) | static class DataPermissionRule01 implements DataPermissionRule {
method getTableNames (line 119) | @Override
method getExpression (line 124) | @Override
class DataPermissionRule02 (line 131) | static class DataPermissionRule02 implements DataPermissionRule {
method getTableNames (line 133) | @Override
method getExpression (line 138) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/test/java/cn/iocoder/yudao/framework/datapermission/core/rule/dept/DeptDataPermissionRuleTest.java
class DeptDataPermissionRuleTest (line 36) | class DeptDataPermissionRuleTest extends BaseMockitoUnitTest {
method setUp (line 44) | @BeforeEach
method testGetExpression_noLoginUser (line 53) | @Test // 无 LoginUser
method testGetExpression_noDeptDataPermission (line 66) | @Test // 无数据权限时
method testGetExpression_allDeptDataPermission (line 88) | @Test // 全部数据权限
method testGetExpression_noDept_noSelf (line 111) | @Test // 即不能查看部门,又不能查看自己,则说明 100% 无权限
method testGetExpression_noDeptColumn_noSelfColumn (line 134) | @Test // 拼接 Dept 和 User 的条件(字段都不符合)
method testGetExpression_noDeptColumn_yesSelfColumn (line 158) | @Test // 拼接 Dept 和 User 的条件(self 符合)
method testGetExpression_yesDeptColumn_noSelfColumn (line 184) | @Test // 拼接 Dept 和 User 的条件(dept 符合)
method testGetExpression_yesDeptColumn_yesSelfColumn (line 210) | @Test // 拼接 Dept 和 User 的条件(dept + self 符合)
FILE: yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/test/java/cn/iocoder/yudao/framework/datapermission/core/util/DataPermissionUtilsTest.java
class DataPermissionUtilsTest (line 8) | public class DataPermissionUtilsTest {
method testExecuteIgnore (line 10) | @Test
FILE: yudao-framework/yudao-spring-boot-starter-biz-ip/src/main/java/cn/iocoder/yudao/framework/ip/core/Area.java
class Area (line 20) | @Data
FILE: yudao-framework/yudao-spring-boot-starter-biz-ip/src/main/java/cn/iocoder/yudao/framework/ip/core/enums/AreaTypeEnum.java
type AreaTypeEnum (line 14) | @AllArgsConstructor
method array (line 35) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-biz-ip/src/main/java/cn/iocoder/yudao/framework/ip/core/utils/AreaUtils.java
class AreaUtils (line 28) | @Slf4j
method init (line 44) | private static void init() {
method getArea (line 77) | public static Area getArea(Integer id) {
method parseArea (line 87) | public static Area parseArea(String pathStr) {
method getAreaNodePathList (line 106) | public static List<String> getAreaNodePathList(List<Area> areas) {
method getAreaNodePathList (line 119) | private static void getAreaNodePathList(Area node, String path, List<S...
method format (line 138) | public static String format(Integer id) {
method format (line 156) | public static String format(Integer id, String separator) {
method getByType (line 186) | public static <T> List<T> getByType(AreaTypeEnum type, Function<Area, ...
method getParentIdByType (line 197) | public static Integer getParentIdByType(Integer id, @NonNull AreaTypeE...
FILE: yudao-framework/yudao-spring-boot-starter-biz-ip/src/main/java/cn/iocoder/yudao/framework/ip/core/utils/IPUtils.java
class IPUtils (line 17) | @Slf4j
method init (line 33) | private static void init() {
method getAreaId (line 50) | @SneakyThrows
method getAreaId (line 61) | @SneakyThrows
method getArea (line 72) | public static Area getArea(String ip) {
method getArea (line 82) | public static Area getArea(long ip) {
FILE: yudao-framework/yudao-spring-boot-starter-biz-ip/src/test/java/cn/iocoder/yudao/framework/ip/core/utils/AreaUtilsTest.java
class AreaUtilsTest (line 15) | public class AreaUtilsTest {
method testGetArea (line 17) | @Test
method testFormat (line 29) | @Test
FILE: yudao-framework/yudao-spring-boot-starter-biz-ip/src/test/java/cn/iocoder/yudao/framework/ip/core/utils/IPUtilsTest.java
class IPUtilsTest (line 15) | public class IPUtilsTest {
method testGetAreaId_string (line 17) | @Test
method testGetAreaId_long (line 24) | @Test
method testGetArea_string (line 32) | @Test
method testGetArea_long (line 39) | @Test
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/config/TenantProperties.java
class TenantProperties (line 15) | @ConfigurationProperties(prefix = "yudao.tenant")
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/config/YudaoTenantAutoConfiguration.java
class YudaoTenantAutoConfiguration (line 56) | @AutoConfiguration
method tenantFrameworkService (line 64) | @Bean
method tenantIgnoreAspect (line 78) | @Bean
method tenantLineInnerInterceptor (line 85) | @Bean
method tenantContextWebFilter (line 97) | @Bean
method tenantVisitContextInterceptor (line 105) | @Bean
method tenantWebMvcConfigurer (line 111) | @Bean
method tenantSecurityWebFilter (line 126) | @Bean
method getTenantIgnoreUrls (line 143) | private Set<String> getTenantIgnoreUrls() {
class TenantRedisMQAutoConfiguration (line 175) | @Configuration
method tenantRedisMessageInterceptor (line 179) | @Bean
method tenantRabbitMQInitializer (line 186) | @Bean
method tenantRocketMQInitializer (line 192) | @Bean
method tenantJobAspect (line 200) | @Bean
method tenantRedisCacheManager (line 208) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/config/YudaoTenantRpcAutoConfiguration.java
class YudaoTenantRpcAutoConfiguration (line 10) | @AutoConfiguration
method tenantRequestInterceptor (line 15) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/aop/TenantIgnoreAspect.java
class TenantIgnoreAspect (line 20) | @Aspect
method around (line 24) | @Around("@annotation(tenantIgnore)")
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/context/TenantContextHolder.java
class TenantContextHolder (line 12) | public class TenantContextHolder {
method getTenantId (line 29) | public static Long getTenantId() {
method getRequiredTenantId (line 38) | public static Long getRequiredTenantId() {
method setTenantId (line 47) | public static void setTenantId(Long tenantId) {
method setIgnore (line 51) | public static void setIgnore(Boolean ignore) {
method isIgnore (line 60) | public static boolean isIgnore() {
method clear (line 64) | public static void clear() {
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/db/TenantBaseDO.java
class TenantBaseDO (line 12) | @Data
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/db/TenantDatabaseInterceptor.java
class TenantDatabaseInterceptor (line 21) | public class TenantDatabaseInterceptor implements TenantLineHandler {
method TenantDatabaseInterceptor (line 31) | public TenantDatabaseInterceptor(TenantProperties properties) {
method getTenantId (line 40) | @Override
method ignoreTable (line 45) | @Override
method addIgnoreTable (line 63) | private void addIgnoreTable(String tableName, boolean ignore) {
method computeIgnoreTable (line 68) | private boolean computeIgnoreTable(String tableName) {
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/job/TenantJobAspect.java
class TenantJobAspect (line 31) | @Aspect
method around (line 38) | @Around("@annotation(tenantJob)")
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/mq/kafka/TenantKafkaEnvironmentPostProcessor.java
class TenantKafkaEnvironmentPostProcessor (line 16) | @Slf4j
method postProcessEnvironment (line 21) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/mq/kafka/TenantKafkaProducerInterceptor.java
class TenantKafkaProducerInterceptor (line 23) | public class TenantKafkaProducerInterceptor implements ProducerIntercept...
method onSend (line 25) | @Override
method onAcknowledgement (line 35) | @Override
method close (line 39) | @Override
method configure (line 43) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/mq/rabbitmq/TenantRabbitMQInitializer.java
class TenantRabbitMQInitializer (line 12) | public class TenantRabbitMQInitializer implements BeanPostProcessor {
method postProcessAfterInitialization (line 14) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/mq/rabbitmq/TenantRabbitMQMessagePostProcessor.java
class TenantRabbitMQMessagePostProcessor (line 20) | public class TenantRabbitMQMessagePostProcessor implements MessagePostPr...
method postProcessMessage (line 22) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/mq/redis/TenantRedisMessageInterceptor.java
class TenantRedisMessageInterceptor (line 18) | public class TenantRedisMessageInterceptor implements RedisMessageInterc...
method sendMessageBefore (line 20) | @Override
method consumeMessageBefore (line 28) | @Override
method consumeMessageAfter (line 36) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/mq/rocketmq/TenantRocketMQConsumeMessageHook.java
class TenantRocketMQConsumeMessageHook (line 22) | public class TenantRocketMQConsumeMessageHook implements ConsumeMessageH...
method hookName (line 24) | @Override
method consumeMessageBefore (line 29) | @Override
method consumeMessageAfter (line 41) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/mq/rocketmq/TenantRocketMQInitializer.java
class TenantRocketMQInitializer (line 17) | public class TenantRocketMQInitializer implements BeanPostProcessor {
method postProcessAfterInitialization (line 19) | @Override
method initTenantProducer (line 32) | private void initTenantProducer(DefaultMQProducer producer) {
method initTenantConsumer (line 43) | private void initTenantConsumer(DefaultMQPushConsumer consumer) {
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/mq/rocketmq/TenantRocketMQSendMessageHook.java
class TenantRocketMQSendMessageHook (line 16) | public class TenantRocketMQSendMessageHook implements SendMessageHook {
method hookName (line 18) | @Override
method sendMessageBefore (line 23) | @Override
method sendMessageAfter (line 32) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/redis/TenantRedisCacheManager.java
class TenantRedisCacheManager (line 22) | @Slf4j
method TenantRedisCacheManager (line 29) | public TenantRedisCacheManager(RedisCacheWriter cacheWriter,
method getCache (line 36) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/rpc/TenantRequestInterceptor.java
class TenantRequestInterceptor (line 15) | public class TenantRequestInterceptor implements RequestInterceptor {
method apply (line 17) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/security/TenantSecurityWebFilter.java
class TenantSecurityWebFilter (line 34) | @Slf4j
method TenantSecurityWebFilter (line 51) | public TenantSecurityWebFilter(WebProperties webProperties,
method doFilterInternal (line 64) | @Override
method isIgnoreUrl (line 113) | private boolean isIgnoreUrl(HttpServletRequest request) {
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/service/TenantFrameworkService.java
type TenantFrameworkService (line 10) | public interface TenantFrameworkService {
method getTenantIds (line 17) | List<Long> getTenantIds();
method validTenant (line 24) | void validTenant(Long id);
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/service/TenantFrameworkServiceImpl.java
class TenantFrameworkServiceImpl (line 20) | @RequiredArgsConstructor
method load (line 32) | @Override
method load (line 46) | @Override
method getTenantIds (line 53) | @Override
method validTenant (line 59) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/util/TenantUtils.java
class TenantUtils (line 15) | public class TenantUtils {
method execute (line 26) | public static void execute(Long tenantId, Runnable runnable) {
method execute (line 50) | public static <V> V execute(Long tenantId, Callable<V> callable) {
method executeIgnore (line 71) | public static void executeIgnore(Runnable runnable) {
method executeIgnore (line 88) | public static <V> V executeIgnore(Callable<V> callable) {
method addTenantHeader (line 107) | public static void addTenantHeader(Map<String, String> headers, Long t...
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/web/TenantContextWebFilter.java
class TenantContextWebFilter (line 19) | public class TenantContextWebFilter extends OncePerRequestFilter {
method doFilterInternal (line 21) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/web/TenantVisitContextInterceptor.java
class TenantVisitContextInterceptor (line 20) | @RequiredArgsConstructor
method preHandle (line 30) | @Override
method afterCompletion (line 57) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/org/springframework/messaging/handler/invocation/InvocableHandlerMethod.java
class InvocableHandlerMethod (line 49) | public class InvocableHandlerMethod extends HandlerMethod {
method InvocableHandlerMethod (line 60) | public InvocableHandlerMethod(HandlerMethod handlerMethod) {
method InvocableHandlerMethod (line 67) | public InvocableHandlerMethod(Object bean, Method method) {
method InvocableHandlerMethod (line 78) | public InvocableHandlerMethod(Object bean, String methodName, Class<?>...
method setMessageMethodArgumentResolvers (line 87) | public void setMessageMethodArgumentResolvers(HandlerMethodArgumentRes...
method setParameterNameDiscoverer (line 96) | public void setParameterNameDiscoverer(ParameterNameDiscoverer paramet...
method invoke (line 116) | @Nullable
method parseTenantId (line 132) | private Long parseTenantId(Message<?> message) {
method getMethodArgumentValues (line 158) | protected Object[] getMethodArgumentValues(Message<?> message, Object....
method doInvoke (line 196) | @Nullable
method getAsyncReturnValueType (line 224) | MethodParameter getAsyncReturnValueType(@Nullable Object returnValue) {
class AsyncResultMethodParameter (line 228) | private class AsyncResultMethodParameter extends HandlerMethodParameter {
method AsyncResultMethodParameter (line 235) | public AsyncResultMethodParameter(@Nullable Object returnValue) {
method AsyncResultMethodParameter (line 241) | protected AsyncResultMethodParameter(AsyncResultMethodParameter orig...
method getParameterType (line 247) | @Override
method getGenericParameterType (line 258) | @Override
method clone (line 263) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/config/EnvEnvironmentPostProcessor.java
class EnvEnvironmentPostProcessor (line 20) | public class EnvEnvironmentPostProcessor implements EnvironmentPostProce...
method postProcessEnvironment (line 27) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/config/EnvProperties.java
class EnvProperties (line 11) | @ConfigurationProperties(prefix = "yudao.env")
FILE: yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/config/YudaoEnvRpcAutoConfiguration.java
class YudaoEnvRpcAutoConfiguration (line 22) | @AutoConfiguration
method loadBalancerClientFactory (line 33) | @Bean
method envRequestInterceptor (line 41) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/config/YudaoEnvWebAutoConfiguration.java
class YudaoEnvWebAutoConfiguration (line 16) | @AutoConfiguration
method envWebFilterFilter (line 24) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/core/context/EnvContextHolder.java
class EnvContextHolder (line 14) | public class EnvContextHolder {
method setTag (line 23) | public static void setTag(String tag) {
method getTag (line 27) | public static String getTag() {
method removeTag (line 31) | public static void removeTag() {
FILE: yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/core/fegin/EnvLoadBalancerClient.java
class EnvLoadBalancerClient (line 31) | @RequiredArgsConstructor
method choose (line 50) | @Override
method getInstanceResponse (line 65) | private Response<ServiceInstance> getInstanceResponse(List<ServiceInst...
method getInstanceResponseWithoutTag (line 88) | private Response<ServiceInstance> getInstanceResponseWithoutTag(List<S...
FILE: yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/core/fegin/EnvLoadBalancerClientFactory.java
class EnvLoadBalancerClientFactory (line 16) | public class EnvLoadBalancerClientFactory extends LoadBalancerClientFact...
method EnvLoadBalancerClientFactory (line 18) | public EnvLoadBalancerClientFactory(LoadBalancerClientsProperties prop...
method getInstance (line 22) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/core/fegin/EnvRequestInterceptor.java
class EnvRequestInterceptor (line 14) | public class EnvRequestInterceptor implements RequestInterceptor {
method apply (line 16) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/core/util/EnvUtils.java
class EnvUtils (line 18) | public class EnvUtils {
method getTag (line 24) | public static String getTag(HttpServletRequest request) {
method getTag (line 31) | public static String getTag(ServiceInstance instance) {
method getTag (line 35) | public static String getTag(Environment environment) {
method setTag (line 42) | public static void setTag(RequestTemplate requestTemplate, String tag) {
method getHostName (line 51) | @SneakyThrows
FILE: yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/core/web/EnvWebFilter.java
class EnvWebFilter (line 20) | public class EnvWebFilter extends OncePerRequestFilter {
method doFilterInternal (line 22) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/dict/config/YudaoDictAutoConfiguration.java
class YudaoDictAutoConfiguration (line 8) | @AutoConfiguration
method dictUtils (line 11) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/dict/config/YudaoDictRpcAutoConfiguration.java
class YudaoDictRpcAutoConfiguration (line 12) | @AutoConfiguration
FILE: yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/dict/core/DictFrameworkUtils.java
class DictFrameworkUtils (line 23) | @Slf4j
method load (line 35) | @Override
method init (line 42) | public static void init(DictDataCommonApi dictDataApi) {
method clearCache (line 47) | public static void clearCache() {
method parseDictDataLabel (line 51) | @SneakyThrows
method parseDictDataLabel (line 59) | @SneakyThrows
method getDictDataLabelList (line 66) | @SneakyThrows
method parseDictDataValue (line 72) | @SneakyThrows
method getDictDataValueList (line 79) | @SneakyThrows
FILE: yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/dict/validation/InDictCollectionValidator.java
class InDictCollectionValidator (line 11) | public class InDictCollectionValidator implements ConstraintValidator<In...
method initialize (line 15) | @Override
method isValid (line 20) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/dict/validation/InDictValidator.java
class InDictValidator (line 10) | public class InDictValidator implements ConstraintValidator<InDict, Obje...
method initialize (line 14) | @Override
method isValid (line 19) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/convert/AreaConvert.java
class AreaConvert (line 18) | @Slf4j
method supportJavaTypeKey (line 21) | @Override
method supportExcelTypeKey (line 26) | @Override
method convertToJavaData (line 31) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/convert/DictConvert.java
class DictConvert (line 19) | @Slf4j
method supportJavaTypeKey (line 22) | @Override
method supportExcelTypeKey (line 27) | @Override
method convertToJavaData (line 32) | @Override
method convertToExcelData (line 48) | @Override
method getType (line 68) | private static String getType(ExcelContentProperty contentProperty) {
FILE: yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/convert/JsonConvert.java
class JsonConvert (line 15) | public class JsonConvert implements Converter<Object> {
method supportJavaTypeKey (line 17) | @Override
method supportExcelTypeKey (line 22) | @Override
method convertToExcelData (line 27) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/convert/MoneyConvert.java
class MoneyConvert (line 19) | public class MoneyConvert implements Converter<Integer> {
method supportJavaTypeKey (line 21) | @Override
method supportExcelTypeKey (line 26) | @Override
method convertToExcelData (line 31) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/function/ExcelColumnSelectFunction.java
type ExcelColumnSelectFunction (line 12) | public interface ExcelColumnSelectFunction {
method getName (line 19) | String getName();
method getOptions (line 26) | List<String> getOptions();
FILE: yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/handler/ColumnWidthMatchStyleStrategy.java
class ColumnWidthMatchStyleStrategy (line 25) | public class ColumnWidthMatchStyleStrategy extends AbstractColumnWidthSt...
method setColumnWidth (line 31) | @Override
method dataLength (line 54) | @SuppressWarnings("EnhancedSwitchMigration")
FILE: yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/handler/SelectSheetWriteHandler.java
class SelectSheetWriteHandler (line 39) | @Slf4j
method SelectSheetWriteHandler (line 60) | public SelectSheetWriteHandler(Class<?> head) {
method isStaticFinalOrTransient (line 95) | private boolean isStaticFinalOrTransient(Field field) {
method getSelectDataList (line 107) | private void getSelectDataList(int colIndex, Field field) {
method afterSheetCreate (line 127) | @Override
method setColumnSelect (line 159) | private static void setColumnSelect(WriteSheetHolder writeSheetHolder,...
FILE: yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/util/ExcelUtils.java
class ExcelUtils (line 20) | public class ExcelUtils {
method write (line 33) | public static <T> void write(HttpServletResponse response, String file...
method read (line 47) | public static <T> List<T> read(MultipartFile file, Class<T> head) thro...
FILE: yudao-framework/yudao-spring-boot-starter-excel/src/test/java/cn/iocoder/yudao/framework/dict/core/util/DictFrameworkUtilsTest.java
class DictFrameworkUtilsTest (line 23) | public class DictFrameworkUtilsTest extends BaseMockitoUnitTest {
method setUp (line 28) | @BeforeEach
method testParseDictDataLabel (line 34) | @Test
method testParseDictDataValue (line 48) | @Test
FILE: yudao-framework/yudao-spring-boot-starter-job/src/main/java/cn/iocoder/yudao/framework/quartz/config/XxlJobProperties.java
class XxlJobProperties (line 14) | @ConfigurationProperties("xxl.job")
class AdminProperties (line 41) | @Data
class ExecutorProperties (line 56) | @Data
FILE: yudao-framework/yudao-spring-boot-starter-job/src/main/java/cn/iocoder/yudao/framework/quartz/config/YudaoAsyncAutoConfiguration.java
class YudaoAsyncAutoConfiguration (line 15) | @AutoConfiguration
method threadPoolTaskExecutorBeanPostProcessor (line 19) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-job/src/main/java/cn/iocoder/yudao/framework/quartz/config/YudaoXxlJobAutoConfiguration.java
class YudaoXxlJobAutoConfiguration (line 20) | @AutoConfiguration
method xxlJobExecutor (line 28) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/config/TracerProperties.java
class TracerProperties (line 11) | @ConfigurationProperties("yudao.tracer")
FILE: yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/config/YudaoMetricsAutoConfiguration.java
class YudaoMetricsAutoConfiguration (line 17) | @AutoConfiguration
method metricsCommonTags (line 22) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/config/YudaoTracerAutoConfiguration.java
class YudaoTracerAutoConfiguration (line 17) | @AutoConfiguration
method traceFilter (line 45) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/core/aop/BizTraceAspect.java
class BizTraceAspect (line 26) | @Aspect
method around (line 35) | @Around(value = "@annotation(trace)")
method getOperationName (line 56) | private String getOperationName(ProceedingJoinPoint joinPoint, BizTrac...
method setBizTag (line 67) | private void setBizTag(Span span, ProceedingJoinPoint joinPoint, BizTr...
FILE: yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/core/filter/TraceFilter.java
class TraceFilter (line 17) | public class TraceFilter extends OncePerRequestFilter {
method doFilterInternal (line 24) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/core/util/TracerFrameworkUtils.java
class TracerFrameworkUtils (line 16) | public class TracerFrameworkUtils {
method onError (line 24) | public static void onError(Throwable throwable, Span span) {
method errorLogs (line 31) | private static Map<String, Object> errorLogs(Throwable throwable) {
FILE: yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/rabbitmq/config/YudaoRabbitMQAutoConfiguration.java
class YudaoRabbitMQAutoConfiguration (line 15) | @AutoConfiguration
method createMessageConverter (line 23) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/redis/config/YudaoRedisMQConsumerAutoConfiguration.java
class YudaoRedisMQConsumerAutoConfiguration (line 39) | @Slf4j
method redisMessageListenerContainer (line 47) | @Bean
method redisPendingMessageResendJob (line 68) | @Bean
method redisStreamMessageCleanupJob (line 79) | @Bean
method redisStreamMessageListenerContainer (line 92) | @Bean(initMethod = "start", destroyMethod = "stop")
method buildConsumerName (line 143) | public static String buildConsumerName() {
method checkRedisVersion (line 150) | public static void checkRedisVersion(RedisTemplate<String, ?> redisTem...
FILE: yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/redis/config/YudaoRedisMQProducerAutoConfiguration.java
class YudaoRedisMQProducerAutoConfiguration (line 18) | @Slf4j
method redisMQTemplate (line 22) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/redis/core/RedisMQTemplate.java
class RedisMQTemplate (line 22) | @AllArgsConstructor
method send (line 38) | public <T extends AbstractRedisChannelMessage> void send(T message) {
method send (line 54) | public <T extends AbstractRedisStreamMessage> RecordId send(T message) {
method addInterceptor (line 71) | public void addInterceptor(RedisMessageInterceptor interceptor) {
method sendMessageBefore (line 75) | private void sendMessageBefore(AbstractRedisMessage message) {
method sendMessageAfter (line 80) | private void sendMessageAfter(AbstractRedisMessage message) {
FILE: yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/redis/core/interceptor/RedisMessageInterceptor.java
type RedisMessageInterceptor (line 12) | public interface RedisMessageInterceptor {
method sendMessageBefore (line 14) | default void sendMessageBefore(AbstractRedisMessage message) {
method sendMessageAfter (line 17) | default void sendMessageAfter(AbstractRedisMessage message) {
method consumeMessageBefore (line 20) | default void consumeMessageBefore(AbstractRedisMessage message) {
method consumeMessageAfter (line 23) | default void consumeMessageAfter(AbstractRedisMessage message) {
FILE: yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/redis/core/job/RedisPendingMessageResendJob.java
class RedisPendingMessageResendJob (line 22) | @Slf4j
method messageResend (line 43) | @Scheduled(cron = "35 * * * * ?")
method execute (line 63) | private void execute() {
FILE: yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/redis/core/job/RedisStreamMessageCleanupJob.java
class RedisStreamMessageCleanupJob (line 22) | @Slf4j
method cleanup (line 40) | @Scheduled(cron = "0 0 * * * ?")
method execute (line 58) | private void execute() {
FILE: yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/redis/core/message/AbstractRedisMessage.java
class AbstractRedisMessage (line 13) | @Data
method getHeader (line 21) | public String getHeader(String key) {
method addHeader (line 25) | public void addHeader(String key, String value) {
FILE: yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/redis/core/pubsub/AbstractRedisChannelMessage.java
class AbstractRedisChannelMessage (line 11) | public abstract class AbstractRedisChannelMessage extends AbstractRedisM...
method getChannel (line 18) | @JsonIgnore // 避免序列化。原因是,Redis 发布 Channel 消息的时候,已经会指定。
FILE: yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/redis/core/pubsub/AbstractRedisChannelMessageListener.java
class AbstractRedisChannelMessageListener (line 23) | public abstract class AbstractRedisChannelMessageListener<T extends Abst...
method AbstractRedisChannelMessageListener (line 39) | @SneakyThrows
method getChannel (line 50) | public final String getChannel() {
method onMessage (line 54) | @Override
method onMessage (line 71) | public abstract void onMessage(T message);
method getMessageClass (line 78) | @SuppressWarnings("unchecked")
method consumeMessageBefore (line 87) | private void consumeMessageBefore(AbstractRedisMessage message) {
method consumeMessageAfter (line 94) | private void consumeMessageAfter(AbstractRedisMessage message) {
FILE: yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/redis/core/stream/AbstractRedisStreamMessage.java
class AbstractRedisStreamMessage (line 11) | public abstract class AbstractRedisStreamMessage extends AbstractRedisMe...
method getStreamKey (line 18) | @JsonIgnore // 避免序列化
FILE: yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/redis/core/stream/AbstractRedisStreamMessageListener.java
class AbstractRedisStreamMessageListener (line 25) | public abstract class AbstractRedisStreamMessageListener<T extends Abstr...
method AbstractRedisStreamMessageListener (line 50) | @SneakyThrows
method AbstractRedisStreamMessageListener (line 56) | protected AbstractRedisStreamMessageListener(String streamKey, String ...
method onMessage (line 62) | @Override
method onMessage (line 87) | public abstract void onMessage(T message);
method getMessageClass (line 94) | @SuppressWarnings("unchecked")
method consumeMessageBefore (line 103) | private void consumeMessageBefore(AbstractRedisMessage message) {
method consumeMessageAfter (line 110) | private void consumeMessageAfter(AbstractRedisMessage message) {
FILE: yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/datasource/config/YudaoDataSourceAutoConfiguration.java
class YudaoDataSourceAutoConfiguration (line 17) | @AutoConfiguration
method druidAdRemoveFilterFilter (line 25) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/datasource/core/enums/DataSourceEnum.java
type DataSourceEnum (line 11) | public interface DataSourceEnum {
FILE: yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/datasource/core/filter/DruidAdRemoveFilter.java
class DruidAdRemoveFilter (line 17) | public class DruidAdRemoveFilter extends OncePerRequestFilter {
method doFilterInternal (line 24) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/IdTypeEnvironmentPostProcessor.java
class IdTypeEnvironmentPostProcessor (line 23) | @Slf4j
method postProcessEnvironment (line 35) | @Override
method getIdType (line 61) | public IdType getIdType(ConfigurableEnvironment environment) {
method setIdType (line 71) | public void setIdType(ConfigurableEnvironment environment, IdType idTy...
method setJobStoreDriverIfPresent (line 78) | public void setJobStoreDriverIfPresent(ConfigurableEnvironment environ...
method getDbType (line 107) | public static DbType getDbType(ConfigurableEnvironment environment) {
FILE: yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/YudaoMybatisAutoConfiguration.java
class YudaoMybatisAutoConfiguration (line 34) | @AutoConfiguration(before = MybatisPlusAutoConfiguration.class) // 目的:先于...
method mybatisPlusInterceptor (line 47) | @Bean
method defaultMetaObjectHandler (line 56) | @Bean
method keyGenerator (line 61) | @Bean
method jacksonTypeHandler (line 84) | @Bean // 特殊:返回结果使用 Object 而不用 JacksonTypeHandler 的原因,避免因为 JacksonTypeH...
FILE: yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/dataobject/BaseDO.java
class BaseDO (line 22) | @Data
method clean (line 59) | public void clean(){
FILE: yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/enums/DbTypeEnum.java
type DbTypeEnum (line 17) | @Getter
method find (line 90) | public static DbType find(String databaseProductName) {
method getFindInSetTemplate (line 97) | public static String getFindInSetTemplate(DbType dbType) {
FILE: yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/handler/DefaultDBFieldHandler.java
class DefaultDBFieldHandler (line 18) | public class DefaultDBFieldHandler implements MetaObjectHandler {
method insertFill (line 20) | @Override
method updateFill (line 48) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java
type BaseMapperX (line 32) | public interface BaseMapperX<T> extends MPJBaseMapper<T> {
method selectPage (line 34) | default PageResult<T> selectPage(SortablePageParam pageParam, @Param("...
method selectPage (line 38) | default PageResult<T> selectPage(PageParam pageParam, @Param("ew") Wra...
method selectPage (line 42) | default PageResult<T> selectPage(PageParam pageParam, Collection<Sorti...
method selectJoinPage (line 57) | default <D> PageResult<D> selectJoinPage(PageParam pageParam, Class<D>...
method selectJoinPage (line 80) | default <D> PageResult<D> selectJoinPage(SortablePageParam pageParam, ...
method selectJoinPage (line 94) | default <DTO> PageResult<DTO> selectJoinPage(PageParam pageParam, Clas...
method selectOne (line 101) | default T selectOne(String field, Object value) {
method selectOne (line 105) | default T selectOne(SFunction<T, ?> field, Object value) {
method selectOne (line 109) | default T selectOne(String field1, Object value1, String field2, Objec...
method selectOne (line 113) | default T selectOne(SFunction<T, ?> field1, Object value1, SFunction<T...
method selectOne (line 117) | default T selectOne(SFunction<T, ?> field1, Object value1, SFunction<T...
method selectFirstOne (line 131) | default T selectFirstOne(SFunction<T, ?> field, Object value) {
method selectFirstOne (line 137) | default T selectFirstOne(SFunction<T, ?> field1, Object value1, SFunct...
method selectFirstOne (line 142) | default T selectFirstOne(SFunction<T,?> field1, Object value1, SFuncti...
method selectCount (line 149) | default Long selectCount() {
method selectCount (line 153) | default Long selectCount(String field, Object value) {
method selectCount (line 157) | default Long selectCount(SFunction<T, ?> field, Object value) {
method selectList (line 161) | default List<T> selectList() {
method selectList (line 165) | default List<T> selectList(String field, Object value) {
method selectList (line 169) | default List<T> selectList(SFunction<T, ?> field, Object value) {
method selectList (line 173) | default List<T> selectList(String field, Collection<?> values) {
method selectList (line 180) | default List<T> selectList(SFunction<T, ?> field, Collection<?> values) {
method selectList (line 187) | default List<T> selectList(SFunction<T, ?> field1, Object value1, SFun...
method insertBatch (line 196) | default Boolean insertBatch(Collection<T> entities) {
method insertBatch (line 212) | default Boolean insertBatch(Collection<T> entities, int size) {
method updateBatch (line 222) | default int updateBatch(T update) {
method updateBatch (line 226) | default Boolean updateBatch(Collection<T> entities) {
method updateBatch (line 230) | default Boolean updateBatch(Collection<T> entities, int size) {
method delete (line 234) | default int delete(String field, String value) {
method delete (line 238) | default int delete(SFunction<T, ?> field, Object value) {
method deleteBatch (line 242) | default int deleteBatch(SFunction<T, ?> field, Collection<?> values) {
FILE: yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/LambdaQueryWrapperX.java
class LambdaQueryWrapperX (line 19) | public class LambdaQueryWrapperX<T> extends LambdaQueryWrapper<T> {
method likeIfPresent (line 21) | public LambdaQueryWrapperX<T> likeIfPresent(SFunction<T, ?> column, St...
method inIfPresent (line 28) | public LambdaQueryWrapperX<T> inIfPresent(SFunction<T, ?> column, Coll...
method inIfPresent (line 35) | public LambdaQueryWrapperX<T> inIfPresent(SFunction<T, ?> column, Obje...
method eqIfPresent (line 42) | public LambdaQueryWrapperX<T> eqIfPresent(SFunction<T, ?> column, Obje...
method neIfPresent (line 49) | public LambdaQueryWrapperX<T> neIfPresent(SFunction<T, ?> column, Obje...
method gtIfPresent (line 56) | public LambdaQueryWrapperX<T> gtIfPresent(SFunction<T, ?> column, Obje...
method geIfPresent (line 63) | public LambdaQueryWrapperX<T> geIfPresent(SFunction<T, ?> column, Obje...
method ltIfPresent (line 70) | public LambdaQueryWrapperX<T> ltIfPresent(SFunction<T, ?> column, Obje...
method leIfPresent (line 77) | public LambdaQueryWrapperX<T> leIfPresent(SFunction<T, ?> column, Obje...
method betweenIfPresent (line 84) | public LambdaQueryWrapperX<T> betweenIfPresent(SFunction<T, ?> column,...
method betweenIfPresent (line 97) | public LambdaQueryWrapperX<T> betweenIfPresent(SFunction<T, ?> column,...
method eq (line 105) | @Override
method eq (line 111) | @Override
method orderByDesc (line 117) | @Override
method last (line 123) | @Override
method in (line 129) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/MPJLambdaWrapperX.java
class MPJLambdaWrapperX (line 21) | public class MPJLambdaWrapperX<T> extends MPJLambdaWrapper<T> {
method likeIfPresent (line 23) | public <S> MPJLambdaWrapperX<T> likeIfPresent(SFunction<S, ?> column, ...
method inIfPresent (line 30) | public <S> MPJLambdaWrapperX<T> inIfPresent(SFunction<S, ?> column, Co...
method inIfPresent (line 37) | public <S> MPJLambdaWrapperX<T> inIfPresent(SFunction<S, ?> column, Ob...
method eqIfPresent (line 44) | public <S> MPJLambdaWrapperX<T> eqIfPresent(SFunction<S, ?> column, Ob...
method neIfPresent (line 51) | public <S> MPJLambdaWrapperX<T> neIfPresent(SFunction<S, ?> column, Ob...
method gtIfPresent (line 58) | public <S> MPJLambdaWrapperX<T> gtIfPresent(SFunction<S, ?> column, Ob...
method geIfPresent (line 65) | public <S> MPJLambdaWrapperX<T> geIfPresent(SFunction<S, ?> column, Ob...
method ltIfPresent (line 72) | public <S> MPJLambdaWrapperX<T> ltIfPresent(SFunction<S, ?> column, Ob...
method leIfPresent (line 79) | public <S> MPJLambdaWrapperX<T> leIfPresent(SFunction<S, ?> column, Ob...
method betweenIfPresent (line 86) | public <S> MPJLambdaWrapperX<T> betweenIfPresent(SFunction<S, ?> colum...
method betweenIfPresent (line 92) | public <S> MPJLambdaWrapperX<T> betweenIfPresent(SFunction<S, ?> colum...
method eq (line 108) | @Override
method eq (line 114) | @Override
method orderByDesc (line 120) | @Override
method orderByAsc (line 126) | @Override
method last (line 132) | @Override
method in (line 138) | @Override
method selectAll (line 144) | @Override
method selectAll (line 150) | @Override
method selectAs (line 156) | @Override
method selectAs (line 162) | @Override
method selectAs (line 168) | @Override
method selectAs (line 174) | @Override
method selectAsClass (line 180) | @Override
method selectSub (line 186) | @Override
method selectSub (line 192) | @Override
method selectCount (line 198) | @Override
method selectCount (line 204) | @Override
method selectCount (line 210) | @Override
method selectCount (line 216) | @Override
method selectCount (line 222) | @Override
method selectSum (line 228) | @Override
method selectSum (line 234) | @Override
method selectSum (line 240) | @Override
method selectMax (line 246) | @Override
method selectMax (line 252) | @Override
method selectMax (line 258) | @Override
method selectMin (line 264) | @Override
method selectMin (line 270) | @Override
method selectMin (line 276) | @Override
method selectAvg (line 282) | @Override
method selectAvg (line 288) | @Override
method selectAvg (line 294) | @Override
method selectLen (line 300) | @Override
method selectLen (line 306) | @Override
method selectLen (line 312) | @Override
method leftJoin (line 319) | @Override
method rightJoin (line 325) | @Override
method innerJoin (line 331) | @Override
method leftJoin (line 338) | public <A, B> MPJLambdaWrapperX<T> leftJoin(Class<A> clazz, SFunction<...
method rightJoin (line 344) | public <A, B> MPJLambdaWrapperX<T> rightJoin(Class<A> clazz, SFunction...
method innerJoin (line 350) | public <A, B> MPJLambdaWrapperX<T> innerJoin(Class<A> clazz, SFunction...
FILE: yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/QueryWrapperX.java
class QueryWrapperX (line 19) | public class QueryWrapperX<T> extends QueryWrapper<T> {
method likeIfPresent (line 21) | public QueryWrapperX<T> likeIfPresent(String column, String val) {
method inIfPresent (line 28) | public QueryWrapperX<T> inIfPresent(String column, Collection<?> value...
method inIfPresent (line 35) | public QueryWrapperX<T> inIfPresent(String column, Object... values) {
method eqIfPresent (line 42) | public QueryWrapperX<T> eqIfPresent(String column, Object val) {
method neIfPresent (line 49) | public QueryWrapperX<T> neIfPresent(String column, Object val) {
method gtIfPresent (line 56) | public QueryWrapperX<T> gtIfPresent(String column, Object val) {
method geIfPresent (line 63) | public QueryWrapperX<T> geIfPresent(String column, Object val) {
method ltIfPresent (line 70) | public QueryWrapperX<T> ltIfPresent(String column, Object val) {
method leIfPresent (line 77) | public QueryWrapperX<T> leIfPresent(String column, Object val) {
method betweenIfPresent (line 84) | public QueryWrapperX<T> betweenIfPresent(String column, Object val1, O...
method betweenIfPresent (line 97) | public QueryWrapperX<T> betweenIfPresent(String column, Object[] value...
method eq (line 112) | @Override
method eq (line 118) | @Override
method orderByDesc (line 124) | @Override
method last (line 130) | @Override
method in (line 136) | @Override
method limitN (line 149) | public QueryWrapperX<T> limitN(int n) {
FILE: yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/type/EncryptTypeHandler.java
class EncryptTypeHandler (line 21) | public class EncryptTypeHandler extends BaseTypeHandler<String> {
method setNonNullParameter (line 27) | @Override
method getNullableResult (line 32) | @Override
method getNullableResult (line 38) | @Override
method getNullableResult (line 44) | @Override
method decrypt (line 50) | private static String decrypt(String value) {
method encrypt (line 57) | public static String encrypt(String rawValue) {
method getEncryptor (line 64) | private static AES getEncryptor() {
FILE: yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/type/IntegerListTypeHandler.java
class IntegerListTypeHandler (line 21) | @MappedJdbcTypes(JdbcType.VARCHAR)
method setParameter (line 27) | @Override
method getResult (line 32) | @Override
method getResult (line 38) | @Override
method getResult (line 44) | @Override
method getResult (line 50) | private List<Integer> getResult(String value) {
FILE: yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/type/LongListTypeHandler.java
class LongListTypeHandler (line 21) | @MappedJdbcTypes(JdbcType.VARCHAR)
method setParameter (line 27) | @Override
method getResult (line 33) | @Override
method getResult (line 39) | @Override
method getResult (line 45) | @Override
method getResult (line 51) | private List<Long> getResult(String value) {
FILE: yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/type/LongSetTypeHandler.java
class LongSetTypeHandler (line 22) | @MappedJdbcTypes(JdbcType.VARCHAR)
method setParameter (line 28) | @Override
method getResult (line 34) | @Override
method getResult (line 40) | @Override
method getResult (line 46) | @Override
method getResult (line 52) | private Set<Long> getResult(String value) {
FILE: yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/type/StringListTypeHandler.java
class StringListTypeHandler (line 22) | @MappedJdbcTypes(JdbcType.VARCHAR)
method setParameter (line 28) | @Override
method getResult (line 34) | @Override
method getResult (line 40) | @Override
method getResult (line 46) | @Override
method getResult (line 52) | private List<String> getResult(String value) {
FILE: yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/util/JdbcUtils.java
class JdbcUtils (line 20) | public class JdbcUtils {
method isConnectionOK (line 30) | public static boolean isConnectionOK(String url, String username, Stri...
method getDbType (line 44) | public static DbType getDbType(String url) {
method getDbType (line 53) | public static DbType getDbType() {
method isSQLServer (line 74) | public static boolean isSQLServer(String url) {
method isSQLServer (line 85) | public static boolean isSQLServer(DbType dbType) {
FILE: yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/util/MyBatisUtils.java
class MyBatisUtils (line 30) | public class MyBatisUtils {
method buildPage (line 34) | public static <T> Page<T> buildPage(PageParam pageParam) {
method buildPage (line 38) | public static <T> Page<T> buildPage(PageParam pageParam, Collection<So...
method addOrder (line 52) | @SuppressWarnings("PatternVariableCanBeUsed")
method addInterceptor (line 92) | public static void addInterceptor(MybatisPlusInterceptor interceptor, ...
method getTableName (line 106) | public static String getTableName(Table table) {
method buildColumn (line 122) | public static Column buildColumn(String tableName, Alias tableAlias, S...
method findInSet (line 136) | public static String findInSet(String column, Object value) {
method toUnderlineCase (line 152) | public static <T> String toUnderlineCase(Func1<T, ?> func) {
FILE: yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/translate/config/YudaoTranslateAutoConfiguration.java
class YudaoTranslateAutoConfiguration (line 8) | @AutoConfiguration
method translateUtils (line 11) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/translate/core/TranslateUtils.java
class TranslateUtils (line 14) | public class TranslateUtils {
method init (line 18) | public static void init(TransService transService) {
method translate (line 30) | public static <T extends VO> List<T> translate(List<T> data) {
FILE: yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/idempotent/config/YudaoIdempotentConfiguration.java
class YudaoIdempotentConfiguration (line 16) | @AutoConfiguration(after = YudaoRedisAutoConfiguration.class)
method idempotentAspect (line 19) | @Bean
method idempotentRedisDAO (line 24) | @Bean
method defaultIdempotentKeyResolver (line 31) | @Bean
method userIdempotentKeyResolver (line 36) | @Bean
method expressionIdempotentKeyResolver (line 41) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/idempotent/core/aop/IdempotentAspect.java
class IdempotentAspect (line 23) | @Aspect
method IdempotentAspect (line 34) | public IdempotentAspect(List<IdempotentKeyResolver> keyResolvers, Idem...
method aroundPointCut (line 39) | @Around(value = "@annotation(idempotent)")
FILE: yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/idempotent/core/keyresolver/IdempotentKeyResolver.java
type IdempotentKeyResolver (line 11) | public interface IdempotentKeyResolver {
method resolver (line 20) | String resolver(JoinPoint joinPoint, Idempotent idempotent);
FILE: yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/idempotent/core/keyresolver/impl/DefaultIdempotentKeyResolver.java
class DefaultIdempotentKeyResolver (line 16) | public class DefaultIdempotentKeyResolver implements IdempotentKeyResolv...
method resolver (line 18) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/idempotent/core/keyresolver/impl/ExpressionIdempotentKeyResolver.java
class ExpressionIdempotentKeyResolver (line 22) | public class ExpressionIdempotentKeyResolver implements IdempotentKeyRes...
method resolver (line 27) | @Override
method getMethod (line 46) | private static Method getMethod(JoinPoint point) {
FILE: yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/idempotent/core/keyresolver/impl/UserIdempotentKeyResolver.java
class UserIdempotentKeyResolver (line 17) | public class UserIdempotentKeyResolver implements IdempotentKeyResolver {
method resolver (line 19) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/idempotent/core/redis/IdempotentRedisDAO.java
class IdempotentRedisDAO (line 13) | @AllArgsConstructor
method setIfAbsent (line 27) | public Boolean setIfAbsent(String key, long timeout, TimeUnit timeUnit) {
method delete (line 32) | public void delete(String key) {
method formatKey (line 37) | private static String formatKey(String key) {
FILE: yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/lock4j/config/YudaoLock4jConfiguration.java
class YudaoLock4jConfiguration (line 9) | @AutoConfiguration(before = LockAutoConfiguration.class)
method lockFailureStrategy (line 13) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/lock4j/core/DefaultLockFailureStrategy.java
class DefaultLockFailureStrategy (line 13) | @Slf4j
method onLockFailure (line 16) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/lock4j/core/Lock4jRedisKeyConstants.java
type Lock4jRedisKeyConstants (line 8) | public interface Lock4jRedisKeyConstants {
FILE: yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/ratelimiter/config/YudaoRateLimiterConfiguration.java
class YudaoRateLimiterConfiguration (line 14) | @AutoConfiguration(after = YudaoRedisAutoConfiguration.class)
method rateLimiterAspect (line 17) | @Bean
method rateLimiterRedisDAO (line 22) | @Bean
method defaultRateLimiterKeyResolver (line 30) | @Bean
method userRateLimiterKeyResolver (line 35) | @Bean
method clientIpRateLimiterKeyResolver (line 40) | @Bean
method serverNodeRateLimiterKeyResolver (line 45) | @Bean
method expressionRateLimiterKeyResolver (line 50) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/ratelimiter/core/aop/RateLimiterAspect.java
class RateLimiterAspect (line 24) | @Aspect
method RateLimiterAspect (line 35) | public RateLimiterAspect(List<RateLimiterKeyResolver> keyResolvers, Ra...
method beforePointCut (line 40) | @Before("@annotation(rateLimiter)")
FILE: yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/ratelimiter/core/keyresolver/RateLimiterKeyResolver.java
type RateLimiterKeyResolver (line 11) | public interface RateLimiterKeyResolver {
method resolver (line 20) | String resolver(JoinPoint joinPoint, RateLimiter rateLimiter);
FILE: yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/ratelimiter/core/keyresolver/impl/ClientIpRateLimiterKeyResolver.java
class ClientIpRateLimiterKeyResolver (line 17) | public class ClientIpRateLimiterKeyResolver implements RateLimiterKeyRes...
method resolver (line 19) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/ratelimiter/core/keyresolver/impl/DefaultRateLimiterKeyResolver.java
class DefaultRateLimiterKeyResolver (line 16) | public class DefaultRateLimiterKeyResolver implements RateLimiterKeyReso...
method resolver (line 18) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/ratelimiter/core/keyresolver/impl/ExpressionRateLimiterKeyResolver.java
class ExpressionRateLimiterKeyResolver (line 22) | public class ExpressionRateLimiterKeyResolver implements RateLimiterKeyR...
method resolver (line 28) | @Override
method getMethod (line 47) | private static Method getMethod(JoinPoint point) {
FILE: yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/ratelimiter/core/keyresolver/impl/ServerNodeRateLimiterKeyResolver.java
class ServerNodeRateLimiterKeyResolver (line 17) | public class ServerNodeRateLimiterKeyResolver implements RateLimiterKeyR...
method resolver (line 19) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/ratelimiter/core/keyresolver/impl/UserRateLimiterKeyResolver.java
class UserRateLimiterKeyResolver (line 17) | public class UserRateLimiterKeyResolver implements RateLimiterKeyResolver {
method resolver (line 19) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/ratelimiter/core/redis/RateLimiterRedisDAO.java
class RateLimiterRedisDAO (line 15) | @AllArgsConstructor
method tryAcquire (line 29) | public Boolean tryAcquire(String key, int count, int time, TimeUnit ti...
method formatKey (line 36) | private static String formatKey(String key) {
method getRRateLimiter (line 40) | private RRateLimiter getRRateLimiter(String key, long count, int time,...
FILE: yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/signature/config/YudaoApiSignatureAutoConfiguration.java
class YudaoApiSignatureAutoConfiguration (line 15) | @AutoConfiguration(after = YudaoRedisAutoConfiguration.class)
method signatureAspect (line 18) | @Bean
method signatureRedisDAO (line 23) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/signature/core/aop/ApiSignatureAspect.java
class ApiSignatureAspect (line 33) | @Aspect
method beforePointCut (line 40) | @Before("@annotation(signature)")
method verifySignature (line 54) | public boolean verifySignature(ApiSignature signature, HttpServletRequ...
method verifyHeaders (line 94) | private boolean verifyHeaders(ApiSignature signature, HttpServletReque...
method buildSignatureString (line 135) | private String buildSignatureString(ApiSignature signature, HttpServle...
method getRequestHeaderMap (line 152) | private static SortedMap<String, String> getRequestHeaderMap(ApiSignat...
method getRequestParameterMap (line 166) | private static SortedMap<String, String> getRequestParameterMap(HttpSe...
FILE: yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/signature/core/redis/ApiSignatureRedisDAO.java
class ApiSignatureRedisDAO (line 13) | @AllArgsConstructor
method getNonce (line 39) | public String getNonce(String appId, String nonce) {
method setNonce (line 43) | public Boolean setNonce(String appId, String nonce, int time, TimeUnit...
method formatNonceKey (line 47) | private static String formatNonceKey(String appId, String nonce) {
method getAppSecret (line 53) | public String getAppSecret(String appId) {
FILE: yudao-framework/yudao-spring-boot-starter-protection/src/test/java/cn/iocoder/yudao/framework/signature/core/ApiSignatureTest.java
class ApiSignatureTest (line 28) | @ExtendWith(MockitoExtension.class)
method testSignatureGet (line 37) | @Test
FILE: yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/config/YudaoCacheAutoConfiguration.java
class YudaoCacheAutoConfiguration (line 27) | @AutoConfiguration
method redisCacheConfiguration (line 37) | @Bean
method redisCacheManager (line 70) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/config/YudaoCacheProperties.java
class YudaoCacheProperties (line 12) | @ConfigurationProperties("yudao.cache")
FILE: yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/config/YudaoRedisAutoConfiguration.java
class YudaoRedisAutoConfiguration (line 16) | @AutoConfiguration(before = RedissonAutoConfiguration.class) // 目的:使用自己定...
method redisTemplate (line 22) | @Bean
method buildRedisSerializer (line 37) | public static RedisSerializer<?> buildRedisSerializer() {
FILE: yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/core/TimeoutRedisCacheManager.java
class TimeoutRedisCacheManager (line 21) | public class TimeoutRedisCacheManager extends RedisCacheManager {
method TimeoutRedisCacheManager (line 25) | public TimeoutRedisCacheManager(RedisCacheWriter cacheWriter, RedisCac...
method createRedisCache (line 29) | @Override
method parseDuration (line 60) | private Duration parseDuration(String ttlStr) {
method removeDurationSuffix (line 82) | private Long removeDurationSuffix(String ttlStr) {
FILE: yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/operatelog/config/YudaoOperateLogConfiguration.java
class YudaoOperateLogConfiguration (line 16) | @EnableLogRecord(tenant = "") // 貌似用不上 tenant 这玩意给个空好啦
method iLogRecordServiceImpl (line 21) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/operatelog/config/YudaoOperateLogRpcAutoConfiguration.java
class YudaoOperateLogRpcAutoConfiguration (line 12) | @AutoConfiguration
FILE: yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/operatelog/core/service/LogRecordServiceImpl.java
class LogRecordServiceImpl (line 25) | @Slf4j
method record (line 31) | @Override
method fillUserFields (line 51) | private static void fillUserFields(OperateLogCreateReqDTO reqDTO) {
method fillModuleFields (line 61) | public static void fillModuleFields(OperateLogCreateReqDTO reqDTO, Log...
method fillRequestFields (line 69) | private static void fillRequestFields(OperateLogCreateReqDTO reqDTO) {
method queryLog (line 82) | @Override
method queryLogByBizNo (line 87) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/AuthorizeRequestsCustomizer.java
class AuthorizeRequestsCustomizer (line 17) | public abstract class AuthorizeRequestsCustomizer
method buildAdminApi (line 23) | protected String buildAdminApi(String url) {
method buildAppApi (line 27) | protected String buildAppApi(String url) {
method getOrder (line 31) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/SecurityProperties.java
class SecurityProperties (line 12) | @ConfigurationProperties(prefix = "yudao.security")
FILE: yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java
class YudaoSecurityAutoConfiguration (line 33) | @AutoConfiguration
method authenticationEntryPoint (line 44) | @Bean
method accessDeniedHandler (line 52) | @Bean
method passwordEncoder (line 63) | @Bean
method authenticationTokenFilter (line 71) | @Bean
method securityFrameworkService (line 77) | @Bean("ss") // 使用 Spring Security 的缩写,方便使用
method securityContextHolderMethodInvokingFactoryBean (line 86) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityRpcAutoConfiguration.java
class YudaoSecurityRpcAutoConfiguration (line 15) | @AutoConfiguration
method loginUserRequestInterceptor (line 20) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java
class YudaoWebSecurityConfigurerAdapter (line 46) | @AutoConfiguration
method authenticationManagerBean (line 87) | @Bean
method filterChain (line 109) | @Bean
method buildAppApi (line 155) | private String buildAppApi(String url) {
method getPermitAllUrlsFromAnnotations (line 159) | private Multimap<HttpMethod, String> getPermitAllUrlsFromAnnotations() {
FILE: yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/LoginUser.java
class LoginUser (line 18) | @Data
method setContext (line 64) | public void setContext(String key, Object value) {
method getContext (line 71) | public <T> T getContext(String key, Class<T> type) {
FILE: yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/context/TransmittableThreadLocalSecurityContextHolderStrategy.java
class TransmittableThreadLocalSecurityContextHolderStrategy (line 15) | public class TransmittableThreadLocalSecurityContextHolderStrategy imple...
method clearContext (line 22) | @Override
method getContext (line 27) | @Override
method setContext (line 37) | @Override
method createEmptyContext (line 43) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/filter/TokenAuthenticationFilter.java
class TokenAuthenticationFilter (line 36) | @RequiredArgsConstructor
method doFilterInternal (line 46) | @Override
method buildLoginUserByToken (line 83) | private LoginUser buildLoginUserByToken(String token, Integer userType) {
method mockLoginUser (line 118) | private LoginUser mockLoginUser(HttpServletRequest request, String tok...
method buildLoginUserByHeader (line 132) | @SneakyThrows
FILE: yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/handler/AccessDeniedHandlerImpl.java
class AccessDeniedHandlerImpl (line 29) | @Slf4j
method handle (line 33) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/handler/AuthenticationEntryPointImpl.java
class AuthenticationEntryPointImpl (line 24) | @Slf4j
method commence (line 28) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/rpc/LoginUserRequestInterceptor.java
class LoginUserRequestInterceptor (line 19) | @Slf4j
method apply (line 22) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityFrameworkService.java
type SecurityFrameworkService (line 8) | public interface SecurityFrameworkService {
method hasPermission (line 16) | boolean hasPermission(String permission);
method hasAnyPermissions (line 24) | boolean hasAnyPermissions(String... permissions);
method hasRole (line 34) | boolean hasRole(String role);
method hasAnyRoles (line 42) | boolean hasAnyRoles(String... roles);
method hasScope (line 50) | boolean hasScope(String scope);
method hasAnyScopes (line 58) | boolean hasAnyScopes(String... scope);
FILE: yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/service/SecurityFrameworkServiceImpl.java
class SecurityFrameworkServiceImpl (line 26) | @AllArgsConstructor
method load (line 38) | @Override
method load (line 52) | @Override
method hasPermission (line 59) | @Override
method hasAnyPermissions (line 64) | @Override
method hasRole (line 80) | @Override
method hasAnyRoles (line 85) | @Override
method hasScope (line 101) | @Override
method hasAnyScopes (line 106) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/util/SecurityFrameworkUtils.java
class SecurityFrameworkUtils (line 24) | public class SecurityFrameworkUtils {
method SecurityFrameworkUtils (line 33) | private SecurityFrameworkUtils() {}
method obtainAuthorization (line 43) | public static String obtainAuthorization(HttpServletRequest request,
method getAuthentication (line 63) | public static Authentication getAuthentication() {
method getLoginUser (line 76) | @Nullable
method getLoginUserId (line 90) | @Nullable
method getLoginUserNickname (line 101) | @Nullable
method getLoginUserDeptId (line 112) | @Nullable
method setLoginUser (line 124) | public static void setLoginUser(LoginUser loginUser, HttpServletReques...
method buildAuthentication (line 137) | private static Authentication buildAuthentication(LoginUser loginUser,...
method skipPermissionCheck (line 150) | public static boolean skipPermissionCheck() {
FILE: yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/config/RedisTestConfiguration.java
class RedisTestConfiguration (line 17) | @Configuration(proxyBeanMethods = false)
method redisServer (line 25) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/config/SqlInitializationTestConfiguration.java
class SqlInitializationTestConfiguration (line 26) | @Configuration(proxyBeanMethods = false)
method dataSourceScriptDatabaseInitializer (line 34) | @Bean
method createFrom (line 41) | static DatabaseInitializationSettings createFrom(SqlInitializationProp...
FILE: yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseDbAndRedisUnitTest.java
class BaseDbAndRedisUnitTest (line 27) | @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, cla...
class Application (line 32) | @Import({
FILE: yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseDbUnitTest.java
class BaseDbUnitTest (line 24) | @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, cla...
class Application (line 29) | @Import({
FILE: yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseMockitoUnitTest.java
class BaseMockitoUnitTest (line 11) | @ExtendWith(MockitoExtension.class)
FILE: yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseRedisUnitTest.java
class BaseRedisUnitTest (line 19) | @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, cla...
class Application (line 23) | @Import({
FILE: yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/util/AssertUtils.java
class AssertUtils (line 22) | public class AssertUtils {
method assertPojoEquals (line 33) | public static void assertPojoEquals(Object expected, Object actual, St...
method isPojoEquals (line 68) | public static boolean isPojoEquals(Object expected, Object actual, Str...
method assertServiceException (line 92) | public static void assertServiceException(Executable executable, Error...
FILE: yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/util/RandomUtils.java
class RandomUtils (line 26) | public class RandomUtils {
method randomString (line 68) | public static String randomString() {
method randomLongId (line 72) | public static Long randomLongId() {
method randomInteger (line 76) | public static Integer randomInteger() {
method randomDate (line 80) | public static Date randomDate() {
method randomLocalDateTime (line 84) | public static LocalDateTime randomLocalDateTime() {
method randomShort (line 89) | public static Short randomShort() {
method randomSet (line 93) | public static <T> Set<T> randomSet(Class<T> clazz) {
method randomCommonStatus (line 98) | public static Integer randomCommonStatus() {
method randomEmail (line 102) | public static String randomEmail() {
method randomMobile (line 106) | public static String randomMobile() {
method randomURL (line 110) | public static String randomURL() {
method randomPojo (line 114) | @SafeVarargs
method randomPojo (line 124) | @SafeVarargs
method randomPojoList (line 134) | @SafeVarargs
method randomPojoList (line 140) | @SafeVarargs
FILE: yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/config/YudaoApiLogAutoConfiguration.java
class YudaoApiLogAutoConfiguration (line 19) | @AutoConfiguration(after = YudaoWebAutoConfiguration.class)
method apiAccessLogFilter (line 25) | @Bean
method createFilterBean (line 34) | private static <T extends Filter> FilterRegistrationBean<T> createFilt...
method addInterceptors (line 40) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/config/YudaoApiLogRpcAutoConfiguration.java
class YudaoApiLogRpcAutoConfiguration (line 13) | @AutoConfiguration
FILE: yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/enums/OperateTypeEnum.java
type OperateTypeEnum (line 11) | @Getter
FILE: yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/filter/ApiAccessLogFilter.java
class ApiAccessLogFilter (line 49) | @Slf4j
method ApiAccessLogFilter (line 58) | public ApiAccessLogFilter(WebProperties webProperties, String applicat...
method doFilterInternal (line 64) | @Override
method createApiAccessLog (line 86) | private void createApiAccessLog(HttpServletRequest request, LocalDateT...
method buildApiAccessLog (line 100) | private boolean buildApiAccessLog(ApiAccessLogCreateReqDTO accessLog, ...
method parseOperateLogType (line 164) | private static OperateTypeEnum parseOperateLogType(HttpServletRequest ...
method sanitizeMap (line 186) | private static String sanitizeMap(Map<String, ?> map, String[] sanitiz...
method sanitizeJson (line 197) | private static String sanitizeJson(String jsonString, String[] sanitiz...
method sanitizeJson (line 212) | private static String sanitizeJson(CommonResult<?> commonResult, Strin...
method sanitizeJson (line 228) | private static void sanitizeJson(JsonNode node, String[] sanitizeKeys) {
FILE: yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/interceptor/ApiAccessLogInterceptor.java
class ApiAccessLogInterceptor (line 29) | @Slf4j
method preHandle (line 36) | @Override
method afterCompletion (line 64) | @Override
method printHandlerMethodPosition (line 78) | private void printHandlerMethodPosition(HandlerMethod handlerMethod) {
FILE: yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/banner/config/YudaoBannerAutoConfiguration.java
class YudaoBannerAutoConfiguration (line 12) | @AutoConfiguration
method bannerApplicationRunner (line 15) | @Bean
FILE: yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/banner/core/BannerApplicationRunner.java
class BannerApplicationRunner (line 15) | @Slf4j
method run (line 18) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/base/handler/DesensitizationHandler.java
type DesensitizationHandler (line 12) | public interface DesensitizationHandler<T extends Annotation> {
method desensitize (line 21) | String desensitize(String origin, T annotation);
method getDisable (line 31) | default String getDisable(T annotation) {
FILE: yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/base/serializer/StringDesensitizeSerializer.java
class StringDesensitizeSerializer (line 30) | @SuppressWarnings("rawtypes")
method StringDesensitizeSerializer (line 37) | protected StringDesensitizeSerializer() {
method createContextual (line 41) | @Override
method serialize (line 53) | @Override
method getField (line 85) | private Field getField(JsonGenerator generator) {
FILE: yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/handler/AbstractRegexDesensitizationHandler.java
class AbstractRegexDesensitizationHandler (line 13) | public abstract class AbstractRegexDesensitizationHandler<T extends Anno...
method desensitize (line 16) | @Override
method getRegex (line 36) | abstract String getRegex(T annotation);
method getReplacer (line 44) | abstract String getReplacer(T annotation);
FILE: yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/handler/DefaultRegexDesensitizationHandler.java
class DefaultRegexDesensitizationHandler (line 10) | public class DefaultRegexDesensitizationHandler extends AbstractRegexDes...
method getRegex (line 12) | @Override
method getReplacer (line 17) | @Override
method getDisable (line 22) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/regex/handler/EmailDesensitizationHandler.java
class EmailDesensitizationHandler (line 10) | public class EmailDesensitizationHandler extends AbstractRegexDesensitiz...
method getRegex (line 12) | @Override
method getReplacer (line 17) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/AbstractSliderDesensitizationHandler.java
class AbstractSliderDesensitizationHandler (line 14) | public abstract class AbstractSliderDesensitizationHandler<T extends Ann...
method desensitize (line 17) | @Override
method buildReplacerByLength (line 50) | private String buildReplacerByLength(String replacer, int length) {
method getPrefixKeep (line 60) | abstract Integer getPrefixKeep(T annotation);
method getSuffixKeep (line 68) | abstract Integer getSuffixKeep(T annotation);
method getReplacer (line 76) | abstract String getReplacer(T annotation);
FILE: yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/BankCardDesensitization.java
class BankCardDesensitization (line 10) | public class BankCardDesensitization extends AbstractSliderDesensitizati...
method getPrefixKeep (line 12) | @Override
method getSuffixKeep (line 17) | @Override
method getReplacer (line 22) | @Override
method getDisable (line 27) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/CarLicenseDesensitization.java
class CarLicenseDesensitization (line 10) | public class CarLicenseDesensitization extends AbstractSliderDesensitiza...
method getPrefixKeep (line 12) | @Override
method getSuffixKeep (line 17) | @Override
method getReplacer (line 22) | @Override
method getDisable (line 27) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/ChineseNameDesensitization.java
class ChineseNameDesensitization (line 10) | public class ChineseNameDesensitization extends AbstractSliderDesensitiz...
method getPrefixKeep (line 12) | @Override
method getSuffixKeep (line 17) | @Override
method getReplacer (line 22) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/DefaultDesensitizationHandler.java
class DefaultDesensitizationHandler (line 10) | public class DefaultDesensitizationHandler extends AbstractSliderDesensi...
method getPrefixKeep (line 12) | @Override
method getSuffixKeep (line 17) | @Override
method getReplacer (line 22) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/FixedPhoneDesensitization.java
class FixedPhoneDesensitization (line 10) | public class FixedPhoneDesensitization extends AbstractSliderDesensitiza...
method getPrefixKeep (line 12) | @Override
method getSuffixKeep (line 17) | @Override
method getReplacer (line 22) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/IdCardDesensitization.java
class IdCardDesensitization (line 10) | public class IdCardDesensitization extends AbstractSliderDesensitization...
method getPrefixKeep (line 11) | @Override
method getSuffixKeep (line 16) | @Override
method getReplacer (line 21) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/MobileDesensitization.java
class MobileDesensitization (line 10) | public class MobileDesensitization extends AbstractSliderDesensitization...
method getPrefixKeep (line 12) | @Override
method getSuffixKeep (line 17) | @Override
method getReplacer (line 22) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/slider/handler/PasswordDesensitization.java
class PasswordDesensitization (line 10) | public class PasswordDesensitization extends AbstractSliderDesensitizati...
method getPrefixKeep (line 11) | @Override
method getSuffixKeep (line 16) | @Override
method getReplacer (line 21) | @Override
FILE: yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/encrypt/config/ApiEncryptProperties.java
class ApiEncryptProperties (line 15) | @ConfigurationProperties(prefix = "yudao.api-encrypt")
FILE: yudao-framework/yudao-spring-boot-starter-web/src/main/java/
Copy disabled (too large)
Download .json
Condensed preview — 4560 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (16,630K chars).
[
{
"path": ".gitee/ISSUE_TEMPLATE.zh-CN.md",
"chars": 246,
"preview": "碰到问题,请在 <https://gitee.com/zhijiantianya/yudao-cloud/issues> 搜索是否存在相似的 issue。\n\n不按照模板提交的 issue,会被系统自动删除。\n\n### 基本信息\n\n- ruo"
},
{
"path": ".github/ISSUE_TEMPLATE/question.md",
"chars": 321,
"preview": "---\nname: 问题反馈\nabout: 请详细描述,以便更高快的获得到解决\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n碰到问题,请在 <https://github.com/YunaiV/yuda"
},
{
"path": ".github/workflows/maven.yml",
"chars": 790,
"preview": "# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow executi"
},
{
"path": ".gitignore",
"chars": 776,
"preview": "\n# 查看更多 .gitignore 配置 -> https://help.github.com/articles/ignoring-files/\n\ntarget/\n!.mvn/wrapper/maven-wrapper.jar\n\n.fla"
},
{
"path": "LICENSE",
"chars": 1078,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2021 yudao-cloud\n\nPermission is hereby granted, free of charge, to any person obtai"
},
{
"path": "README.md",
"chars": 27996,
"preview": "<p align=\"center\">\n <img src=\"https://img.shields.io/badge/Spring%20Cloud-2021-blue.svg\" alt=\"Coverage Status\">\n <img sr"
},
{
"path": "lombok.config",
"chars": 126,
"preview": "config.stopBubbling = true\nlombok.tostring.callsuper=CALL\nlombok.equalsandhashcode.callsuper=CALL\nlombok.accessors.chain"
},
{
"path": "pom.xml",
"chars": 6679,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "script/docker/docker-compose.yml",
"chars": 7502,
"preview": "version: '3'\nservices:\n yudao-gateway:\n image: yudao-gateway\n container_name: yudao-gateway\n environment:\n "
},
{
"path": "script/idea/http-client.env.json",
"chars": 710,
"preview": "{\n \"local\": {\n \"baseUrl\": \"http://127.0.0.1:48080/admin-api\",\n \"systemBaseUrl\": \"http://127.0.0.1:48081/admin-api"
},
{
"path": "sql/db2/README.md",
"chars": 88,
"preview": "暂未适配 IBM DB2 数据库,如果你有需要,可以微信联系 wangwenbin-server 一起建设。\n\n你需要把表结构与数据导入到 DM 数据库,我来测试与适配代码。\n"
},
{
"path": "sql/dm/flowable-patch/src/main/java/liquibase/database/core/DmDatabase.java",
"chars": 25710,
"preview": "package liquibase.database.core;\n\nimport java.lang.reflect.Method;\nimport java.sql.Connection;\nimport java.sql.ResultSet"
},
{
"path": "sql/dm/flowable-patch/src/main/java/liquibase/datatype/core/BooleanType.java",
"chars": 7289,
"preview": "package liquibase.datatype.core;\n\nimport liquibase.change.core.LoadDataChange;\nimport liquibase.database.Database;\nimpor"
},
{
"path": "sql/dm/flowable-patch/src/main/java/org/flowable/common/engine/impl/AbstractEngineConfiguration.java",
"chars": 80794,
"preview": "/* Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance wit"
},
{
"path": "sql/dm/flowable-patch/src/main/resources/META-INF/package-info.md",
"chars": 18,
"preview": "防止IDEA将`.`和`/`混为一谈"
},
{
"path": "sql/dm/flowable-patch/src/main/resources/META-INF/services/liquibase.database.Database",
"chars": 821,
"preview": "liquibase.database.core.CockroachDatabase\nliquibase.database.core.DB2Database\nliquibase.database.core.Db2zDatabase\nliqui"
},
{
"path": "sql/dm/quartz.sql",
"chars": 7709,
"preview": "--\n-- A hint submitted by a user: Oracle DB MUST be created as \"shared\" and the\n-- job_queue_processes parameter must b"
},
{
"path": "sql/dm/ruoyi-vue-pro-dm8.sql",
"chars": 887632,
"preview": "/*\n Yudao Database Transfer Tool\n\n Source Server Type : MySQL\n\n Target Server Type : DM8\n\n Date: 2025-05-22 21:49:"
},
{
"path": "sql/kingbase/quartz.sql",
"chars": 5445,
"preview": "set client_min_messages = WARNING;\nDROP TABLE IF EXISTS qrtz_fired_triggers;\nDROP TABLE IF EXISTS qrtz_paused_trigger_gr"
},
{
"path": "sql/kingbase/ruoyi-vue-pro.sql",
"chars": 884872,
"preview": "/*\n Yudao Database Transfer Tool\n\n Source Server Type : MySQL\n\n Target Server Type : Kingbase\n\n Date: 2025-05-22 2"
},
{
"path": "sql/mysql/quartz.sql",
"chars": 41718,
"preview": "/*\n Navicat Premium Data Transfer\n\n Source Server : 127.0.0.1 MySQL\n Source Server Type : MySQL\n Source Serve"
},
{
"path": "sql/mysql/ruoyi-vue-pro.sql",
"chars": 982035,
"preview": "/*\n Navicat Premium Data Transfer\n\n Source Server : 127.0.0.1 MySQL\n Source Server Type : MySQL\n Source Serve"
},
{
"path": "sql/opengauss/quartz.sql",
"chars": 9690,
"preview": "-- ----------------------------\n-- qrtz_blob_triggers\n-- ----------------------------\nCREATE TABLE qrtz_blob_triggers\n(\n"
},
{
"path": "sql/opengauss/ruoyi-vue-pro.sql",
"chars": 884901,
"preview": "/*\n Yudao Database Transfer Tool\n\n Source Server Type : MySQL\n\n Target Server Type : OpenGauss\n\n Date: 2025-05-22 "
},
{
"path": "sql/oracle/quartz.sql",
"chars": 35512,
"preview": "/*\n 注意:仅仅需要 Quartz 定时任务的场景,可选!!!\n\n Date: 15/06/2022 08:20:08\n*/\n\n-- ----------------------------\n-- Table structure for "
},
{
"path": "sql/oracle/ruoyi-vue-pro.sql",
"chars": 1080915,
"preview": "/*\n Yudao Database Transfer Tool\n\n Source Server Type : MySQL\n\n Target Server Type : Oracle\n\n Date: 2025-05-22 21:"
},
{
"path": "sql/postgresql/quartz.sql",
"chars": 7594,
"preview": "-- https://github.com/quartz-scheduler/quartz/blob/main/quartz/src/main/resources/org/quartz/impl/jdbcjobstore/tables_po"
},
{
"path": "sql/postgresql/ruoyi-vue-pro.sql",
"chars": 886884,
"preview": "/*\n Yudao Database Transfer Tool\n\n Source Server Type : MySQL\n\n Target Server Type : PostgreSQL\n\n Date: 2025-12-27"
},
{
"path": "sql/sqlserver/quartz.sql",
"chars": 18223,
"preview": "/*\n 注意:仅仅需要 Quartz 定时任务的场景,可选!!!\n\n Date: 30/04/2024 09:54:18\n*/\n\n-- ----------------------------\n-- Table structure for "
},
{
"path": "sql/sqlserver/ruoyi-vue-pro.sql",
"chars": 992929,
"preview": "/*\n Yudao Database Transfer Tool\n\n Source Server Type : MySQL\n\n Target Server Type : Microsoft SQL Server\n\n Date: "
},
{
"path": "sql/tools/.gitignore",
"chars": 61,
"preview": "# 忽略python虚拟环境\n.env\n.venv\nenv/\nvenv/\nENV/\nenv.bak/\nvenv.bak/\n"
},
{
"path": "sql/tools/README.md",
"chars": 2812,
"preview": "## 0. 友情提示\n\n在 `sql/tools` 目录下,我们提供一些数据库相关的工具,包括测试数据库的快速启动、MySQL 转换其它数据库等等。\n\n注意!所有的操作,必须在 `sql/tools` 目录下执行。\n\n## 1. 测试数据库"
},
{
"path": "sql/tools/convertor.py",
"chars": 28604,
"preview": "# encoding=utf8\n\"\"\"芋道系统数据库迁移工具\n\nAuthor: dhb52 (https://gitee.com/dhb52)\n\npip install simple-ddl-parser\n\nor with uv\nuv ru"
},
{
"path": "sql/tools/docker-compose.yaml",
"chars": 4495,
"preview": "name: ruoyi-vue-pro\n\nvolumes:\n mysql: { }\n postgres: { }\n sqlserver: { }\n dm8: { }\n kingbase: { }\n ope"
},
{
"path": "sql/tools/oracle/1_create_user.sql",
"chars": 133,
"preview": "ALTER SESSION SET CONTAINER=XEPDB1;\nCREATE USER ROOT IDENTIFIED BY 123456 QUOTA UNLIMITED ON USERS;\nGRANT CONNECT, RESOU"
},
{
"path": "sql/tools/oracle/2_create_schema.sh",
"chars": 59,
"preview": "sqlplus -s ROOT/123456@//localhost/XEPDB1 @/tmp/schema.sql\n"
},
{
"path": "sql/tools/sqlserver/create_schema.sh",
"chars": 230,
"preview": "#!/usr/bin/env bash\n\n/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P ${SA_PASSWORD} -Q \"CREATE DATABASE [ruoyi-vue-pro"
},
{
"path": "yudao-dependencies/pom.xml",
"chars": 32993,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "yudao-framework/pom.xml",
"chars": 1963,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "yudao-framework/yudao-common/pom.xml",
"chars": 5744,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/infra/logger/ApiAccessLogCommonApi.java",
"chars": 1257,
"preview": "package cn.iocoder.yudao.framework.common.biz.infra.logger;\n\nimport cn.iocoder.yudao.framework.common.biz.infra.logger.d"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/infra/logger/ApiErrorLogCommonApi.java",
"chars": 1249,
"preview": "package cn.iocoder.yudao.framework.common.biz.infra.logger;\n\nimport cn.iocoder.yudao.framework.common.biz.infra.logger.d"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/infra/logger/dto/ApiAccessLogCreateReqDTO.java",
"chars": 1710,
"preview": "package cn.iocoder.yudao.framework.common.biz.infra.logger.dto;\n\nimport lombok.Data;\n\nimport javax.validation.constraint"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/infra/logger/dto/ApiErrorLogCreateReqDTO.java",
"chars": 3134,
"preview": "package cn.iocoder.yudao.framework.common.biz.infra.logger.dto;\n\nimport io.swagger.v3.oas.annotations.media.Schema;\nimpo"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/infra/package-info.java",
"chars": 82,
"preview": "/**\n * 针对 infra 模块的 api 包\n */\npackage cn.iocoder.yudao.framework.common.biz.infra;"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/package-info.java",
"chars": 103,
"preview": "/**\n * 特殊:用于 framework 下,starter 需要调用 biz 业务模块的接口定义!\n */\npackage cn.iocoder.yudao.framework.common.biz;"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/system/dict/DictDataCommonApi.java",
"chars": 1097,
"preview": "package cn.iocoder.yudao.framework.common.biz.system.dict;\n\nimport cn.iocoder.yudao.framework.common.biz.system.dict.dto"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/system/dict/dto/DictDataRespDTO.java",
"chars": 760,
"preview": "package cn.iocoder.yudao.framework.common.biz.system.dict.dto;\n\nimport io.swagger.v3.oas.annotations.media.Schema;\nimpor"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/system/logger/OperateLogCommonApi.java",
"chars": 1253,
"preview": "package cn.iocoder.yudao.framework.common.biz.system.logger;\n\nimport cn.iocoder.yudao.framework.common.biz.system.logger"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/system/logger/dto/OperateLogCreateReqDTO.java",
"chars": 2292,
"preview": "package cn.iocoder.yudao.framework.common.biz.system.logger.dto;\n\nimport io.swagger.v3.oas.annotations.media.Schema;\nimp"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/system/oauth2/OAuth2TokenCommonApi.java",
"chars": 2467,
"preview": "package cn.iocoder.yudao.framework.common.biz.system.oauth2;\n\nimport cn.iocoder.yudao.framework.common.enums.RpcConstant"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/system/oauth2/dto/OAuth2AccessTokenCheckRespDTO.java",
"chars": 1101,
"preview": "package cn.iocoder.yudao.framework.common.biz.system.oauth2.dto;\n\nimport io.swagger.v3.oas.annotations.media.Schema;\nimp"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/system/oauth2/dto/OAuth2AccessTokenCreateReqDTO.java",
"chars": 1164,
"preview": "package cn.iocoder.yudao.framework.common.biz.system.oauth2.dto;\n\nimport cn.iocoder.yudao.framework.common.enums.UserTyp"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/system/oauth2/dto/OAuth2AccessTokenRespDTO.java",
"chars": 982,
"preview": "package cn.iocoder.yudao.framework.common.biz.system.oauth2.dto;\n\nimport io.swagger.v3.oas.annotations.media.Schema;\nimp"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/system/package-info.java",
"chars": 84,
"preview": "/**\n * 针对 system 模块的 api 包\n */\npackage cn.iocoder.yudao.framework.common.biz.system;"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/system/permission/PermissionCommonApi.java",
"chars": 2113,
"preview": "package cn.iocoder.yudao.framework.common.biz.system.permission;\n\nimport cn.iocoder.yudao.framework.common.biz.system.pe"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/system/permission/dto/DeptDataPermissionRespDTO.java",
"chars": 832,
"preview": "package cn.iocoder.yudao.framework.common.biz.system.permission.dto;\n\nimport io.swagger.v3.oas.annotations.media.Schema;"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/biz/system/tenant/TenantCommonApi.java",
"chars": 1078,
"preview": "package cn.iocoder.yudao.framework.common.biz.system.tenant;\n\nimport cn.iocoder.yudao.framework.common.enums.RpcConstant"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/core/ArrayValuable.java",
"chars": 184,
"preview": "package cn.iocoder.yudao.framework.common.core;\n\n/**\n * 可生成 T 数组的接口\n *\n * @author HUIHUI\n */\npublic interface ArrayValua"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/core/KeyValue.java",
"chars": 355,
"preview": "package cn.iocoder.yudao.framework.common.core;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimport lombok.NoA"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/CommonStatusEnum.java",
"chars": 956,
"preview": "package cn.iocoder.yudao.framework.common.enums;\n\nimport cn.hutool.core.util.ObjUtil;\nimport cn.iocoder.yudao.framework."
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/DateIntervalEnum.java",
"chars": 1026,
"preview": "package cn.iocoder.yudao.framework.common.enums;\n\nimport cn.hutool.core.util.ArrayUtil;\nimport cn.iocoder.yudao.framewor"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/DocumentEnum.java",
"chars": 411,
"preview": "package cn.iocoder.yudao.framework.common.enums;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\n\n/**\n * 文档地址\n "
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/RpcConstants.java",
"chars": 711,
"preview": "package cn.iocoder.yudao.framework.common.enums;\n\n/**\n * RPC 相关的枚举\n *\n * 虽然放在 yudao-spring-boot-starter-rpc 会相对合适,但是每个 A"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/TerminalEnum.java",
"chars": 819,
"preview": "package cn.iocoder.yudao.framework.common.enums;\n\nimport cn.iocoder.yudao.framework.common.core.ArrayValuable;\nimport lo"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/UserTypeEnum.java",
"chars": 900,
"preview": "package cn.iocoder.yudao.framework.common.enums;\n\nimport cn.hutool.core.util.ArrayUtil;\nimport cn.iocoder.yudao.framewor"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/WebFilterOrderEnum.java",
"chars": 1011,
"preview": "package cn.iocoder.yudao.framework.common.enums;\n\n/**\n * Web 过滤器顺序的枚举类,保证过滤器按照符合我们的预期\n *\n * 考虑到每个 starter 都需要用到该工具类,所以放"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/ErrorCode.java",
"chars": 688,
"preview": "package cn.iocoder.yudao.framework.common.exception;\n\nimport cn.iocoder.yudao.framework.common.exception.enums.GlobalErr"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/ServerException.java",
"chars": 1181,
"preview": "package cn.iocoder.yudao.framework.common.exception;\n\nimport cn.iocoder.yudao.framework.common.exception.enums.GlobalErr"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/ServiceException.java",
"chars": 1182,
"preview": "package cn.iocoder.yudao.framework.common.exception;\n\nimport cn.iocoder.yudao.framework.common.exception.enums.ServiceEr"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/enums/GlobalErrorCodeConstants.java",
"chars": 1376,
"preview": "package cn.iocoder.yudao.framework.common.exception.enums;\n\nimport cn.iocoder.yudao.framework.common.exception.ErrorCode"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/enums/ServiceErrorCodeRange.java",
"chars": 1235,
"preview": "package cn.iocoder.yudao.framework.common.exception.enums;\n\n/**\n * 业务异常的错误码区间,解决:解决各模块错误码定义,避免重复,在此只声明不做实际使用\n *\n * 一共 10"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/util/ServiceExceptionUtil.java",
"chars": 2680,
"preview": "package cn.iocoder.yudao.framework.common.exception.util;\n\nimport cn.iocoder.yudao.framework.common.exception.ErrorCode;"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/package-info.java",
"chars": 96,
"preview": "/**\n * 基础的通用类,和框架无关\n *\n * 例如说,CommonResult 为通用返回\n */\npackage cn.iocoder.yudao.framework.common;\n"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/CommonResult.java",
"chars": 3358,
"preview": "package cn.iocoder.yudao.framework.common.pojo;\n\nimport cn.hutool.core.lang.Assert;\nimport cn.iocoder.yudao.framework.co"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/PageParam.java",
"chars": 1097,
"preview": "package cn.iocoder.yudao.framework.common.pojo;\n\nimport io.swagger.v3.oas.annotations.media.Schema;\nimport lombok.Data;\n"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/PageResult.java",
"chars": 953,
"preview": "package cn.iocoder.yudao.framework.common.pojo;\n\nimport io.swagger.v3.oas.annotations.media.Schema;\nimport lombok.Data;\n"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/SortablePageParam.java",
"chars": 441,
"preview": "package cn.iocoder.yudao.framework.common.pojo;\n\nimport io.swagger.v3.oas.annotations.media.Schema;\nimport lombok.Data;\n"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/SortingField.java",
"chars": 598,
"preview": "package cn.iocoder.yudao.framework.common.pojo;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimport lombok.NoA"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/cache/CacheUtils.java",
"chars": 1827,
"preview": "package cn.iocoder.yudao.framework.common.util.cache;\n\nimport com.google.common.cache.CacheBuilder;\nimport com.google.co"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/ArrayUtils.java",
"chars": 1619,
"preview": "package cn.iocoder.yudao.framework.common.util.collection;\n\nimport cn.hutool.core.collection.CollectionUtil;\nimport cn.h"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtils.java",
"chars": 14025,
"preview": "package cn.iocoder.yudao.framework.common.util.collection;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.hutool."
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/MapUtils.java",
"chars": 3082,
"preview": "package cn.iocoder.yudao.framework.common.util.collection;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.hutool."
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/SetUtils.java",
"chars": 306,
"preview": "package cn.iocoder.yudao.framework.common.util.collection;\n\nimport cn.hutool.core.collection.CollUtil;\n\nimport java.util"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/DateUtils.java",
"chars": 3718,
"preview": "package cn.iocoder.yudao.framework.common.util.date;\n\nimport cn.hutool.core.date.LocalDateTimeUtil;\n\nimport java.time.*;"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/LocalDateTimeUtils.java",
"chars": 11778,
"preview": "package cn.iocoder.yudao.framework.common.util.date;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.hutool.core.d"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/http/HttpUtils.java",
"chars": 7205,
"preview": "package cn.iocoder.yudao.framework.common.util.http;\n\nimport cn.hutool.core.codec.Base64;\nimport cn.hutool.core.map.Tabl"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/io/FileUtils.java",
"chars": 1166,
"preview": "package cn.iocoder.yudao.framework.common.util.io;\n\nimport cn.hutool.core.io.FileUtil;\nimport cn.hutool.core.util.IdUtil"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/io/IoUtils.java",
"chars": 614,
"preview": "package cn.iocoder.yudao.framework.common.util.io;\n\nimport cn.hutool.core.io.IORuntimeException;\nimport cn.hutool.core.i"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/json/JsonUtils.java",
"chars": 8799,
"preview": "package cn.iocoder.yudao.framework.common.util.json;\n\nimport cn.hutool.core.util.ArrayUtil;\nimport cn.hutool.core.util.S"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/json/databind/NumberSerializer.java",
"chars": 1179,
"preview": "package cn.iocoder.yudao.framework.common.util.json.databind;\n\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport c"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/json/databind/TimestampLocalDateTimeDeserializer.java",
"chars": 872,
"preview": "package cn.iocoder.yudao.framework.common.util.json.databind;\n\nimport com.fasterxml.jackson.core.JsonParser;\nimport com."
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/json/databind/TimestampLocalDateTimeSerializer.java",
"chars": 3371,
"preview": "package cn.iocoder.yudao.framework.common.util.json.databind;\n\nimport cn.hutool.core.util.ObjUtil;\nimport cn.hutool.core"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/monitor/TracerUtils.java",
"chars": 505,
"preview": "package cn.iocoder.yudao.framework.common.util.monitor;\n\nimport org.apache.skywalking.apm.toolkit.trace.TraceContext;\n\n/"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/number/MoneyUtils.java",
"chars": 3193,
"preview": "package cn.iocoder.yudao.framework.common.util.number;\n\nimport cn.hutool.core.math.Money;\nimport cn.hutool.core.util.Num"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/number/NumberUtils.java",
"chars": 2276,
"preview": "package cn.iocoder.yudao.framework.common.util.number;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.hutool.core"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/object/BeanUtils.java",
"chars": 2089,
"preview": "package cn.iocoder.yudao.framework.common.util.object;\n\nimport cn.hutool.core.bean.BeanUtil;\nimport cn.iocoder.yudao.fra"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/object/ObjectUtils.java",
"chars": 1577,
"preview": "package cn.iocoder.yudao.framework.common.util.object;\n\nimport cn.hutool.core.util.ObjectUtil;\nimport cn.hutool.core.uti"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/object/PageUtils.java",
"chars": 2171,
"preview": "package cn.iocoder.yudao.framework.common.util.object;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.hutool.core"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/package-info.java",
"chars": 194,
"preview": "/**\n * 对于工具类的选择,优先查找 Hutool 中有没对应的方法\n * 如果没有,则自己封装对应的工具类,以 Utils 结尾,用于区分\n *\n * ps:如果担心 Hutool 存在坑的问题,可以阅读 Hutool 的实现源码,以"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/servlet/ServletUtils.java",
"chars": 3870,
"preview": "package cn.iocoder.yudao.framework.common.util.servlet;\n\nimport cn.hutool.core.io.IoUtil;\nimport cn.hutool.core.util.Str"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/spring/SpringExpressionUtils.java",
"chars": 4159,
"preview": "package cn.iocoder.yudao.framework.common.util.spring;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.hutool.core"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/spring/SpringUtils.java",
"chars": 425,
"preview": "package cn.iocoder.yudao.framework.common.util.spring;\n\nimport cn.hutool.extra.spring.SpringUtil;\n\nimport java.util.Obje"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/string/StrUtils.java",
"chars": 3165,
"preview": "package cn.iocoder.yudao.framework.common.util.string;\n\nimport cn.hutool.core.text.StrPool;\nimport cn.hutool.core.util.A"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/validation/ValidationUtils.java",
"chars": 1970,
"preview": "package cn.iocoder.yudao.framework.common.util.validation;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.hutool."
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/validation/InEnum.java",
"chars": 829,
"preview": "package cn.iocoder.yudao.framework.common.validation;\n\nimport cn.iocoder.yudao.framework.common.core.ArrayValuable;\n\nimp"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/validation/InEnumCollectionValidator.java",
"chars": 1406,
"preview": "package cn.iocoder.yudao.framework.common.validation;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.iocoder.yuda"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/validation/InEnumValidator.java",
"chars": 1320,
"preview": "package cn.iocoder.yudao.framework.common.validation;\n\nimport cn.iocoder.yudao.framework.common.core.ArrayValuable;\n\nimp"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/validation/Mobile.java",
"chars": 624,
"preview": "package cn.iocoder.yudao.framework.common.validation;\n\nimport javax.validation.Constraint;\nimport javax.validation.Paylo"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/validation/MobileValidator.java",
"chars": 682,
"preview": "package cn.iocoder.yudao.framework.common.validation;\n\nimport cn.hutool.core.util.StrUtil;\nimport cn.iocoder.yudao.frame"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/validation/Telephone.java",
"chars": 629,
"preview": "package cn.iocoder.yudao.framework.common.validation;\n\nimport javax.validation.Constraint;\nimport javax.validation.Paylo"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/validation/TelephoneValidator.java",
"chars": 692,
"preview": "package cn.iocoder.yudao.framework.common.validation;\n\nimport cn.hutool.core.text.CharSequenceUtil;\nimport cn.hutool.cor"
},
{
"path": "yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/validation/package-info.java",
"chars": 95,
"preview": "/**\n * 使用 Hibernate Validator 实现参数校验\n */\npackage cn.iocoder.yudao.framework.common.validation;\n"
},
{
"path": "yudao-framework/yudao-common/src/main/java/com/fhs/trans/service/AutoTransable.java",
"chars": 1058,
"preview": "package com.fhs.trans.service;\n\nimport com.fhs.core.trans.vo.VO;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n/*"
},
{
"path": "yudao-framework/yudao-common/src/test/java/cn/iocoder/yudao/framework/common/util/collection/CollectionUtilsTest.java",
"chars": 1786,
"preview": "package cn.iocoder.yudao.framework.common.util.collection;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimport"
},
{
"path": "yudao-framework/yudao-common/《芋道 Spring Boot 参数校验 Validation 入门》.md",
"chars": 54,
"preview": "<http://www.iocoder.cn/Spring-Boot/Validation/?yudao>\n"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/pom.xml",
"chars": 1791,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/config/YudaoDataPermissionAutoConfiguration.java",
"chars": 1889,
"preview": "package cn.iocoder.yudao.framework.datapermission.config;\n\nimport cn.iocoder.yudao.framework.datapermission.core.aop.Dat"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/config/YudaoDataPermissionRpcAutoConfiguration.java",
"chars": 1341,
"preview": "package cn.iocoder.yudao.framework.datapermission.config;\n\nimport cn.iocoder.yudao.framework.datapermission.core.rpc.Dat"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/config/YudaoDeptDataPermissionAutoConfiguration.java",
"chars": 1883,
"preview": "package cn.iocoder.yudao.framework.datapermission.config;\n\nimport cn.hutool.extra.spring.SpringUtil;\nimport cn.iocoder.y"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/annotation/DataPermission.java",
"chars": 768,
"preview": "package cn.iocoder.yudao.framework.datapermission.core.annotation;\n\nimport cn.iocoder.yudao.framework.datapermission.cor"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/aop/DataPermissionAnnotationAdvisor.java",
"chars": 1283,
"preview": "package cn.iocoder.yudao.framework.datapermission.core.aop;\n\nimport cn.iocoder.yudao.framework.datapermission.core.annot"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/aop/DataPermissionAnnotationInterceptor.java",
"chars": 2693,
"preview": "package cn.iocoder.yudao.framework.datapermission.core.aop;\n\nimport cn.iocoder.yudao.framework.datapermission.core.annot"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/aop/DataPermissionContextHolder.java",
"chars": 1642,
"preview": "package cn.iocoder.yudao.framework.datapermission.core.aop;\n\nimport cn.iocoder.yudao.framework.datapermission.core.annot"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/db/DataPermissionRuleHandler.java",
"chars": 2255,
"preview": "package cn.iocoder.yudao.framework.datapermission.core.db;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.iocoder"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rpc/DataPermissionRequestInterceptor.java",
"chars": 966,
"preview": "package cn.iocoder.yudao.framework.datapermission.core.rpc;\n\nimport cn.iocoder.yudao.framework.datapermission.core.annot"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rpc/DataPermissionRpcWebFilter.java",
"chars": 1407,
"preview": "package cn.iocoder.yudao.framework.datapermission.core.rpc;\n\nimport cn.iocoder.yudao.framework.datapermission.core.aop.D"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/DataPermissionRule.java",
"chars": 803,
"preview": "package cn.iocoder.yudao.framework.datapermission.core.rule;\n\nimport com.baomidou.mybatisplus.core.metadata.TableInfoHel"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/DataPermissionRuleFactory.java",
"chars": 564,
"preview": "package cn.iocoder.yudao.framework.datapermission.core.rule;\n\nimport java.util.List;\n\n/**\n * {@link DataPermissionRule} "
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/DataPermissionRuleFactoryImpl.java",
"chars": 2795,
"preview": "package cn.iocoder.yudao.framework.datapermission.core.rule;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.hutoo"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/dept/DeptDataPermissionRule.java",
"chars": 8249,
"preview": "package cn.iocoder.yudao.framework.datapermission.core.rule.dept;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn."
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/dept/DeptDataPermissionRuleCustomizer.java",
"chars": 516,
"preview": "package cn.iocoder.yudao.framework.datapermission.core.rule.dept;\n\n/**\n * {@link DeptDataPermissionRule} 的自定义配置接口\n *\n * "
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/dept/package-info.java",
"chars": 108,
"preview": "/**\n * 基于部门的数据权限规则\n *\n * @author 芋道源码\n */\npackage cn.iocoder.yudao.framework.datapermission.core.rule.dept;\n"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/util/DataPermissionUtils.java",
"chars": 1846,
"preview": "package cn.iocoder.yudao.framework.datapermission.core.util;\n\nimport cn.iocoder.yudao.framework.datapermission.core.anno"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/package-info.java",
"chars": 100,
"preview": "/**\n * 基于 JSqlParser 解析 SQL,增加数据权限的 WHERE 条件\n */\npackage cn.iocoder.yudao.framework.datapermission;\n"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports",
"chars": 265,
"preview": "cn.iocoder.yudao.framework.datapermission.config.YudaoDataPermissionAutoConfiguration\ncn.iocoder.yudao.framework.dataper"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/test/java/cn/iocoder/yudao/framework/datapermission/core/aop/DataPermissionAnnotationInterceptorTest.java",
"chars": 3164,
"preview": "package cn.iocoder.yudao.framework.datapermission.core.aop;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.iocode"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/test/java/cn/iocoder/yudao/framework/datapermission/core/aop/DataPermissionContextHolderTest.java",
"chars": 2169,
"preview": "package cn.iocoder.yudao.framework.datapermission.core.aop;\n\nimport cn.iocoder.yudao.framework.datapermission.core.annot"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/test/java/cn/iocoder/yudao/framework/datapermission/core/db/DataPermissionRuleHandlerTest.java",
"chars": 25458,
"preview": "package cn.iocoder.yudao.framework.datapermission.core.db;\n\nimport cn.iocoder.yudao.framework.datapermission.core.rule.D"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/test/java/cn/iocoder/yudao/framework/datapermission/core/rule/DataPermissionRuleFactoryImplTest.java",
"chars": 4415,
"preview": "package cn.iocoder.yudao.framework.datapermission.core.rule;\n\nimport cn.iocoder.yudao.framework.datapermission.core.anno"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/test/java/cn/iocoder/yudao/framework/datapermission/core/rule/dept/DeptDataPermissionRuleTest.java",
"chars": 11265,
"preview": "package cn.iocoder.yudao.framework.datapermission.core.rule.dept;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn."
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/test/java/cn/iocoder/yudao/framework/datapermission/core/util/DataPermissionUtilsTest.java",
"chars": 439,
"preview": "package cn.iocoder.yudao.framework.datapermission.core.util;\n\nimport cn.iocoder.yudao.framework.datapermission.core.aop."
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-ip/pom.xml",
"chars": 1801,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-ip/src/main/java/cn/iocoder/yudao/framework/ip/core/Area.java",
"chars": 1126,
"preview": "package cn.iocoder.yudao.framework.ip.core;\n\nimport cn.iocoder.yudao.framework.ip.core.enums.AreaTypeEnum;\nimport com.fa"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-ip/src/main/java/cn/iocoder/yudao/framework/ip/core/enums/AreaTypeEnum.java",
"chars": 738,
"preview": "package cn.iocoder.yudao.framework.ip.core.enums;\n\nimport cn.iocoder.yudao.framework.common.core.ArrayValuable;\nimport l"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-ip/src/main/java/cn/iocoder/yudao/framework/ip/core/utils/AreaUtils.java",
"chars": 6139,
"preview": "package cn.iocoder.yudao.framework.ip.core.utils;\n\nimport cn.hutool.core.io.resource.ResourceUtil;\nimport cn.hutool.core"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-ip/src/main/java/cn/iocoder/yudao/framework/ip/core/utils/IPUtils.java",
"chars": 1948,
"preview": "package cn.iocoder.yudao.framework.ip.core.utils;\n\nimport cn.hutool.core.io.resource.ResourceUtil;\nimport cn.iocoder.yud"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-ip/src/main/java/cn/iocoder/yudao/framework/ip/package-info.java",
"chars": 262,
"preview": "/**\n * IP 拓展,支持如下功能:\n *\n * 1. IP 功能:查询 IP 对应的城市信息\n * 基于 https://gitee.com/lionsoul/ip2region 实现\n * 2. 城市功能:查询城市编码对应"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-ip/src/main/resources/area.csv",
"chars": 73206,
"preview": "id,name,type,parentId\n1,中国,1,0\n2,蒙古,1,0\n3,朝鲜,1,0\n4,韩国,1,0\n5,日本,1,0\n6,菲律宾,1,0\n7,越南,1,0\n8,老挝,1,0\n9,柬埔寨,1,0\n10,缅甸,1,0\n11,泰国"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-ip/src/test/java/cn/iocoder/yudao/framework/ip/core/utils/AreaUtilsTest.java",
"chars": 947,
"preview": "package cn.iocoder.yudao.framework.ip.core.utils;\n\n\nimport cn.iocoder.yudao.framework.ip.core.Area;\nimport cn.iocoder.yu"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-ip/src/test/java/cn/iocoder/yudao/framework/ip/core/utils/IPUtilsTest.java",
"chars": 1248,
"preview": "package cn.iocoder.yudao.framework.ip.core.utils;\n\nimport cn.iocoder.yudao.framework.ip.core.Area;\nimport org.junit.jupi"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/pom.xml",
"chars": 3039,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/config/TenantProperties.java",
"chars": 1155,
"preview": "package cn.iocoder.yudao.framework.tenant.config;\n\nimport lombok.Data;\nimport org.springframework.boot.context.propertie"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/config/YudaoTenantAutoConfiguration.java",
"chars": 10779,
"preview": "package cn.iocoder.yudao.framework.tenant.config;\n\nimport cn.hutool.extra.spring.SpringUtil;\nimport cn.iocoder.yudao.fra"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/config/YudaoTenantRpcAutoConfiguration.java",
"chars": 862,
"preview": "package cn.iocoder.yudao.framework.tenant.config;\n\nimport cn.iocoder.yudao.framework.tenant.core.rpc.TenantRequestInterc"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/aop/TenantIgnore.java",
"chars": 806,
"preview": "package cn.iocoder.yudao.framework.tenant.core.aop;\n\nimport cn.iocoder.yudao.framework.tenant.config.TenantProperties;\n\n"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/aop/TenantIgnoreAspect.java",
"chars": 1291,
"preview": "package cn.iocoder.yudao.framework.tenant.core.aop;\n\nimport cn.iocoder.yudao.framework.common.util.spring.SpringExpressi"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/context/TenantContextHolder.java",
"chars": 1467,
"preview": "package cn.iocoder.yudao.framework.tenant.core.context;\n\nimport cn.hutool.core.util.StrUtil;\nimport cn.iocoder.yudao.fra"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/db/TenantBaseDO.java",
"chars": 374,
"preview": "package cn.iocoder.yudao.framework.tenant.core.db;\n\nimport cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;\nim"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/db/TenantDatabaseInterceptor.java",
"chars": 2741,
"preview": "package cn.iocoder.yudao.framework.tenant.core.db;\n\nimport cn.iocoder.yudao.framework.tenant.config.TenantProperties;\nim"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/job/TenantJob.java",
"chars": 335,
"preview": "package cn.iocoder.yudao.framework.tenant.core.job;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotatio"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/job/TenantJobAspect.java",
"chars": 2753,
"preview": "package cn.iocoder.yudao.framework.tenant.core.job;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.hutool.core.ex"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/mq/kafka/TenantKafkaEnvironmentPostProcessor.java",
"chars": 1438,
"preview": "package cn.iocoder.yudao.framework.tenant.core.mq.kafka;\n\nimport cn.hutool.core.util.StrUtil;\nimport lombok.extern.slf4j"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/mq/kafka/TenantKafkaProducerInterceptor.java",
"chars": 1598,
"preview": "package cn.iocoder.yudao.framework.tenant.core.mq.kafka;\n\nimport cn.hutool.core.util.ReflectUtil;\nimport cn.iocoder.yuda"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/mq/rabbitmq/TenantRabbitMQInitializer.java",
"chars": 779,
"preview": "package cn.iocoder.yudao.framework.tenant.core.mq.rabbitmq;\n\nimport org.springframework.amqp.rabbit.core.RabbitTemplate;"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/mq/rabbitmq/TenantRabbitMQMessagePostProcessor.java",
"chars": 1186,
"preview": "package cn.iocoder.yudao.framework.tenant.core.mq.rabbitmq;\n\nimport cn.iocoder.yudao.framework.tenant.core.context.Tenan"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/mq/redis/TenantRedisMessageInterceptor.java",
"chars": 1445,
"preview": "package cn.iocoder.yudao.framework.tenant.core.mq.redis;\n\nimport cn.hutool.core.util.StrUtil;\nimport cn.iocoder.yudao.fr"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/mq/rocketmq/TenantRocketMQConsumeMessageHook.java",
"chars": 1551,
"preview": "package cn.iocoder.yudao.framework.tenant.core.mq.rocketmq;\n\nimport cn.hutool.core.lang.Assert;\nimport cn.hutool.core.ut"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/mq/rocketmq/TenantRocketMQInitializer.java",
"chars": 2057,
"preview": "package cn.iocoder.yudao.framework.tenant.core.mq.rocketmq;\n\nimport org.apache.rocketmq.client.consumer.DefaultMQPushCon"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/mq/rocketmq/TenantRocketMQSendMessageHook.java",
"chars": 1070,
"preview": "package cn.iocoder.yudao.framework.tenant.core.mq.rocketmq;\n\nimport cn.iocoder.yudao.framework.tenant.core.context.Tenan"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/redis/TenantRedisCacheManager.java",
"chars": 1663,
"preview": "package cn.iocoder.yudao.framework.tenant.core.redis;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.hutool.core."
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/rpc/TenantRequestInterceptor.java",
"chars": 810,
"preview": "package cn.iocoder.yudao.framework.tenant.core.rpc;\n\nimport cn.iocoder.yudao.framework.tenant.core.context.TenantContext"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/security/TenantSecurityWebFilter.java",
"chars": 5448,
"preview": "package cn.iocoder.yudao.framework.tenant.core.security;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.iocoder.y"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/service/TenantFrameworkService.java",
"chars": 370,
"preview": "package cn.iocoder.yudao.framework.tenant.core.service;\n\nimport java.util.List;\n\n/**\n * Tenant 框架 Service 接口,定义获取租户信息\n *"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/service/TenantFrameworkServiceImpl.java",
"chars": 1846,
"preview": "package cn.iocoder.yudao.framework.tenant.core.service;\n\nimport cn.iocoder.yudao.framework.common.pojo.CommonResult;\nimp"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/util/TenantUtils.java",
"chars": 2998,
"preview": "package cn.iocoder.yudao.framework.tenant.core.util;\n\nimport cn.iocoder.yudao.framework.tenant.core.context.TenantContex"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/web/TenantContextWebFilter.java",
"chars": 1171,
"preview": "package cn.iocoder.yudao.framework.tenant.core.web;\n\nimport cn.iocoder.yudao.framework.tenant.core.context.TenantContext"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/web/TenantVisitContextInterceptor.java",
"chars": 2527,
"preview": "package cn.iocoder.yudao.framework.tenant.core.web;\n\nimport cn.hutool.core.util.ObjUtil;\nimport cn.iocoder.yudao.framewo"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/package-info.java",
"chars": 830,
"preview": "/**\n * 多租户,支持如下层面:\n * 1. DB:基于 MyBatis Plus 多租户的功能实现。\n * 2. Redis:通过在 Redis Key 上拼接租户编号的方式,进行隔离。\n * 3. Web:请求 HTTP API 时"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/org/springframework/messaging/handler/invocation/InvocableHandlerMethod.java",
"chars": 10371,
"preview": "/*\n * Copyright 2002-2021 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports",
"chars": 143,
"preview": "cn.iocoder.yudao.framework.tenant.config.YudaoTenantRpcAutoConfiguration\ncn.iocoder.yudao.framework.tenant.config.YudaoT"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/resources/META-INF/spring.factories",
"chars": 142,
"preview": "org.springframework.boot.env.EnvironmentPostProcessor=\\\n cn.iocoder.yudao.framework.tenant.core.mq.kafka.TenantKafkaEnv"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-env/pom.xml",
"chars": 2147,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/config/EnvEnvironmentPostProcessor.java",
"chars": 1767,
"preview": "package cn.iocoder.yudao.framework.env.config;\n\nimport cn.hutool.core.util.StrUtil;\nimport cn.iocoder.yudao.framework.co"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/config/EnvProperties.java",
"chars": 377,
"preview": "package cn.iocoder.yudao.framework.env.config;\n\nimport lombok.Data;\nimport org.springframework.boot.context.properties.C"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/config/YudaoEnvRpcAutoConfiguration.java",
"chars": 1838,
"preview": "package cn.iocoder.yudao.framework.env.config;\n\nimport cn.iocoder.yudao.framework.env.core.fegin.EnvLoadBalancerClientFa"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/config/YudaoEnvWebAutoConfiguration.java",
"chars": 1131,
"preview": "package cn.iocoder.yudao.framework.env.config;\n\nimport cn.iocoder.yudao.framework.common.enums.WebFilterOrderEnum;\nimpor"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/core/context/EnvContextHolder.java",
"chars": 848,
"preview": "package cn.iocoder.yudao.framework.env.core.context;\n\nimport cn.hutool.core.collection.CollUtil;\nimport com.alibaba.ttl."
},
{
"path": "yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/core/fegin/EnvLoadBalancerClient.java",
"chars": 4247,
"preview": "package cn.iocoder.yudao.framework.env.core.fegin;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.hutool.core.uti"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/core/fegin/EnvLoadBalancerClientFactory.java",
"chars": 1350,
"preview": "package cn.iocoder.yudao.framework.env.core.fegin;\n\n\nimport org.springframework.cloud.client.ServiceInstance;\nimport org"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/core/fegin/EnvRequestInterceptor.java",
"chars": 682,
"preview": "package cn.iocoder.yudao.framework.env.core.fegin;\n\nimport cn.hutool.core.util.StrUtil;\nimport cn.iocoder.yudao.framewor"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/core/package-info.java",
"chars": 45,
"preview": "package cn.iocoder.yudao.framework.env.core;\n"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/core/util/EnvUtils.java",
"chars": 1619,
"preview": "package cn.iocoder.yudao.framework.env.core.util;\n\nimport cn.iocoder.yudao.framework.env.config.EnvProperties;\nimport fe"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/core/web/EnvWebFilter.java",
"chars": 1219,
"preview": "package cn.iocoder.yudao.framework.env.core.web;\n\nimport cn.hutool.core.util.StrUtil;\nimport cn.iocoder.yudao.framework."
},
{
"path": "yudao-framework/yudao-spring-boot-starter-env/src/main/java/cn/iocoder/yudao/framework/env/package-info.java",
"chars": 142,
"preview": "/**\n * 开发环境拓展,实现类似阿里的特性环境的能力\n * 1. https://segmentfault.com/a/1190000018022987\n *\n * @author 芋道源码\n */\npackage cn.iocoder"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-env/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports",
"chars": 134,
"preview": "cn.iocoder.yudao.framework.env.config.YudaoEnvWebAutoConfiguration\ncn.iocoder.yudao.framework.env.config.YudaoEnvRpcAuto"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-env/src/main/resources/META-INF/spring.factories",
"chars": 126,
"preview": "org.springframework.boot.env.EnvironmentPostProcessor=\\\n cn.iocoder.yudao.framework.env.config.EnvEnvironmentPostProc"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-excel/pom.xml",
"chars": 2511,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/dict/config/YudaoDictAutoConfiguration.java",
"chars": 601,
"preview": "package cn.iocoder.yudao.framework.dict.config;\n\nimport cn.iocoder.yudao.framework.common.biz.system.dict.DictDataCommon"
},
{
"path": "yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/dict/config/YudaoDictRpcAutoConfiguration.java",
"chars": 440,
"preview": "package cn.iocoder.yudao.framework.dict.config;\n\nimport cn.iocoder.yudao.framework.common.biz.system.dict.DictDataCommon"
}
]
// ... and 4360 more files (download for full content)
About this extraction
This page contains the full source code of the YunaiV/yudao-cloud GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 4560 files (18.5 MB), approximately 4.3M tokens, and a symbol index with 12020 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.