Copy disabled (too large)
Download .txt
Showing preview only (18,850K chars total). Download the full file to get everything.
Repository: guchengwuyue/supplierShop
Branch: master
Commit: 020cd5ad4000
Files: 3200
Total size: 31.5 MB
Directory structure:
gitextract_s5ijlxg7/
├── .gitignore
├── LICENSE
├── README.md
├── yshop-drink-boot3/
│ ├── .gitignore
│ ├── README.md
│ ├── lombok.config
│ ├── pom.xml
│ ├── script/
│ │ ├── docker/
│ │ │ ├── Docker-HOWTO.md
│ │ │ ├── docker-compose.yml
│ │ │ └── docker.env
│ │ └── shell/
│ │ └── deploy.sh
│ ├── sql/
│ │ └── yixiang-drink-open.sql
│ ├── yshop-dependencies/
│ │ └── pom.xml
│ ├── yshop-framework/
│ │ ├── pom.xml
│ │ ├── yshop-common/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ └── java/
│ │ │ │ └── co/
│ │ │ │ └── yixiang/
│ │ │ │ └── yshop/
│ │ │ │ └── framework/
│ │ │ │ └── common/
│ │ │ │ ├── constant/
│ │ │ │ │ ├── ShopConstants.java
│ │ │ │ │ └── SystemConfigConstants.java
│ │ │ │ ├── core/
│ │ │ │ │ ├── IntArrayValuable.java
│ │ │ │ │ └── KeyValue.java
│ │ │ │ ├── enums/
│ │ │ │ │ ├── CommonStatusEnum.java
│ │ │ │ │ ├── DateIntervalEnum.java
│ │ │ │ │ ├── DocumentEnum.java
│ │ │ │ │ ├── OrderInfoEnum.java
│ │ │ │ │ ├── OrderTypeEnum.java
│ │ │ │ │ ├── PayIdEnum.java
│ │ │ │ │ ├── ShopCommonEnum.java
│ │ │ │ │ ├── TerminalEnum.java
│ │ │ │ │ ├── UserTypeEnum.java
│ │ │ │ │ └── WebFilterOrderEnum.java
│ │ │ │ ├── exception/
│ │ │ │ │ ├── ErrorCode.java
│ │ │ │ │ ├── ServerException.java
│ │ │ │ │ ├── ServiceException.java
│ │ │ │ │ ├── enums/
│ │ │ │ │ │ ├── GlobalErrorCodeConstants.java
│ │ │ │ │ │ └── ServiceErrorCodeRange.java
│ │ │ │ │ └── util/
│ │ │ │ │ └── ServiceExceptionUtil.java
│ │ │ │ ├── params/
│ │ │ │ │ └── QueryParam.java
│ │ │ │ ├── pojo/
│ │ │ │ │ ├── CommonResult.java
│ │ │ │ │ ├── PageParam.java
│ │ │ │ │ ├── PageResult.java
│ │ │ │ │ ├── SortablePageParam.java
│ │ │ │ │ └── SortingField.java
│ │ │ │ ├── serializer/
│ │ │ │ │ ├── BigDecimalSerializer.java
│ │ │ │ │ └── DoubleSerializer.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
│ │ │ │ │ ├── monitor/
│ │ │ │ │ │ └── TracerUtils.java
│ │ │ │ │ ├── number/
│ │ │ │ │ │ ├── MoneyUtils.java
│ │ │ │ │ │ └── NumberUtils.java
│ │ │ │ │ ├── object/
│ │ │ │ │ │ ├── BeanUtils.java
│ │ │ │ │ │ ├── ObjectUtils.java
│ │ │ │ │ │ └── PageUtils.java
│ │ │ │ │ ├── servlet/
│ │ │ │ │ │ └── ServletUtils.java
│ │ │ │ │ ├── spring/
│ │ │ │ │ │ ├── SpringExpressionUtils.java
│ │ │ │ │ │ └── SpringUtils.java
│ │ │ │ │ ├── string/
│ │ │ │ │ │ └── StrUtils.java
│ │ │ │ │ ├── validation/
│ │ │ │ │ │ └── ValidationUtils.java
│ │ │ │ │ └── yshop/
│ │ │ │ │ └── LocationUtils.java
│ │ │ │ └── validation/
│ │ │ │ ├── InEnum.java
│ │ │ │ ├── InEnumCollectionValidator.java
│ │ │ │ ├── InEnumValidator.java
│ │ │ │ ├── Mobile.java
│ │ │ │ ├── MobileValidator.java
│ │ │ │ ├── Telephone.java
│ │ │ │ ├── TelephoneValidator.java
│ │ │ │ └── package-info.java
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── framework/
│ │ │ └── common/
│ │ │ └── util/
│ │ │ └── collection/
│ │ │ └── CollectionUtilsTest.java
│ │ ├── yshop-spring-boot-starter-biz-data-permission/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── co/
│ │ │ │ │ └── yixiang/
│ │ │ │ │ └── yshop/
│ │ │ │ │ └── framework/
│ │ │ │ │ └── datapermission/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── YshopDataPermissionAutoConfiguration.java
│ │ │ │ │ │ └── YshopDeptDataPermissionAutoConfiguration.java
│ │ │ │ │ └── core/
│ │ │ │ │ ├── annotation/
│ │ │ │ │ │ └── DataPermission.java
│ │ │ │ │ ├── aop/
│ │ │ │ │ │ ├── DataPermissionAnnotationAdvisor.java
│ │ │ │ │ │ ├── DataPermissionAnnotationInterceptor.java
│ │ │ │ │ │ └── DataPermissionContextHolder.java
│ │ │ │ │ ├── db/
│ │ │ │ │ │ └── DataPermissionDatabaseInterceptor.java
│ │ │ │ │ ├── rule/
│ │ │ │ │ │ ├── DataPermissionRule.java
│ │ │ │ │ │ ├── DataPermissionRuleFactory.java
│ │ │ │ │ │ ├── DataPermissionRuleFactoryImpl.java
│ │ │ │ │ │ └── dept/
│ │ │ │ │ │ ├── DeptDataPermissionRule.java
│ │ │ │ │ │ ├── DeptDataPermissionRuleCustomizer.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ └── util/
│ │ │ │ │ └── DataPermissionUtils.java
│ │ │ │ └── resources/
│ │ │ │ └── META-INF/
│ │ │ │ └── spring/
│ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── framework/
│ │ │ └── datapermission/
│ │ │ └── core/
│ │ │ ├── aop/
│ │ │ │ ├── DataPermissionAnnotationInterceptorTest.java
│ │ │ │ └── DataPermissionContextHolderTest.java
│ │ │ ├── db/
│ │ │ │ ├── DataPermissionDatabaseInterceptorTest.java
│ │ │ │ └── DataPermissionDatabaseInterceptorTest2.java
│ │ │ ├── rule/
│ │ │ │ ├── DataPermissionRuleFactoryImplTest.java
│ │ │ │ └── dept/
│ │ │ │ └── DeptDataPermissionRuleTest.java
│ │ │ └── util/
│ │ │ └── DataPermissionUtilsTest.java
│ │ ├── yshop-spring-boot-starter-biz-ip/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── co/
│ │ │ │ │ └── yixiang/
│ │ │ │ │ └── yshop/
│ │ │ │ │ └── framework/
│ │ │ │ │ └── ip/
│ │ │ │ │ └── core/
│ │ │ │ │ ├── Area.java
│ │ │ │ │ ├── enums/
│ │ │ │ │ │ └── AreaTypeEnum.java
│ │ │ │ │ └── utils/
│ │ │ │ │ ├── AreaUtils.java
│ │ │ │ │ └── IPUtils.java
│ │ │ │ └── resources/
│ │ │ │ ├── area.csv
│ │ │ │ └── ip2region.xdb
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── framework/
│ │ │ └── ip/
│ │ │ └── core/
│ │ │ └── utils/
│ │ │ ├── AreaUtilsTest.java
│ │ │ └── IPUtilsTest.java
│ │ ├── yshop-spring-boot-starter-biz-tenant/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ ├── co/
│ │ │ │ │ └── yixiang/
│ │ │ │ │ └── yshop/
│ │ │ │ │ └── framework/
│ │ │ │ │ └── tenant/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── TenantProperties.java
│ │ │ │ │ │ └── YshopTenantAutoConfiguration.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
│ │ │ │ │ ├── security/
│ │ │ │ │ │ └── TenantSecurityWebFilter.java
│ │ │ │ │ ├── service/
│ │ │ │ │ │ ├── TenantFrameworkService.java
│ │ │ │ │ │ └── TenantFrameworkServiceImpl.java
│ │ │ │ │ ├── util/
│ │ │ │ │ │ └── TenantUtils.java
│ │ │ │ │ └── web/
│ │ │ │ │ └── TenantContextWebFilter.java
│ │ │ │ └── org/
│ │ │ │ └── springframework/
│ │ │ │ └── messaging/
│ │ │ │ └── handler/
│ │ │ │ └── invocation/
│ │ │ │ └── InvocableHandlerMethod.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ ├── spring/
│ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ │ └── spring.factories
│ │ ├── yshop-spring-boot-starter-excel/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── co/
│ │ │ │ │ └── yixiang/
│ │ │ │ │ └── yshop/
│ │ │ │ │ └── framework/
│ │ │ │ │ ├── dict/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── YshopDictAutoConfiguration.java
│ │ │ │ │ │ └── core/
│ │ │ │ │ │ └── DictFrameworkUtils.java
│ │ │ │ │ └── excel/
│ │ │ │ │ └── core/
│ │ │ │ │ ├── annotations/
│ │ │ │ │ │ ├── DictFormat.java
│ │ │ │ │ │ └── ExcelColumnSelect.java
│ │ │ │ │ ├── convert/
│ │ │ │ │ │ ├── AreaConvert.java
│ │ │ │ │ │ ├── DictConvert.java
│ │ │ │ │ │ ├── JsonConvert.java
│ │ │ │ │ │ └── MoneyConvert.java
│ │ │ │ │ ├── function/
│ │ │ │ │ │ └── ExcelColumnSelectFunction.java
│ │ │ │ │ ├── handler/
│ │ │ │ │ │ └── SelectSheetWriteHandler.java
│ │ │ │ │ └── util/
│ │ │ │ │ └── ExcelUtils.java
│ │ │ │ └── resources/
│ │ │ │ └── META-INF/
│ │ │ │ └── spring/
│ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── framework/
│ │ │ └── dict/
│ │ │ └── core/
│ │ │ └── util/
│ │ │ └── DictFrameworkUtilsTest.java
│ │ ├── yshop-spring-boot-starter-job/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── co/
│ │ │ │ └── yixiang/
│ │ │ │ └── yshop/
│ │ │ │ └── framework/
│ │ │ │ └── quartz/
│ │ │ │ ├── config/
│ │ │ │ │ ├── YshopAsyncAutoConfiguration.java
│ │ │ │ │ └── YshopQuartzAutoConfiguration.java
│ │ │ │ └── core/
│ │ │ │ ├── enums/
│ │ │ │ │ └── JobDataKeyEnum.java
│ │ │ │ ├── handler/
│ │ │ │ │ ├── JobHandler.java
│ │ │ │ │ └── JobHandlerInvoker.java
│ │ │ │ ├── scheduler/
│ │ │ │ │ └── SchedulerManager.java
│ │ │ │ ├── service/
│ │ │ │ │ └── JobLogFrameworkService.java
│ │ │ │ └── util/
│ │ │ │ └── CronUtils.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ ├── yshop-spring-boot-starter-monitor/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── co/
│ │ │ │ └── yixiang/
│ │ │ │ └── yshop/
│ │ │ │ └── framework/
│ │ │ │ └── tracer/
│ │ │ │ ├── config/
│ │ │ │ │ ├── TracerProperties.java
│ │ │ │ │ ├── YshopMetricsAutoConfiguration.java
│ │ │ │ │ └── YshopTracerAutoConfiguration.java
│ │ │ │ └── core/
│ │ │ │ ├── annotation/
│ │ │ │ │ └── BizTrace.java
│ │ │ │ ├── aop/
│ │ │ │ │ └── BizTraceAspect.java
│ │ │ │ ├── filter/
│ │ │ │ │ └── TraceFilter.java
│ │ │ │ └── util/
│ │ │ │ └── TracerFrameworkUtils.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ ├── yshop-spring-boot-starter-mq/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── co/
│ │ │ │ └── yixiang/
│ │ │ │ └── yshop/
│ │ │ │ └── framework/
│ │ │ │ └── mq/
│ │ │ │ ├── rabbitmq/
│ │ │ │ │ └── config/
│ │ │ │ │ └── YshopRabbitMQAutoConfiguration.java
│ │ │ │ └── redis/
│ │ │ │ ├── config/
│ │ │ │ │ ├── YshopRedisMQConsumerAutoConfiguration.java
│ │ │ │ │ └── YshopRedisMQProducerAutoConfiguration.java
│ │ │ │ └── core/
│ │ │ │ ├── RedisMQTemplate.java
│ │ │ │ ├── interceptor/
│ │ │ │ │ └── RedisMessageInterceptor.java
│ │ │ │ ├── job/
│ │ │ │ │ └── RedisPendingMessageResendJob.java
│ │ │ │ ├── message/
│ │ │ │ │ └── AbstractRedisMessage.java
│ │ │ │ ├── pubsub/
│ │ │ │ │ ├── AbstractRedisChannelMessage.java
│ │ │ │ │ └── AbstractRedisChannelMessageListener.java
│ │ │ │ └── stream/
│ │ │ │ ├── AbstractRedisStreamMessage.java
│ │ │ │ └── AbstractRedisStreamMessageListener.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ ├── yshop-spring-boot-starter-mybatis/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── co/
│ │ │ │ └── yixiang/
│ │ │ │ └── yshop/
│ │ │ │ └── framework/
│ │ │ │ ├── datasource/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── YshopDataSourceAutoConfiguration.java
│ │ │ │ │ └── core/
│ │ │ │ │ ├── enums/
│ │ │ │ │ │ └── DataSourceEnum.java
│ │ │ │ │ └── filter/
│ │ │ │ │ └── DruidAdRemoveFilter.java
│ │ │ │ ├── mybatis/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── IdTypeEnvironmentPostProcessor.java
│ │ │ │ │ │ └── YshopMybatisAutoConfiguration.java
│ │ │ │ │ └── core/
│ │ │ │ │ ├── dataobject/
│ │ │ │ │ │ └── BaseDO.java
│ │ │ │ │ ├── enums/
│ │ │ │ │ │ └── SqlConstants.java
│ │ │ │ │ ├── handler/
│ │ │ │ │ │ └── DefaultDBFieldHandler.java
│ │ │ │ │ ├── mapper/
│ │ │ │ │ │ └── BaseMapperX.java
│ │ │ │ │ ├── query/
│ │ │ │ │ │ ├── LambdaQueryWrapperX.java
│ │ │ │ │ │ ├── MPJLambdaWrapperX.java
│ │ │ │ │ │ └── QueryWrapperX.java
│ │ │ │ │ ├── type/
│ │ │ │ │ │ ├── EncryptTypeHandler.java
│ │ │ │ │ │ ├── IntegerListTypeHandler.java
│ │ │ │ │ │ ├── JsonLongSetTypeHandler.java
│ │ │ │ │ │ ├── LongListTypeHandler.java
│ │ │ │ │ │ └── StringListTypeHandler.java
│ │ │ │ │ └── util/
│ │ │ │ │ ├── JdbcUtils.java
│ │ │ │ │ └── MyBatisUtils.java
│ │ │ │ └── translate/
│ │ │ │ ├── config/
│ │ │ │ │ └── YshopTranslateAutoConfiguration.java
│ │ │ │ └── core/
│ │ │ │ └── TranslateUtils.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ ├── spring/
│ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ │ └── spring.factories
│ │ ├── yshop-spring-boot-starter-protection/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── co/
│ │ │ │ └── yixiang/
│ │ │ │ └── yshop/
│ │ │ │ └── framework/
│ │ │ │ ├── idempotent/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── YshopIdempotentConfiguration.java
│ │ │ │ │ └── core/
│ │ │ │ │ ├── annotation/
│ │ │ │ │ │ └── Idempotent.java
│ │ │ │ │ ├── aop/
│ │ │ │ │ │ └── IdempotentAspect.java
│ │ │ │ │ ├── keyresolver/
│ │ │ │ │ │ ├── IdempotentKeyResolver.java
│ │ │ │ │ │ └── impl/
│ │ │ │ │ │ ├── DefaultIdempotentKeyResolver.java
│ │ │ │ │ │ ├── ExpressionIdempotentKeyResolver.java
│ │ │ │ │ │ └── UserIdempotentKeyResolver.java
│ │ │ │ │ └── redis/
│ │ │ │ │ └── IdempotentRedisDAO.java
│ │ │ │ ├── lock4j/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── YshopLock4jConfiguration.java
│ │ │ │ │ └── core/
│ │ │ │ │ ├── DefaultLockFailureStrategy.java
│ │ │ │ │ └── Lock4jRedisKeyConstants.java
│ │ │ │ └── ratelimiter/
│ │ │ │ ├── config/
│ │ │ │ │ └── YshopRateLimiterConfiguration.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
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ ├── yshop-spring-boot-starter-redis/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── co/
│ │ │ │ └── yixiang/
│ │ │ │ └── yshop/
│ │ │ │ └── framework/
│ │ │ │ └── redis/
│ │ │ │ ├── config/
│ │ │ │ │ ├── RedissonConfig.java
│ │ │ │ │ ├── YshopCacheAutoConfiguration.java
│ │ │ │ │ ├── YshopCacheProperties.java
│ │ │ │ │ └── YshopRedisAutoConfiguration.java
│ │ │ │ ├── core/
│ │ │ │ │ ├── RedisKeyDefine.java
│ │ │ │ │ ├── RedisKeyRegistry.java
│ │ │ │ │ └── TimeoutRedisCacheManager.java
│ │ │ │ └── util/
│ │ │ │ └── redis/
│ │ │ │ └── RedisUtil.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ ├── yshop-spring-boot-starter-security/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── co/
│ │ │ │ └── yixiang/
│ │ │ │ └── yshop/
│ │ │ │ └── framework/
│ │ │ │ ├── operatelog/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── YshopOperateLogConfiguration.java
│ │ │ │ │ └── core/
│ │ │ │ │ └── service/
│ │ │ │ │ └── LogRecordServiceImpl.java
│ │ │ │ └── security/
│ │ │ │ ├── config/
│ │ │ │ │ ├── AuthorizeRequestsCustomizer.java
│ │ │ │ │ ├── SecurityProperties.java
│ │ │ │ │ ├── YshopSecurityAutoConfiguration.java
│ │ │ │ │ └── YshopWebSecurityConfigurerAdapter.java
│ │ │ │ └── core/
│ │ │ │ ├── LoginUser.java
│ │ │ │ ├── annotations/
│ │ │ │ │ └── PreAuthenticated.java
│ │ │ │ ├── aop/
│ │ │ │ │ └── PreAuthenticatedAspect.java
│ │ │ │ ├── context/
│ │ │ │ │ └── TransmittableThreadLocalSecurityContextHolderStrategy.java
│ │ │ │ ├── filter/
│ │ │ │ │ └── TokenAuthenticationFilter.java
│ │ │ │ ├── handler/
│ │ │ │ │ ├── AccessDeniedHandlerImpl.java
│ │ │ │ │ └── AuthenticationEntryPointImpl.java
│ │ │ │ ├── service/
│ │ │ │ │ ├── SecurityFrameworkService.java
│ │ │ │ │ └── SecurityFrameworkServiceImpl.java
│ │ │ │ └── util/
│ │ │ │ └── SecurityFrameworkUtils.java
│ │ │ └── resources/
│ │ │ └── META-INF/
│ │ │ └── spring/
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ ├── yshop-spring-boot-starter-test/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── framework/
│ │ │ └── test/
│ │ │ ├── config/
│ │ │ │ ├── RedisTestConfiguration.java
│ │ │ │ └── SqlInitializationTestConfiguration.java
│ │ │ └── core/
│ │ │ ├── ut/
│ │ │ │ ├── BaseDbAndRedisUnitTest.java
│ │ │ │ ├── BaseDbUnitTest.java
│ │ │ │ ├── BaseMockitoUnitTest.java
│ │ │ │ └── BaseRedisUnitTest.java
│ │ │ └── util/
│ │ │ ├── AssertUtils.java
│ │ │ └── RandomUtils.java
│ │ ├── yshop-spring-boot-starter-web/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── co/
│ │ │ │ │ └── yixiang/
│ │ │ │ │ └── yshop/
│ │ │ │ │ └── framework/
│ │ │ │ │ ├── apilog/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── YshopApiLogAutoConfiguration.java
│ │ │ │ │ │ └── core/
│ │ │ │ │ │ ├── annotation/
│ │ │ │ │ │ │ └── ApiAccessLog.java
│ │ │ │ │ │ ├── enums/
│ │ │ │ │ │ │ └── OperateTypeEnum.java
│ │ │ │ │ │ ├── filter/
│ │ │ │ │ │ │ └── ApiAccessLogFilter.java
│ │ │ │ │ │ ├── interceptor/
│ │ │ │ │ │ │ └── ApiAccessLogInterceptor.java
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ ├── ApiAccessLogFrameworkService.java
│ │ │ │ │ │ ├── ApiAccessLogFrameworkServiceImpl.java
│ │ │ │ │ │ ├── ApiErrorLogFrameworkService.java
│ │ │ │ │ │ └── ApiErrorLogFrameworkServiceImpl.java
│ │ │ │ │ ├── banner/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── YshopBannerAutoConfiguration.java
│ │ │ │ │ │ └── core/
│ │ │ │ │ │ └── BannerApplicationRunner.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
│ │ │ │ │ ├── jackson/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── YshopJacksonAutoConfiguration.java
│ │ │ │ │ │ └── core/
│ │ │ │ │ │ └── databind/
│ │ │ │ │ │ ├── NumberSerializer.java
│ │ │ │ │ │ ├── TimestampLocalDateTimeDeserializer.java
│ │ │ │ │ │ └── TimestampLocalDateTimeSerializer.java
│ │ │ │ │ ├── swagger/
│ │ │ │ │ │ └── config/
│ │ │ │ │ │ ├── SwaggerProperties.java
│ │ │ │ │ │ └── YshopSwaggerAutoConfiguration.java
│ │ │ │ │ ├── web/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── WebProperties.java
│ │ │ │ │ │ │ └── YshopWebAutoConfiguration.java
│ │ │ │ │ │ └── core/
│ │ │ │ │ │ ├── filter/
│ │ │ │ │ │ │ ├── ApiRequestFilter.java
│ │ │ │ │ │ │ ├── CacheRequestBodyFilter.java
│ │ │ │ │ │ │ ├── CacheRequestBodyWrapper.java
│ │ │ │ │ │ │ └── DemoFilter.java
│ │ │ │ │ │ ├── handler/
│ │ │ │ │ │ │ ├── GlobalExceptionHandler.java
│ │ │ │ │ │ │ └── GlobalResponseBodyHandler.java
│ │ │ │ │ │ └── util/
│ │ │ │ │ │ └── WebFrameworkUtils.java
│ │ │ │ │ └── xss/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ ├── XssProperties.java
│ │ │ │ │ │ └── YshopXssAutoConfiguration.java
│ │ │ │ │ └── core/
│ │ │ │ │ ├── clean/
│ │ │ │ │ │ ├── JsoupXssCleaner.java
│ │ │ │ │ │ └── XssCleaner.java
│ │ │ │ │ ├── filter/
│ │ │ │ │ │ ├── XssFilter.java
│ │ │ │ │ │ └── XssRequestWrapper.java
│ │ │ │ │ └── json/
│ │ │ │ │ └── XssStringJsonDeserializer.java
│ │ │ │ └── resources/
│ │ │ │ ├── META-INF/
│ │ │ │ │ └── spring/
│ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ │ │ └── banner.txt
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── framework/
│ │ │ └── desensitize/
│ │ │ └── core/
│ │ │ ├── DesensitizeTest.java
│ │ │ ├── annotation/
│ │ │ │ └── Address.java
│ │ │ └── handler/
│ │ │ └── AddressHandler.java
│ │ └── yshop-spring-boot-starter-websocket/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── framework/
│ │ │ └── websocket/
│ │ │ ├── config/
│ │ │ │ ├── WebSocketProperties.java
│ │ │ │ └── YshopWebSocketAutoConfiguration.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
│ │ └── resources/
│ │ └── META-INF/
│ │ └── spring/
│ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ ├── yshop-module-express/
│ │ ├── pom.xml
│ │ ├── yshop-module-express-api/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── module/
│ │ │ └── express/
│ │ │ ├── enums/
│ │ │ │ └── ErrorCodeConstants.java
│ │ │ └── kdniao/
│ │ │ ├── enums/
│ │ │ │ ├── KdniaoLogisticsCodeEnum.java
│ │ │ │ └── KdniaoLogisticsStatusEnum.java
│ │ │ ├── model/
│ │ │ │ ├── dto/
│ │ │ │ │ ├── KdniaoApiBaseDTO.java
│ │ │ │ │ ├── KdniaoApiDTO.java
│ │ │ │ │ ├── KdniaoElectronicsOrderDTO.java
│ │ │ │ │ └── KdniaoElectronicsOrderGoodsDTO.java
│ │ │ │ └── vo/
│ │ │ │ ├── KdniaoApiVO.java
│ │ │ │ ├── KdniaoLogisticsVO.java
│ │ │ │ └── KdniaoOrderVO.java
│ │ │ └── util/
│ │ │ └── KdniaoUtil.java
│ │ └── yshop-module-express-biz/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── co/
│ │ └── yixiang/
│ │ └── yshop/
│ │ └── module/
│ │ └── express/
│ │ ├── controller/
│ │ │ ├── admin/
│ │ │ │ └── express/
│ │ │ │ ├── ExpressController.java
│ │ │ │ └── vo/
│ │ │ │ ├── ExpressBaseVO.java
│ │ │ │ ├── ExpressCreateReqVO.java
│ │ │ │ ├── ExpressExcelVO.java
│ │ │ │ ├── ExpressExportReqVO.java
│ │ │ │ ├── ExpressPageReqVO.java
│ │ │ │ ├── ExpressRespVO.java
│ │ │ │ └── ExpressUpdateReqVO.java
│ │ │ └── app/
│ │ │ └── express/
│ │ │ └── AppExpressController.java
│ │ ├── convert/
│ │ │ └── express/
│ │ │ └── ExpressConvert.java
│ │ ├── dal/
│ │ │ ├── dataobject/
│ │ │ │ └── express/
│ │ │ │ └── ExpressDO.java
│ │ │ ├── mysql/
│ │ │ │ └── express/
│ │ │ │ └── ExpressMapper.java
│ │ │ └── redis/
│ │ │ ├── RedisKeyConstants.java
│ │ │ └── express/
│ │ │ └── ExpressRedisDAO.java
│ │ └── service/
│ │ └── express/
│ │ ├── ExpressService.java
│ │ └── ExpressServiceImpl.java
│ ├── yshop-module-infra/
│ │ ├── pom.xml
│ │ ├── yshop-module-infra-api/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── module/
│ │ │ └── infra/
│ │ │ ├── api/
│ │ │ │ ├── file/
│ │ │ │ │ └── FileApi.java
│ │ │ │ ├── logger/
│ │ │ │ │ ├── ApiAccessLogApi.java
│ │ │ │ │ ├── ApiErrorLogApi.java
│ │ │ │ │ └── dto/
│ │ │ │ │ ├── ApiAccessLogCreateReqDTO.java
│ │ │ │ │ └── ApiErrorLogCreateReqDTO.java
│ │ │ │ └── websocket/
│ │ │ │ └── WebSocketSenderApi.java
│ │ │ └── enums/
│ │ │ ├── DictTypeConstants.java
│ │ │ └── ErrorCodeConstants.java
│ │ └── yshop-module-infra-biz/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── module/
│ │ │ └── infra/
│ │ │ ├── api/
│ │ │ │ ├── file/
│ │ │ │ │ └── FileApiImpl.java
│ │ │ │ ├── logger/
│ │ │ │ │ ├── ApiAccessLogApiImpl.java
│ │ │ │ │ └── ApiErrorLogApiImpl.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/
│ │ │ │ │ │ ├── Demo03StudentController.java
│ │ │ │ │ │ ├── package-info.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── Demo03StudentPageReqVO.java
│ │ │ │ │ │ ├── Demo03StudentRespVO.java
│ │ │ │ │ │ └── Demo03StudentSaveReqVO.java
│ │ │ │ │ ├── file/
│ │ │ │ │ │ ├── FileConfigController.java
│ │ │ │ │ │ ├── FileController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ ├── FileConfigPageReqVO.java
│ │ │ │ │ │ │ ├── FileConfigRespVO.java
│ │ │ │ │ │ │ └── FileConfigSaveReqVO.java
│ │ │ │ │ │ └── file/
│ │ │ │ │ │ ├── FileCreateReqVO.java
│ │ │ │ │ │ ├── FilePageReqVO.java
│ │ │ │ │ │ ├── FilePresignedUrlRespVO.java
│ │ │ │ │ │ ├── FileRespVO.java
│ │ │ │ │ │ └── FileUploadReqVO.java
│ │ │ │ │ ├── job/
│ │ │ │ │ │ ├── JobController.http
│ │ │ │ │ │ ├── JobController.java
│ │ │ │ │ │ ├── JobLogController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── job/
│ │ │ │ │ │ │ ├── JobPageReqVO.java
│ │ │ │ │ │ │ ├── JobRespVO.java
│ │ │ │ │ │ │ └── JobSaveReqVO.java
│ │ │ │ │ │ └── log/
│ │ │ │ │ │ ├── JobLogPageReqVO.java
│ │ │ │ │ │ └── JobLogRespVO.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
│ │ │ ├── convert/
│ │ │ │ ├── codegen/
│ │ │ │ │ └── CodegenConvert.java
│ │ │ │ ├── config/
│ │ │ │ │ └── ConfigConvert.java
│ │ │ │ ├── file/
│ │ │ │ │ └── FileConfigConvert.java
│ │ │ │ └── redis/
│ │ │ │ └── RedisConvert.java
│ │ │ ├── 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
│ │ │ │ │ ├── job/
│ │ │ │ │ │ ├── JobDO.java
│ │ │ │ │ │ └── JobLogDO.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/
│ │ │ │ │ ├── Demo03CourseMapper.java
│ │ │ │ │ ├── Demo03GradeMapper.java
│ │ │ │ │ └── Demo03StudentMapper.java
│ │ │ │ ├── file/
│ │ │ │ │ ├── FileConfigMapper.java
│ │ │ │ │ ├── FileContentMapper.java
│ │ │ │ │ └── FileMapper.java
│ │ │ │ ├── job/
│ │ │ │ │ ├── JobLogMapper.java
│ │ │ │ │ └── JobMapper.java
│ │ │ │ └── logger/
│ │ │ │ ├── ApiAccessLogMapper.java
│ │ │ │ └── ApiErrorLogMapper.java
│ │ │ ├── enums/
│ │ │ │ ├── codegen/
│ │ │ │ │ ├── CodegenColumnHtmlTypeEnum.java
│ │ │ │ │ ├── CodegenColumnListConditionEnum.java
│ │ │ │ │ ├── CodegenFrontTypeEnum.java
│ │ │ │ │ ├── CodegenSceneEnum.java
│ │ │ │ │ └── CodegenTemplateTypeEnum.java
│ │ │ │ ├── config/
│ │ │ │ │ └── ConfigTypeEnum.java
│ │ │ │ ├── job/
│ │ │ │ │ ├── JobLogStatusEnum.java
│ │ │ │ │ └── JobStatusEnum.java
│ │ │ │ └── logger/
│ │ │ │ └── ApiErrorLogProcessStatusEnum.java
│ │ │ ├── framework/
│ │ │ │ ├── codegen/
│ │ │ │ │ └── config/
│ │ │ │ │ ├── CodegenConfiguration.java
│ │ │ │ │ └── CodegenProperties.java
│ │ │ │ ├── file/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── YshopFileAutoConfiguration.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/
│ │ │ │ │ │ │ ├── FilePresignedUrlRespDTO.java
│ │ │ │ │ │ │ ├── S3FileClient.java
│ │ │ │ │ │ │ └── S3FileClientConfig.java
│ │ │ │ │ │ └── sftp/
│ │ │ │ │ │ ├── SftpFileClient.java
│ │ │ │ │ │ └── SftpFileClientConfig.java
│ │ │ │ │ ├── enums/
│ │ │ │ │ │ └── FileStorageEnum.java
│ │ │ │ │ └── utils/
│ │ │ │ │ └── FileTypeUtils.java
│ │ │ │ ├── monitor/
│ │ │ │ │ └── config/
│ │ │ │ │ └── AdminServerConfiguration.java
│ │ │ │ ├── security/
│ │ │ │ │ └── config/
│ │ │ │ │ └── SecurityConfiguration.java
│ │ │ │ └── web/
│ │ │ │ └── config/
│ │ │ │ └── InfraWebConfiguration.java
│ │ │ ├── job/
│ │ │ │ ├── job/
│ │ │ │ │ └── JobLogCleanJob.java
│ │ │ │ └── logger/
│ │ │ │ ├── AccessLogCleanJob.java
│ │ │ │ └── ErrorLogCleanJob.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/
│ │ │ │ │ ├── Demo03StudentService.java
│ │ │ │ │ └── Demo03StudentServiceImpl.java
│ │ │ │ ├── file/
│ │ │ │ │ ├── FileConfigService.java
│ │ │ │ │ ├── FileConfigServiceImpl.java
│ │ │ │ │ ├── FileService.java
│ │ │ │ │ └── FileServiceImpl.java
│ │ │ │ ├── job/
│ │ │ │ │ ├── JobLogService.java
│ │ │ │ │ ├── JobLogServiceImpl.java
│ │ │ │ │ ├── JobService.java
│ │ │ │ │ └── JobServiceImpl.java
│ │ │ │ └── logger/
│ │ │ │ ├── ApiAccessLogService.java
│ │ │ │ ├── ApiAccessLogServiceImpl.java
│ │ │ │ ├── ApiErrorLogService.java
│ │ │ │ └── ApiErrorLogServiceImpl.java
│ │ │ └── websocket/
│ │ │ ├── DemoWebSocketMessageListener.java
│ │ │ └── message/
│ │ │ ├── DemoReceiveMessage.java
│ │ │ └── DemoSendMessage.java
│ │ └── resources/
│ │ └── 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_schema/
│ │ │ ├── api/
│ │ │ │ └── api.ts.vm
│ │ │ └── views/
│ │ │ ├── data.ts.vm
│ │ │ ├── form.vue.vm
│ │ │ └── index.vue.vm
│ │ └── vue3_vben/
│ │ ├── api/
│ │ │ └── api.ts.vm
│ │ └── views/
│ │ ├── data.ts.vm
│ │ ├── form.vue.vm
│ │ └── index.vue.vm
│ ├── yshop-module-mall/
│ │ ├── pom.xml
│ │ ├── yshop-module-order-api/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── module/
│ │ │ └── order/
│ │ │ └── enums/
│ │ │ ├── AdminAfterOrderStatusEnum.java
│ │ │ ├── AdminOrderStatusEnum.java
│ │ │ ├── AfterChangeTypeEnum.java
│ │ │ ├── AfterSalesStatusEnum.java
│ │ │ ├── AfterStatusEnum.java
│ │ │ ├── AfterTypeEnum.java
│ │ │ ├── AppFromEnum.java
│ │ │ ├── ErrorCodeConstants.java
│ │ │ ├── OrderLogEnum.java
│ │ │ ├── OrderStatusEnum.java
│ │ │ ├── PayTypeEnum.java
│ │ │ ├── ShippingTempEnum.java
│ │ │ └── UpdateOrderEnum.java
│ │ ├── yshop-module-order-biz/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── co/
│ │ │ │ └── yixiang/
│ │ │ │ └── yshop/
│ │ │ │ └── module/
│ │ │ │ └── order/
│ │ │ │ ├── controller/
│ │ │ │ │ ├── admin/
│ │ │ │ │ │ └── storeorder/
│ │ │ │ │ │ ├── StoreOrderController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── ShoperOrderTimeDataVo.java
│ │ │ │ │ │ ├── StoreOrderBaseVO.java
│ │ │ │ │ │ ├── StoreOrderCreateReqVO.java
│ │ │ │ │ │ ├── StoreOrderExcelVO.java
│ │ │ │ │ │ ├── StoreOrderExportReqVO.java
│ │ │ │ │ │ ├── StoreOrderPageReqVO.java
│ │ │ │ │ │ ├── StoreOrderRefundVO.java
│ │ │ │ │ │ ├── StoreOrderRespVO.java
│ │ │ │ │ │ └── StoreOrderUpdateReqVO.java
│ │ │ │ │ └── app/
│ │ │ │ │ └── order/
│ │ │ │ │ ├── AppOrderController.java
│ │ │ │ │ ├── param/
│ │ │ │ │ │ ├── AppComputeOrderParam.java
│ │ │ │ │ │ ├── AppConfirmOrderParam.java
│ │ │ │ │ │ ├── AppDoOrderParam.java
│ │ │ │ │ │ ├── AppExpressParam.java
│ │ │ │ │ │ ├── AppHandleOrderParam.java
│ │ │ │ │ │ ├── AppOrderParam.java
│ │ │ │ │ │ ├── AppPayParam.java
│ │ │ │ │ │ ├── AppProductReplyParam.java
│ │ │ │ │ │ └── AppRefundParam.java
│ │ │ │ │ └── vo/
│ │ │ │ │ ├── AppComputeVo.java
│ │ │ │ │ ├── AppConfirmOrderVo.java
│ │ │ │ │ └── AppStoreOrderQueryVo.java
│ │ │ │ ├── convert/
│ │ │ │ │ ├── storeorder/
│ │ │ │ │ │ └── StoreOrderConvert.java
│ │ │ │ │ ├── storeordercartinfo/
│ │ │ │ │ │ └── StoreOrderCartInfoConvert.java
│ │ │ │ │ └── storeorderstatus/
│ │ │ │ │ └── StoreOrderStatusConvert.java
│ │ │ │ ├── dal/
│ │ │ │ │ ├── dataobject/
│ │ │ │ │ │ ├── ordernumber/
│ │ │ │ │ │ │ └── OrderNumberDO.java
│ │ │ │ │ │ ├── storeorder/
│ │ │ │ │ │ │ └── StoreOrderDO.java
│ │ │ │ │ │ ├── storeordercartinfo/
│ │ │ │ │ │ │ └── StoreOrderCartInfoDO.java
│ │ │ │ │ │ └── storeorderstatus/
│ │ │ │ │ │ └── StoreOrderStatusDO.java
│ │ │ │ │ ├── mysql/
│ │ │ │ │ │ ├── ordernumber/
│ │ │ │ │ │ │ └── OrderNumberMapper.java
│ │ │ │ │ │ ├── storeorder/
│ │ │ │ │ │ │ └── StoreOrderMapper.java
│ │ │ │ │ │ ├── storeordercartinfo/
│ │ │ │ │ │ │ └── StoreOrderCartInfoMapper.java
│ │ │ │ │ │ └── storeorderstatus/
│ │ │ │ │ │ └── StoreOrderStatusMapper.java
│ │ │ │ │ └── redis/
│ │ │ │ │ ├── RedisKeyConstants.java
│ │ │ │ │ ├── ofterorder/
│ │ │ │ │ │ └── AfterOrderRedisDAO.java
│ │ │ │ │ └── order/
│ │ │ │ │ ├── AsyncCountRedisDAO.java
│ │ │ │ │ ├── AsyncOrderRedisDAO.java
│ │ │ │ │ ├── OrderRedisDAO.java
│ │ │ │ │ └── PrintMechinRedisDAO.java
│ │ │ │ ├── handle/
│ │ │ │ │ ├── OrderAutoConfirmListener.java
│ │ │ │ │ ├── OrderUnPayListener.java
│ │ │ │ │ └── RedisDelayHandle.java
│ │ │ │ ├── mq/
│ │ │ │ │ └── consumer/
│ │ │ │ │ └── PayNoticeConsumer.java
│ │ │ │ └── service/
│ │ │ │ ├── storeorder/
│ │ │ │ │ ├── AppStoreOrderService.java
│ │ │ │ │ ├── AppStoreOrderServiceImpl.java
│ │ │ │ │ ├── AsynStoreOrderServiceImpl.java
│ │ │ │ │ ├── AsyncStoreOrderService.java
│ │ │ │ │ ├── StoreOrderService.java
│ │ │ │ │ ├── StoreOrderServiceImpl.java
│ │ │ │ │ └── dto/
│ │ │ │ │ ├── CacheDto.java
│ │ │ │ │ ├── ChartDataDto.java
│ │ │ │ │ ├── CountDto.java
│ │ │ │ │ ├── OrderCountDto.java
│ │ │ │ │ ├── OrderExtendDto.java
│ │ │ │ │ ├── OrderTimeDataDto.java
│ │ │ │ │ ├── OtherDto.java
│ │ │ │ │ ├── PriceGroupDto.java
│ │ │ │ │ ├── ProductAttrDto.java
│ │ │ │ │ ├── ProductDto.java
│ │ │ │ │ ├── StatusDto.java
│ │ │ │ │ ├── StoreOrderCartInfoDto.java
│ │ │ │ │ ├── TemplateDto.java
│ │ │ │ │ ├── YxExpressDto.java
│ │ │ │ │ ├── YxOrderNowOrderStatusDto.java
│ │ │ │ │ ├── YxStoreOrderCartInfoDto.java
│ │ │ │ │ └── YxStoreOrderStatusDto.java
│ │ │ │ ├── storeordercartinfo/
│ │ │ │ │ ├── StoreOrderCartInfoService.java
│ │ │ │ │ └── StoreOrderCartInfoServiceImpl.java
│ │ │ │ └── storeorderstatus/
│ │ │ │ ├── StoreOrderStatusService.java
│ │ │ │ └── StoreOrderStatusServiceImpl.java
│ │ │ └── resources/
│ │ │ └── mapper/
│ │ │ ├── express/
│ │ │ │ └── ExpressMapper.xml
│ │ │ ├── storeorder/
│ │ │ │ └── StoreOrderMapper.xml
│ │ │ ├── storeordercartinfo/
│ │ │ │ └── StoreOrderCartInfoMapper.xml
│ │ │ └── storeorderstatus/
│ │ │ └── StoreOrderStatusMapper.xml
│ │ ├── yshop-module-product-api/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── module/
│ │ │ └── product/
│ │ │ ├── api/
│ │ │ │ ├── package-info.java
│ │ │ │ ├── product/
│ │ │ │ │ └── ProductApi.java
│ │ │ │ └── property/
│ │ │ │ ├── ProductPropertyValueApi.java
│ │ │ │ └── dto/
│ │ │ │ └── ProductPropertyValueDetailRespDTO.java
│ │ │ └── enums/
│ │ │ ├── ErrorCodeConstants.java
│ │ │ ├── ProductConstants.java
│ │ │ ├── comment/
│ │ │ │ └── ProductCommentAuditStatusEnum.java
│ │ │ ├── delivery/
│ │ │ │ └── DeliveryTypeEnum.java
│ │ │ ├── group/
│ │ │ │ └── ProductGroupStyleEnum.java
│ │ │ ├── product/
│ │ │ │ ├── DefaultEnum.java
│ │ │ │ ├── ProductEnum.java
│ │ │ │ ├── ProductTypeEnum.java
│ │ │ │ ├── RelationCateEnum.java
│ │ │ │ ├── RelationEnum.java
│ │ │ │ ├── ScoreEnum.java
│ │ │ │ └── SpecTypeEnum.java
│ │ │ └── spu/
│ │ │ ├── ProductSpuSpecTypeEnum.java
│ │ │ └── ProductSpuStatusEnum.java
│ │ ├── yshop-module-product-biz/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── java/
│ │ │ │ └── co/
│ │ │ │ └── yixiang/
│ │ │ │ └── yshop/
│ │ │ │ └── module/
│ │ │ │ └── product/
│ │ │ │ ├── api/
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ └── product/
│ │ │ │ │ └── ProductApiImpl.java
│ │ │ │ ├── controller/
│ │ │ │ │ ├── admin/
│ │ │ │ │ │ ├── category/
│ │ │ │ │ │ │ ├── ProductCategoryController.java
│ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ ├── ProductCategoryBaseVO.java
│ │ │ │ │ │ │ ├── ProductCategoryCreateReqVO.java
│ │ │ │ │ │ │ ├── ProductCategoryListReqVO.java
│ │ │ │ │ │ │ ├── ProductCategoryRespVO.java
│ │ │ │ │ │ │ └── ProductCategoryUpdateReqVO.java
│ │ │ │ │ │ ├── storeproduct/
│ │ │ │ │ │ │ ├── StoreProductController.java
│ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ ├── StoreProductBaseVO.java
│ │ │ │ │ │ │ ├── StoreProductCreateReqVO.java
│ │ │ │ │ │ │ ├── StoreProductExcelVO.java
│ │ │ │ │ │ │ ├── StoreProductExportReqVO.java
│ │ │ │ │ │ │ ├── StoreProductPageReqVO.java
│ │ │ │ │ │ │ ├── StoreProductRespVO.java
│ │ │ │ │ │ │ └── StoreProductUpdateReqVO.java
│ │ │ │ │ │ ├── storeproductreply/
│ │ │ │ │ │ │ ├── StoreProductReplyController.java
│ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ ├── StoreProductReplyBaseVO.java
│ │ │ │ │ │ │ ├── StoreProductReplyPageReqVO.java
│ │ │ │ │ │ │ ├── StoreProductReplyRespVO.java
│ │ │ │ │ │ │ └── StoreProductReplyUpdateReqVO.java
│ │ │ │ │ │ └── storeproductrule/
│ │ │ │ │ │ ├── StoreProductRuleController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── StoreProductRuleBaseVO.java
│ │ │ │ │ │ ├── StoreProductRuleCreateReqVO.java
│ │ │ │ │ │ ├── StoreProductRuleExcelVO.java
│ │ │ │ │ │ ├── StoreProductRuleExportReqVO.java
│ │ │ │ │ │ ├── StoreProductRulePageReqVO.java
│ │ │ │ │ │ ├── StoreProductRuleRespVO.java
│ │ │ │ │ │ └── StoreProductRuleUpdateReqVO.java
│ │ │ │ │ └── app/
│ │ │ │ │ ├── cart/
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ └── AppStoreCartQueryVo.java
│ │ │ │ │ ├── category/
│ │ │ │ │ │ ├── AppCategoryController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ └── AppCategoryRespVO.java
│ │ │ │ │ └── product/
│ │ │ │ │ ├── AppStoreProductController.java
│ │ │ │ │ ├── param/
│ │ │ │ │ │ └── AppStoreProductQueryParam.java
│ │ │ │ │ └── vo/
│ │ │ │ │ ├── AppIndexVo.java
│ │ │ │ │ ├── AppProductVo.java
│ │ │ │ │ ├── AppReplyCountVo.java
│ │ │ │ │ ├── AppStoreProductAttrQueryVo.java
│ │ │ │ │ ├── AppStoreProductReplyQueryVo.java
│ │ │ │ │ └── AppStoreProductRespVo.java
│ │ │ │ ├── convert/
│ │ │ │ │ ├── category/
│ │ │ │ │ │ └── ProductCategoryConvert.java
│ │ │ │ │ ├── storeproduct/
│ │ │ │ │ │ └── StoreProductConvert.java
│ │ │ │ │ ├── storeproductattr/
│ │ │ │ │ │ └── StoreProductAttrConvert.java
│ │ │ │ │ ├── storeproductattrresult/
│ │ │ │ │ │ └── StoreProductAttrResultConvert.java
│ │ │ │ │ ├── storeproductattrvalue/
│ │ │ │ │ │ └── StoreProductAttrValueConvert.java
│ │ │ │ │ ├── storeproductreply/
│ │ │ │ │ │ └── StoreProductReplyConvert.java
│ │ │ │ │ └── storeproductrule/
│ │ │ │ │ └── StoreProductRuleConvert.java
│ │ │ │ ├── dal/
│ │ │ │ │ ├── dataobject/
│ │ │ │ │ │ ├── category/
│ │ │ │ │ │ │ └── ProductCategoryDO.java
│ │ │ │ │ │ ├── storeproduct/
│ │ │ │ │ │ │ └── StoreProductDO.java
│ │ │ │ │ │ ├── storeproductattr/
│ │ │ │ │ │ │ └── StoreProductAttrDO.java
│ │ │ │ │ │ ├── storeproductattrresult/
│ │ │ │ │ │ │ └── StoreProductAttrResultDO.java
│ │ │ │ │ │ ├── storeproductattrvalue/
│ │ │ │ │ │ │ └── StoreProductAttrValueDO.java
│ │ │ │ │ │ ├── storeproductreply/
│ │ │ │ │ │ │ └── StoreProductReplyDO.java
│ │ │ │ │ │ └── storeproductrule/
│ │ │ │ │ │ └── StoreProductRuleDO.java
│ │ │ │ │ └── mysql/
│ │ │ │ │ ├── category/
│ │ │ │ │ │ └── ProductCategoryMapper.java
│ │ │ │ │ ├── storeproduct/
│ │ │ │ │ │ └── StoreProductMapper.java
│ │ │ │ │ ├── storeproductattr/
│ │ │ │ │ │ └── StoreProductAttrMapper.java
│ │ │ │ │ ├── storeproductattrresult/
│ │ │ │ │ │ └── StoreProductAttrResultMapper.java
│ │ │ │ │ ├── storeproductattrvalue/
│ │ │ │ │ │ └── StoreProductAttrValueMapper.java
│ │ │ │ │ ├── storeproductreply/
│ │ │ │ │ │ └── StoreProductReplyMapper.java
│ │ │ │ │ └── storeproductrule/
│ │ │ │ │ └── StoreProductRuleMapper.java
│ │ │ │ ├── framework/
│ │ │ │ │ ├── package-info.java
│ │ │ │ │ └── web/
│ │ │ │ │ ├── config/
│ │ │ │ │ │ └── ProductWebConfiguration.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── package-info.java
│ │ │ │ └── service/
│ │ │ │ ├── category/
│ │ │ │ │ ├── ProductCategoryService.java
│ │ │ │ │ └── ProductCategoryServiceImpl.java
│ │ │ │ ├── storeproduct/
│ │ │ │ │ ├── AppStoreProductService.java
│ │ │ │ │ ├── AppStoreProductServiceImpl.java
│ │ │ │ │ ├── StoreProductService.java
│ │ │ │ │ ├── StoreProductServiceImpl.java
│ │ │ │ │ └── dto/
│ │ │ │ │ ├── AttrValueDto.java
│ │ │ │ │ ├── DetailDto.java
│ │ │ │ │ ├── FromatDetailDto.java
│ │ │ │ │ ├── ProductDto.java
│ │ │ │ │ ├── ProductFormatDto.java
│ │ │ │ │ ├── ProductResultDto.java
│ │ │ │ │ ├── StoreProductDto.java
│ │ │ │ │ ├── YxStoreProductDto.java
│ │ │ │ │ ├── YxStoreProductRelationDto.java
│ │ │ │ │ ├── YxStoreProductReplyDto.java
│ │ │ │ │ ├── YxStoreProductRuleDto.java
│ │ │ │ │ └── YxStoreProductSmallDto.java
│ │ │ │ ├── storeproductattr/
│ │ │ │ │ ├── AppStoreProductAttrService.java
│ │ │ │ │ ├── AppStoreProductAttrServiceImpl.java
│ │ │ │ │ ├── StoreProductAttrService.java
│ │ │ │ │ └── StoreProductAttrServiceImpl.java
│ │ │ │ ├── storeproductattrresult/
│ │ │ │ │ ├── StoreProductAttrResultService.java
│ │ │ │ │ └── StoreProductAttrResultServiceImpl.java
│ │ │ │ ├── storeproductattrvalue/
│ │ │ │ │ ├── StoreProductAttrValueService.java
│ │ │ │ │ └── StoreProductAttrValueServiceImpl.java
│ │ │ │ ├── storeproductreply/
│ │ │ │ │ ├── AppStoreProductReplyService.java
│ │ │ │ │ ├── AppStoreProductReplyServiceImpl.java
│ │ │ │ │ ├── StoreProductReplyService.java
│ │ │ │ │ └── StoreProductReplyServiceImpl.java
│ │ │ │ └── storeproductrule/
│ │ │ │ ├── StoreProductRuleService.java
│ │ │ │ └── StoreProductRuleServiceImpl.java
│ │ │ └── resources/
│ │ │ └── mapper/
│ │ │ ├── shippingtemplates/
│ │ │ │ └── ShippingTemplatesMapper.xml
│ │ │ ├── shippingtemplatesfree/
│ │ │ │ └── ShippingTemplatesFreeMapper.xml
│ │ │ ├── shippingtemplatesregion/
│ │ │ │ └── ShippingTemplatesRegionMapper.xml
│ │ │ ├── storeproduct/
│ │ │ │ └── StoreProductMapper.xml
│ │ │ ├── storeproductattr/
│ │ │ │ └── StoreProductAttrMapper.xml
│ │ │ ├── storeproductattrresult/
│ │ │ │ └── StoreProductAttrResultMapper.xml
│ │ │ ├── storeproductattrvalue/
│ │ │ │ └── StoreProductAttrValueMapper.xml
│ │ │ ├── storeproductrelation/
│ │ │ │ └── StoreProductRelationMapper.xml
│ │ │ ├── storeproductreply/
│ │ │ │ └── StoreProductReplyMapper.xml
│ │ │ └── storeproductrule/
│ │ │ └── StoreProductRuleMapper.xml
│ │ ├── yshop-module-shop-api/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── module/
│ │ │ └── shop/
│ │ │ └── enums/
│ │ │ └── ErrorCodeConstants.java
│ │ ├── yshop-module-shop-biz/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ ├── java/
│ │ │ │ │ └── co/
│ │ │ │ │ └── yixiang/
│ │ │ │ │ └── yshop/
│ │ │ │ │ └── module/
│ │ │ │ │ └── shop/
│ │ │ │ │ ├── controller/
│ │ │ │ │ │ ├── admin/
│ │ │ │ │ │ │ ├── material/
│ │ │ │ │ │ │ │ ├── MaterialController.java
│ │ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ │ ├── MaterialBaseVO.java
│ │ │ │ │ │ │ │ ├── MaterialCreateReqVO.java
│ │ │ │ │ │ │ │ ├── MaterialExcelVO.java
│ │ │ │ │ │ │ │ ├── MaterialExportReqVO.java
│ │ │ │ │ │ │ │ ├── MaterialPageReqVO.java
│ │ │ │ │ │ │ │ ├── MaterialRespVO.java
│ │ │ │ │ │ │ │ └── MaterialUpdateReqVO.java
│ │ │ │ │ │ │ ├── materialgroup/
│ │ │ │ │ │ │ │ ├── MaterialGroupController.java
│ │ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ │ ├── MaterialGroupBaseVO.java
│ │ │ │ │ │ │ │ ├── MaterialGroupCreateReqVO.java
│ │ │ │ │ │ │ │ ├── MaterialGroupExcelVO.java
│ │ │ │ │ │ │ │ ├── MaterialGroupExportReqVO.java
│ │ │ │ │ │ │ │ ├── MaterialGroupPageReqVO.java
│ │ │ │ │ │ │ │ ├── MaterialGroupRespVO.java
│ │ │ │ │ │ │ │ └── MaterialGroupUpdateReqVO.java
│ │ │ │ │ │ │ ├── service/
│ │ │ │ │ │ │ │ ├── ServiceController.java
│ │ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ │ ├── ServiceBaseVO.java
│ │ │ │ │ │ │ │ ├── ServiceCreateReqVO.java
│ │ │ │ │ │ │ │ ├── ServiceExcelVO.java
│ │ │ │ │ │ │ │ ├── ServiceExportReqVO.java
│ │ │ │ │ │ │ │ ├── ServicePageReqVO.java
│ │ │ │ │ │ │ │ ├── ServiceRespVO.java
│ │ │ │ │ │ │ │ └── ServiceUpdateReqVO.java
│ │ │ │ │ │ │ └── shopads/
│ │ │ │ │ │ │ ├── ShopAdsController.java
│ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ ├── ShopAdsBaseVO.java
│ │ │ │ │ │ │ ├── ShopAdsCreateReqVO.java
│ │ │ │ │ │ │ ├── ShopAdsExcelVO.java
│ │ │ │ │ │ │ ├── ShopAdsExportReqVO.java
│ │ │ │ │ │ │ ├── ShopAdsPageReqVO.java
│ │ │ │ │ │ │ ├── ShopAdsRespVO.java
│ │ │ │ │ │ │ └── ShopAdsUpdateReqVO.java
│ │ │ │ │ │ └── app/
│ │ │ │ │ │ ├── ad/
│ │ │ │ │ │ │ ├── AppAdController.java
│ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ └── AppShopAdsVO.java
│ │ │ │ │ │ └── service/
│ │ │ │ │ │ ├── AppServiceController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ └── AppServiceVO.java
│ │ │ │ │ ├── convert/
│ │ │ │ │ │ ├── material/
│ │ │ │ │ │ │ └── MaterialConvert.java
│ │ │ │ │ │ ├── materialgroup/
│ │ │ │ │ │ │ └── MaterialGroupConvert.java
│ │ │ │ │ │ ├── service/
│ │ │ │ │ │ │ └── ServiceConvert.java
│ │ │ │ │ │ └── shopads/
│ │ │ │ │ │ └── ShopAdsConvert.java
│ │ │ │ │ ├── dal/
│ │ │ │ │ │ ├── dataobject/
│ │ │ │ │ │ │ ├── material/
│ │ │ │ │ │ │ │ └── MaterialDO.java
│ │ │ │ │ │ │ ├── materialgroup/
│ │ │ │ │ │ │ │ └── MaterialGroupDO.java
│ │ │ │ │ │ │ ├── service/
│ │ │ │ │ │ │ │ └── ServiceDO.java
│ │ │ │ │ │ │ └── shopads/
│ │ │ │ │ │ │ └── ShopAdsDO.java
│ │ │ │ │ │ └── mysql/
│ │ │ │ │ │ ├── material/
│ │ │ │ │ │ │ └── MaterialMapper.java
│ │ │ │ │ │ ├── materialgroup/
│ │ │ │ │ │ │ └── MaterialGroupMapper.java
│ │ │ │ │ │ ├── service/
│ │ │ │ │ │ │ └── ServiceMapper.java
│ │ │ │ │ │ └── shopads/
│ │ │ │ │ │ └── ShopAdsMapper.java
│ │ │ │ │ ├── framework/
│ │ │ │ │ │ ├── package-info.java
│ │ │ │ │ │ └── web/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── ShopWebConfiguration.java
│ │ │ │ │ │ └── package-info.java
│ │ │ │ │ └── service/
│ │ │ │ │ ├── material/
│ │ │ │ │ │ ├── MaterialService.java
│ │ │ │ │ │ └── MaterialServiceImpl.java
│ │ │ │ │ ├── materialgroup/
│ │ │ │ │ │ ├── MaterialGroupService.java
│ │ │ │ │ │ └── MaterialGroupServiceImpl.java
│ │ │ │ │ ├── service/
│ │ │ │ │ │ ├── AppServiceService.java
│ │ │ │ │ │ ├── AppServiceServiceImpl.java
│ │ │ │ │ │ ├── ServiceService.java
│ │ │ │ │ │ └── ServiceServiceImpl.java
│ │ │ │ │ └── shopads/
│ │ │ │ │ ├── AppShopAdsService.java
│ │ │ │ │ ├── AppShopAdsServiceImpl.java
│ │ │ │ │ ├── ShopAdsService.java
│ │ │ │ │ └── ShopAdsServiceImpl.java
│ │ │ │ └── resources/
│ │ │ │ └── mapper/
│ │ │ │ ├── material/
│ │ │ │ │ └── MaterialMapper.xml
│ │ │ │ └── materialgroup/
│ │ │ │ └── MaterialGroupMapper.xml
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── module/
│ │ │ └── shop/
│ │ │ └── service/
│ │ │ └── material/
│ │ │ └── MaterialServiceImplTest.java
│ │ ├── yshop-module-store-api/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── module/
│ │ │ └── store/
│ │ │ └── enums/
│ │ │ ├── ErrorCodeConstants.java
│ │ │ └── WithdrawalStatusEnum.java
│ │ └── yshop-module-store-biz/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── module/
│ │ │ └── store/
│ │ │ ├── controller/
│ │ │ │ ├── admin/
│ │ │ │ │ └── storeshop/
│ │ │ │ │ ├── StoreShopController.java
│ │ │ │ │ └── vo/
│ │ │ │ │ ├── StoreShopBaseVO.java
│ │ │ │ │ ├── StoreShopCreateReqVO.java
│ │ │ │ │ ├── StoreShopExcelVO.java
│ │ │ │ │ ├── StoreShopExportReqVO.java
│ │ │ │ │ ├── StoreShopPageReqVO.java
│ │ │ │ │ ├── StoreShopRespVO.java
│ │ │ │ │ └── StoreShopUpdateReqVO.java
│ │ │ │ └── app/
│ │ │ │ └── storeshop/
│ │ │ │ ├── AppStoreController.java
│ │ │ │ └── vo/
│ │ │ │ └── AppStoreShopVO.java
│ │ │ ├── convert/
│ │ │ │ └── storeshop/
│ │ │ │ └── StoreShopConvert.java
│ │ │ ├── dal/
│ │ │ │ ├── dataobject/
│ │ │ │ │ └── storeshop/
│ │ │ │ │ └── StoreShopDO.java
│ │ │ │ ├── mysql/
│ │ │ │ │ └── storeshop/
│ │ │ │ │ └── StoreShopMapper.java
│ │ │ │ └── redis/
│ │ │ │ ├── PrintTokenRedisDAO.java
│ │ │ │ └── RedisKeyConstants.java
│ │ │ └── service/
│ │ │ └── storeshop/
│ │ │ ├── AppStoreShopService.java
│ │ │ ├── AppStoreShopServiceImpl.java
│ │ │ ├── StoreShopService.java
│ │ │ └── StoreShopServiceImpl.java
│ │ └── resources/
│ │ └── mapper/
│ │ └── storeshop/
│ │ └── StoreShopMapper.xml
│ ├── yshop-module-marketing/
│ │ ├── pom.xml
│ │ ├── yshop-module-coupon-api/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── module/
│ │ │ └── coupon/
│ │ │ └── enums/
│ │ │ ├── CouponStatusEnum.java
│ │ │ └── ErrorCodeConstants.java
│ │ └── yshop-module-coupon-biz/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── module/
│ │ │ └── coupon/
│ │ │ ├── controller/
│ │ │ │ ├── admin/
│ │ │ │ │ ├── coupon/
│ │ │ │ │ │ ├── CouponController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── CouponBaseVO.java
│ │ │ │ │ │ ├── CouponCreateReqVO.java
│ │ │ │ │ │ ├── CouponExcelVO.java
│ │ │ │ │ │ ├── CouponExportReqVO.java
│ │ │ │ │ │ ├── CouponPageReqVO.java
│ │ │ │ │ │ ├── CouponRespVO.java
│ │ │ │ │ │ └── CouponUpdateReqVO.java
│ │ │ │ │ └── couponuser/
│ │ │ │ │ ├── CouponUserController.java
│ │ │ │ │ └── vo/
│ │ │ │ │ ├── CouponUserBaseVO.java
│ │ │ │ │ ├── CouponUserCreateReqVO.java
│ │ │ │ │ ├── CouponUserExcelVO.java
│ │ │ │ │ ├── CouponUserExportReqVO.java
│ │ │ │ │ ├── CouponUserPageReqVO.java
│ │ │ │ │ ├── CouponUserRespVO.java
│ │ │ │ │ └── CouponUserUpdateReqVO.java
│ │ │ │ └── app/
│ │ │ │ └── coupon/
│ │ │ │ ├── AppCouponController.java
│ │ │ │ └── vo/
│ │ │ │ ├── AppCouponVO.java
│ │ │ │ ├── AppMyCouponVO.java
│ │ │ │ └── AppReceVO.java
│ │ │ ├── convert/
│ │ │ │ ├── coupon/
│ │ │ │ │ └── CouponConvert.java
│ │ │ │ └── couponuser/
│ │ │ │ └── CouponUserConvert.java
│ │ │ ├── dal/
│ │ │ │ ├── dataobject/
│ │ │ │ │ ├── coupon/
│ │ │ │ │ │ └── CouponDO.java
│ │ │ │ │ └── couponuser/
│ │ │ │ │ └── CouponUserDO.java
│ │ │ │ └── mysql/
│ │ │ │ ├── coupon/
│ │ │ │ │ └── CouponMapper.java
│ │ │ │ └── couponuser/
│ │ │ │ └── CouponUserMapper.java
│ │ │ └── service/
│ │ │ ├── coupon/
│ │ │ │ ├── AppCouponService.java
│ │ │ │ ├── AppCouponServiceImpl.java
│ │ │ │ ├── CouponService.java
│ │ │ │ └── CouponServiceImpl.java
│ │ │ └── couponuser/
│ │ │ ├── AppCouponUserService.java
│ │ │ ├── AppCouponUserServiceImpl.java
│ │ │ ├── CouponUserService.java
│ │ │ └── CouponUserServiceImpl.java
│ │ └── resources/
│ │ └── mapper/
│ │ └── coupon/
│ │ └── CouponMapper.xml
│ ├── yshop-module-member/
│ │ ├── pom.xml
│ │ ├── yshop-module-member-api/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── module/
│ │ │ └── member/
│ │ │ ├── api/
│ │ │ │ ├── package-info.java
│ │ │ │ └── user/
│ │ │ │ ├── MemberUserApi.java
│ │ │ │ └── dto/
│ │ │ │ ├── MemberUserRespDTO.java
│ │ │ │ └── WechatUserDto.java
│ │ │ └── enums/
│ │ │ ├── BillDetailEnum.java
│ │ │ ├── BillEnum.java
│ │ │ ├── ErrorCodeConstants.java
│ │ │ └── LoginTypeEnum.java
│ │ └── yshop-module-member-biz/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ └── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── module/
│ │ │ └── member/
│ │ │ ├── api/
│ │ │ │ ├── package-info.java
│ │ │ │ └── user/
│ │ │ │ └── MemberUserApiImpl.java
│ │ │ ├── controller/
│ │ │ │ ├── admin/
│ │ │ │ │ ├── user/
│ │ │ │ │ │ ├── MemberUserController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── UserBaseVO.java
│ │ │ │ │ │ ├── UserCreateReqVO.java
│ │ │ │ │ │ ├── UserExportReqVO.java
│ │ │ │ │ │ ├── UserPageReqVO.java
│ │ │ │ │ │ ├── UserRespVO.java
│ │ │ │ │ │ ├── UserUpdateMoneyReqVO.java
│ │ │ │ │ │ └── UserUpdateReqVO.java
│ │ │ │ │ ├── useraddress/
│ │ │ │ │ │ ├── UserAddressController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── UserAddressBaseVO.java
│ │ │ │ │ │ ├── UserAddressCreateReqVO.java
│ │ │ │ │ │ ├── UserAddressExportReqVO.java
│ │ │ │ │ │ ├── UserAddressPageReqVO.java
│ │ │ │ │ │ ├── UserAddressRespVO.java
│ │ │ │ │ │ └── UserAddressUpdateReqVO.java
│ │ │ │ │ └── userbill/
│ │ │ │ │ ├── UserBillController.java
│ │ │ │ │ └── vo/
│ │ │ │ │ ├── UserBillBaseVO.java
│ │ │ │ │ ├── UserBillCreateReqVO.java
│ │ │ │ │ ├── UserBillExportReqVO.java
│ │ │ │ │ ├── UserBillPageReqVO.java
│ │ │ │ │ ├── UserBillRespVO.java
│ │ │ │ │ └── UserBillUpdateReqVO.java
│ │ │ │ └── app/
│ │ │ │ ├── address/
│ │ │ │ │ ├── AppUserAddressController.java
│ │ │ │ │ ├── param/
│ │ │ │ │ │ ├── AddressDetailParam.java
│ │ │ │ │ │ └── AppAddressParam.java
│ │ │ │ │ └── vo/
│ │ │ │ │ ├── AppUserAddressLocationVo.java
│ │ │ │ │ ├── AppUserAddressQueryVo.java
│ │ │ │ │ └── AreaNodeRespVO.java
│ │ │ │ ├── auth/
│ │ │ │ │ ├── AppAuthController.java
│ │ │ │ │ └── vo/
│ │ │ │ │ ├── AppAuthCheckCodeReqVO.java
│ │ │ │ │ ├── AppAuthLoginReqVO.java
│ │ │ │ │ ├── AppAuthLoginRespVO.java
│ │ │ │ │ ├── AppAuthResetPasswordReqVO.java
│ │ │ │ │ ├── AppAuthSmsLoginReqVO.java
│ │ │ │ │ ├── AppAuthSmsSendReqVO.java
│ │ │ │ │ ├── AppAuthSocialLoginReqVO.java
│ │ │ │ │ ├── AppAuthUpdatePasswordReqVO.java
│ │ │ │ │ ├── AppAuthWeixinMiniAppLoginReqVO.java
│ │ │ │ │ ├── AppWeixinMiniLoginVO.java
│ │ │ │ │ └── AppWxMiniLoginVO.java
│ │ │ │ ├── social/
│ │ │ │ │ ├── AppSocialUserController.java
│ │ │ │ │ └── vo/
│ │ │ │ │ ├── AppSocialUserBindReqVO.java
│ │ │ │ │ └── AppSocialUserUnbindReqVO.java
│ │ │ │ ├── user/
│ │ │ │ │ ├── AppUserController.java
│ │ │ │ │ └── vo/
│ │ │ │ │ ├── AppUserBillVO.java
│ │ │ │ │ ├── AppUserInfoRespVO.java
│ │ │ │ │ ├── AppUserNickVO.java
│ │ │ │ │ ├── AppUserOrderCountVo.java
│ │ │ │ │ ├── AppUserQueryVo.java
│ │ │ │ │ ├── AppUserRechargeVO.java
│ │ │ │ │ └── AppUserUpdateMobileReqVO.java
│ │ │ │ └── weixin/
│ │ │ │ └── AppWxMpController.java
│ │ │ ├── convert/
│ │ │ │ ├── auth/
│ │ │ │ │ └── AuthConvert.java
│ │ │ │ ├── package-info.java
│ │ │ │ ├── social/
│ │ │ │ │ └── SocialUserConvert.java
│ │ │ │ ├── user/
│ │ │ │ │ └── UserConvert.java
│ │ │ │ ├── useraddress/
│ │ │ │ │ ├── AreaConvert.java
│ │ │ │ │ └── UserAddressConvert.java
│ │ │ │ └── userbill/
│ │ │ │ └── UserBillConvert.java
│ │ │ ├── dal/
│ │ │ │ ├── dataobject/
│ │ │ │ │ ├── user/
│ │ │ │ │ │ └── MemberUserDO.java
│ │ │ │ │ ├── useraddress/
│ │ │ │ │ │ └── UserAddressDO.java
│ │ │ │ │ └── userbill/
│ │ │ │ │ └── UserBillDO.java
│ │ │ │ ├── mysql/
│ │ │ │ │ ├── user/
│ │ │ │ │ │ └── MemberUserMapper.java
│ │ │ │ │ ├── useraddress/
│ │ │ │ │ │ └── UserAddressMapper.java
│ │ │ │ │ └── userbill/
│ │ │ │ │ └── UserBillMapper.java
│ │ │ │ └── redis/
│ │ │ │ ├── RedisKeyConstants.java
│ │ │ │ └── order/
│ │ │ │ └── MiniRedisDAO.java
│ │ │ ├── framework/
│ │ │ │ ├── package-info.java
│ │ │ │ └── web/
│ │ │ │ ├── config/
│ │ │ │ │ └── MemberWebConfiguration.java
│ │ │ │ └── package-info.java
│ │ │ └── service/
│ │ │ ├── auth/
│ │ │ │ ├── MemberAuthService.java
│ │ │ │ └── MemberAuthServiceImpl.java
│ │ │ ├── user/
│ │ │ │ ├── MemberUserService.java
│ │ │ │ ├── MemberUserServiceImpl.java
│ │ │ │ ├── UserService.java
│ │ │ │ ├── UserServiceImpl.java
│ │ │ │ └── dto/
│ │ │ │ └── WechatUserDto.java
│ │ │ ├── useraddress/
│ │ │ │ ├── AppUserAddressService.java
│ │ │ │ ├── AppUserAddressServiceImpl.java
│ │ │ │ ├── UserAddressService.java
│ │ │ │ └── UserAddressServiceImpl.java
│ │ │ └── userbill/
│ │ │ ├── UserBillService.java
│ │ │ └── UserBillServiceImpl.java
│ │ └── test/
│ │ ├── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── module/
│ │ │ └── member/
│ │ │ └── service/
│ │ │ └── auth/
│ │ │ └── MemberAuthServiceTest.java
│ │ └── resources/
│ │ ├── application-unit-test.yaml
│ │ ├── logback.xml
│ │ └── sql/
│ │ ├── clean.sql
│ │ └── create_tables.sql
│ ├── yshop-module-message/
│ │ ├── pom.xml
│ │ ├── yshop-module-message-api/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── module/
│ │ │ └── message/
│ │ │ └── enums/
│ │ │ ├── ErrorCodeConstants.java
│ │ │ └── WechatTempateEnum.java
│ │ └── yshop-module-message-biz/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── module/
│ │ │ └── message/
│ │ │ ├── controller/
│ │ │ │ └── admin/
│ │ │ │ └── wechattemplate/
│ │ │ │ ├── WechatTemplateController.java
│ │ │ │ └── vo/
│ │ │ │ ├── WechatTemplateBaseVO.java
│ │ │ │ ├── WechatTemplateCreateReqVO.java
│ │ │ │ ├── WechatTemplateExcelVO.java
│ │ │ │ ├── WechatTemplateExportReqVO.java
│ │ │ │ ├── WechatTemplatePageReqVO.java
│ │ │ │ ├── WechatTemplateRespVO.java
│ │ │ │ └── WechatTemplateUpdateReqVO.java
│ │ │ ├── convert/
│ │ │ │ └── wechattemplate/
│ │ │ │ └── WechatTemplateConvert.java
│ │ │ ├── dal/
│ │ │ │ ├── dataobject/
│ │ │ │ │ └── wechattemplate/
│ │ │ │ │ └── WechatTemplateDO.java
│ │ │ │ └── mysql/
│ │ │ │ └── wechattemplate/
│ │ │ │ └── WechatTemplateMapper.java
│ │ │ ├── mq/
│ │ │ │ ├── consumer/
│ │ │ │ │ └── WeixinNoticeConsumer.java
│ │ │ │ ├── message/
│ │ │ │ │ └── WeixinNoticeMessage.java
│ │ │ │ └── producer/
│ │ │ │ └── WeixinNoticeProducer.java
│ │ │ ├── redismq/
│ │ │ │ ├── DelayedQueueListener.java
│ │ │ │ ├── DelayedQueueListenerConfigurer.java
│ │ │ │ ├── DelayedQueuePollTask.java
│ │ │ │ └── msg/
│ │ │ │ └── OrderMsg.java
│ │ │ ├── service/
│ │ │ │ └── wechattemplate/
│ │ │ │ ├── WechatTemplateService.java
│ │ │ │ └── WechatTemplateServiceImpl.java
│ │ │ └── supply/
│ │ │ ├── WeiXinSubscribeService.java
│ │ │ └── WeixinTemplateService.java
│ │ └── resources/
│ │ └── mapper/
│ │ └── wechattemplate/
│ │ └── WechatTemplateMapper.xml
│ ├── yshop-module-mp/
│ │ ├── pom.xml
│ │ ├── yshop-module-mp-api/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── module/
│ │ │ └── mp/
│ │ │ └── enums/
│ │ │ ├── ErrorCodeConstants.java
│ │ │ ├── MpAccountEnum.java
│ │ │ └── message/
│ │ │ ├── MpAutoReplyMatchEnum.java
│ │ │ ├── MpAutoReplyTypeEnum.java
│ │ │ └── MpMessageSendFromEnum.java
│ │ └── yshop-module-mp-biz/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── co/
│ │ └── yixiang/
│ │ └── yshop/
│ │ └── module/
│ │ └── mp/
│ │ ├── controller/
│ │ │ └── admin/
│ │ │ ├── account/
│ │ │ │ ├── MaAccountController.java
│ │ │ │ ├── MpAccountController.java
│ │ │ │ └── vo/
│ │ │ │ ├── MpAccountBaseVO.java
│ │ │ │ ├── MpAccountCreateReqVO.java
│ │ │ │ ├── MpAccountPageReqVO.java
│ │ │ │ ├── MpAccountRespVO.java
│ │ │ │ ├── MpAccountSimpleRespVO.java
│ │ │ │ └── MpAccountUpdateReqVO.java
│ │ │ ├── material/
│ │ │ │ ├── MpMaterialController.java
│ │ │ │ └── vo/
│ │ │ │ ├── MpMaterialPageReqVO.java
│ │ │ │ ├── MpMaterialRespVO.java
│ │ │ │ ├── MpMaterialUploadNewsImageReqVO.java
│ │ │ │ ├── MpMaterialUploadPermanentReqVO.java
│ │ │ │ ├── MpMaterialUploadRespVO.java
│ │ │ │ └── MpMaterialUploadTemporaryReqVO.java
│ │ │ ├── menu/
│ │ │ │ ├── MpMenuController.java
│ │ │ │ └── vo/
│ │ │ │ ├── MpMenuBaseVO.java
│ │ │ │ ├── MpMenuRespVO.java
│ │ │ │ └── MpMenuSaveReqVO.java
│ │ │ ├── message/
│ │ │ │ ├── MpAutoReplyController.java
│ │ │ │ ├── MpMessageController.java
│ │ │ │ └── vo/
│ │ │ │ ├── autoreply/
│ │ │ │ │ ├── MpAutoReplyBaseVO.java
│ │ │ │ │ ├── MpAutoReplyCreateReqVO.java
│ │ │ │ │ ├── MpAutoReplyPageReqVO.java
│ │ │ │ │ ├── MpAutoReplyRespVO.java
│ │ │ │ │ └── MpAutoReplyUpdateReqVO.java
│ │ │ │ └── message/
│ │ │ │ ├── MpMessagePageReqVO.java
│ │ │ │ ├── MpMessageRespVO.java
│ │ │ │ └── MpMessageSendReqVO.java
│ │ │ ├── news/
│ │ │ │ ├── MpDraftController.java
│ │ │ │ ├── MpFreePublishController.java
│ │ │ │ └── vo/
│ │ │ │ ├── MpDraftPageReqVO.java
│ │ │ │ └── MpFreePublishPageReqVO.java
│ │ │ ├── open/
│ │ │ │ ├── MpOpenController.java
│ │ │ │ └── vo/
│ │ │ │ ├── MpOpenCheckSignatureReqVO.java
│ │ │ │ └── MpOpenHandleMessageReqVO.java
│ │ │ ├── statistics/
│ │ │ │ ├── MpStatisticsController.java
│ │ │ │ └── vo/
│ │ │ │ ├── MpStatisticsGetReqVO.java
│ │ │ │ ├── MpStatisticsInterfaceSummaryRespVO.java
│ │ │ │ ├── MpStatisticsUpstreamMessageRespVO.java
│ │ │ │ ├── MpStatisticsUserCumulateRespVO.java
│ │ │ │ └── MpStatisticsUserSummaryRespVO.java
│ │ │ ├── tag/
│ │ │ │ ├── MpTagController.java
│ │ │ │ └── vo/
│ │ │ │ ├── MpTagBaseVO.java
│ │ │ │ ├── MpTagCreateReqVO.java
│ │ │ │ ├── MpTagPageReqVO.java
│ │ │ │ ├── MpTagRespVO.java
│ │ │ │ ├── MpTagSimpleRespVO.java
│ │ │ │ └── MpTagUpdateReqVO.java
│ │ │ └── user/
│ │ │ ├── MpUserController.java
│ │ │ └── vo/
│ │ │ ├── MpUserPageReqVO.java
│ │ │ ├── MpUserRespVO.java
│ │ │ └── MpUserUpdateReqVO.java
│ │ ├── convert/
│ │ │ ├── account/
│ │ │ │ └── MpAccountConvert.java
│ │ │ ├── material/
│ │ │ │ └── MpMaterialConvert.java
│ │ │ ├── menu/
│ │ │ │ └── MpMenuConvert.java
│ │ │ ├── message/
│ │ │ │ ├── MpAutoReplyConvert.java
│ │ │ │ └── MpMessageConvert.java
│ │ │ ├── statistics/
│ │ │ │ └── MpStatisticsConvert.java
│ │ │ ├── tag/
│ │ │ │ └── MpTagConvert.java
│ │ │ └── user/
│ │ │ └── MpUserConvert.java
│ │ ├── dal/
│ │ │ ├── dataobject/
│ │ │ │ ├── account/
│ │ │ │ │ └── MpAccountDO.java
│ │ │ │ ├── material/
│ │ │ │ │ └── MpMaterialDO.java
│ │ │ │ ├── menu/
│ │ │ │ │ └── MpMenuDO.java
│ │ │ │ ├── message/
│ │ │ │ │ ├── MpAutoReplyDO.java
│ │ │ │ │ └── MpMessageDO.java
│ │ │ │ ├── tag/
│ │ │ │ │ └── MpTagDO.java
│ │ │ │ └── user/
│ │ │ │ └── MpUserDO.java
│ │ │ └── mysql/
│ │ │ ├── account/
│ │ │ │ └── MpAccountMapper.java
│ │ │ ├── material/
│ │ │ │ └── MpMaterialMapper.java
│ │ │ ├── menu/
│ │ │ │ └── MpMenuMapper.java
│ │ │ ├── message/
│ │ │ │ ├── MpAutoReplyMapper.java
│ │ │ │ └── MpMessageMapper.java
│ │ │ ├── tag/
│ │ │ │ └── MpTagMapper.java
│ │ │ └── user/
│ │ │ └── MpUserMapper.java
│ │ ├── framework/
│ │ │ ├── mp/
│ │ │ │ ├── config/
│ │ │ │ │ └── MpConfiguration.java
│ │ │ │ └── core/
│ │ │ │ ├── DefaultMpServiceFactory.java
│ │ │ │ ├── MpServiceFactory.java
│ │ │ │ ├── context/
│ │ │ │ │ └── MpContextHolder.java
│ │ │ │ └── util/
│ │ │ │ └── MpUtils.java
│ │ │ └── web/
│ │ │ └── config/
│ │ │ └── MpWebConfiguration.java
│ │ └── service/
│ │ ├── account/
│ │ │ ├── MpAccountService.java
│ │ │ └── MpAccountServiceImpl.java
│ │ ├── handler/
│ │ │ ├── menu/
│ │ │ │ └── MenuHandler.java
│ │ │ ├── message/
│ │ │ │ ├── MessageAutoReplyHandler.java
│ │ │ │ └── MessageReceiveHandler.java
│ │ │ ├── other/
│ │ │ │ ├── KfSessionHandler.java
│ │ │ │ ├── NullHandler.java
│ │ │ │ ├── ScanHandler.java
│ │ │ │ ├── StoreCheckNotifyHandler.java
│ │ │ │ └── package-info.java
│ │ │ └── user/
│ │ │ ├── LocationHandler.java
│ │ │ ├── SubscribeHandler.java
│ │ │ └── UnsubscribeHandler.java
│ │ ├── material/
│ │ │ ├── MpMaterialService.java
│ │ │ └── MpMaterialServiceImpl.java
│ │ ├── menu/
│ │ │ ├── MpMenuService.java
│ │ │ └── MpMenuServiceImpl.java
│ │ ├── message/
│ │ │ ├── MpAutoReplyService.java
│ │ │ ├── MpAutoReplyServiceImpl.java
│ │ │ ├── MpMessageService.java
│ │ │ ├── MpMessageServiceImpl.java
│ │ │ └── bo/
│ │ │ └── MpMessageSendOutReqBO.java
│ │ ├── statistics/
│ │ │ ├── MpStatisticsService.java
│ │ │ └── MpStatisticsServiceImpl.java
│ │ ├── tag/
│ │ │ ├── MpTagService.java
│ │ │ └── MpTagServiceImpl.java
│ │ └── user/
│ │ ├── MpUserService.java
│ │ └── MpUserServiceImpl.java
│ ├── yshop-module-pay/
│ │ ├── pom.xml
│ │ ├── yshop-module-pay-api/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── module/
│ │ │ └── pay/
│ │ │ ├── config/
│ │ │ │ ├── MerchantPayServiceConfigurer.java
│ │ │ │ ├── PayAutoConfiguration.java
│ │ │ │ ├── handlers/
│ │ │ │ │ ├── AliPayMessageHandler.java
│ │ │ │ │ └── WxPayMessageHandler.java
│ │ │ │ └── interceptor/
│ │ │ │ ├── AliPayMessageInterceptor.java
│ │ │ │ └── WxPayMessageInterceptor.java
│ │ │ ├── enums/
│ │ │ │ └── ErrorCodeConstants.java
│ │ │ └── mq/
│ │ │ ├── message/
│ │ │ │ └── PayNoticeMessage.java
│ │ │ └── producer/
│ │ │ └── PayNoticeProducer.java
│ │ └── yshop-module-pay-biz/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── module/
│ │ │ └── pay/
│ │ │ ├── controller/
│ │ │ │ └── admin/
│ │ │ │ └── merchantdetails/
│ │ │ │ ├── MerchantDetailsController.java
│ │ │ │ └── vo/
│ │ │ │ ├── MerchantDetailsBaseVO.java
│ │ │ │ ├── MerchantDetailsCreateReqVO.java
│ │ │ │ ├── MerchantDetailsExcelVO.java
│ │ │ │ ├── MerchantDetailsExportReqVO.java
│ │ │ │ ├── MerchantDetailsPageReqVO.java
│ │ │ │ ├── MerchantDetailsRespVO.java
│ │ │ │ └── MerchantDetailsUpdateReqVO.java
│ │ │ ├── convert/
│ │ │ │ └── merchantdetails/
│ │ │ │ └── MerchantDetailsConvert.java
│ │ │ ├── dal/
│ │ │ │ ├── dataobject/
│ │ │ │ │ └── merchantdetails/
│ │ │ │ │ └── MerchantDetailsDO.java
│ │ │ │ └── mysql/
│ │ │ │ └── merchantdetails/
│ │ │ │ └── MerchantDetailsMapper.java
│ │ │ ├── http/
│ │ │ │ └── HttpRequestNoticeNewParams.java
│ │ │ └── service/
│ │ │ └── merchantdetails/
│ │ │ ├── MerchantDetailsService.java
│ │ │ └── MerchantDetailsServiceImpl.java
│ │ └── resources/
│ │ └── mapper/
│ │ └── merchantdetails/
│ │ └── MerchantDetailsMapper.xml
│ ├── yshop-module-score/
│ │ ├── pom.xml
│ │ ├── yshop-module-score-api/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── module/
│ │ │ └── score/
│ │ │ └── enums/
│ │ │ ├── ErrorCodeConstants.java
│ │ │ └── OrderStatusEnum.java
│ │ └── yshop-module-score-biz/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── module/
│ │ │ └── score/
│ │ │ ├── controller/
│ │ │ │ ├── admin/
│ │ │ │ │ ├── scoreorder/
│ │ │ │ │ │ ├── ScoreOrderController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── ScoreOrderBaseVO.java
│ │ │ │ │ │ ├── ScoreOrderCreateReqVO.java
│ │ │ │ │ │ ├── ScoreOrderExcelVO.java
│ │ │ │ │ │ ├── ScoreOrderExportReqVO.java
│ │ │ │ │ │ ├── ScoreOrderPageReqVO.java
│ │ │ │ │ │ ├── ScoreOrderRespVO.java
│ │ │ │ │ │ └── ScoreOrderUpdateReqVO.java
│ │ │ │ │ └── scoreproduct/
│ │ │ │ │ ├── ScoreProductController.java
│ │ │ │ │ └── vo/
│ │ │ │ │ ├── ScoreProductBaseVO.java
│ │ │ │ │ ├── ScoreProductCreateReqVO.java
│ │ │ │ │ ├── ScoreProductExcelVO.java
│ │ │ │ │ ├── ScoreProductExportReqVO.java
│ │ │ │ │ ├── ScoreProductPageReqVO.java
│ │ │ │ │ ├── ScoreProductRespVO.java
│ │ │ │ │ └── ScoreProductUpdateReqVO.java
│ │ │ │ └── app/
│ │ │ │ ├── order/
│ │ │ │ │ ├── AppScoreOrderController.java
│ │ │ │ │ ├── param/
│ │ │ │ │ │ └── AppScoreOrderParam.java
│ │ │ │ │ └── vo/
│ │ │ │ │ └── AppScoreOrderVO.java
│ │ │ │ └── product/
│ │ │ │ ├── AppScoreProductController.java
│ │ │ │ ├── param/
│ │ │ │ │ └── AppScoreProductQueryParam.java
│ │ │ │ └── vo/
│ │ │ │ └── AppScoreProductVO.java
│ │ │ ├── convert/
│ │ │ │ ├── scoreorder/
│ │ │ │ │ └── ScoreOrderConvert.java
│ │ │ │ └── scoreproduct/
│ │ │ │ └── ScoreProductConvert.java
│ │ │ ├── dal/
│ │ │ │ ├── dataobject/
│ │ │ │ │ ├── scoreorder/
│ │ │ │ │ │ └── ScoreOrderDO.java
│ │ │ │ │ └── scoreproduct/
│ │ │ │ │ └── ScoreProductDO.java
│ │ │ │ └── mysql/
│ │ │ │ ├── scoreorder/
│ │ │ │ │ └── ScoreOrderMapper.java
│ │ │ │ └── scoreproduct/
│ │ │ │ └── ScoreProductMapper.java
│ │ │ └── service/
│ │ │ ├── scoreorder/
│ │ │ │ ├── AppScoreOrderService.java
│ │ │ │ ├── AppScoreOrderServiceImpl.java
│ │ │ │ ├── ScoreOrderService.java
│ │ │ │ └── ScoreOrderServiceImpl.java
│ │ │ └── scoreproduct/
│ │ │ ├── AppScoreProductService.java
│ │ │ ├── AppScoreProductServiceImpl.java
│ │ │ ├── ScoreProductService.java
│ │ │ └── ScoreProductServiceImpl.java
│ │ └── resources/
│ │ └── mapper/
│ │ └── scoreorder/
│ │ └── ScoreOrderMapper.xml
│ ├── yshop-module-system/
│ │ ├── pom.xml
│ │ ├── yshop-module-system-api/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── java/
│ │ │ └── co/
│ │ │ └── yixiang/
│ │ │ └── yshop/
│ │ │ └── module/
│ │ │ └── system/
│ │ │ ├── api/
│ │ │ │ ├── dept/
│ │ │ │ │ ├── DeptApi.java
│ │ │ │ │ ├── PostApi.java
│ │ │ │ │ └── dto/
│ │ │ │ │ ├── DeptRespDTO.java
│ │ │ │ │ └── PostRespDTO.java
│ │ │ │ ├── dict/
│ │ │ │ │ ├── DictDataApi.java
│ │ │ │ │ └── dto/
│ │ │ │ │ └── DictDataRespDTO.java
│ │ │ │ ├── logger/
│ │ │ │ │ ├── LoginLogApi.java
│ │ │ │ │ ├── OperateLogApi.java
│ │ │ │ │ └── dto/
│ │ │ │ │ ├── LoginLogCreateReqDTO.java
│ │ │ │ │ ├── OperateLogCreateReqDTO.java
│ │ │ │ │ ├── OperateLogPageReqDTO.java
│ │ │ │ │ └── OperateLogRespDTO.java
│ │ │ │ ├── mail/
│ │ │ │ │ ├── MailSendApi.java
│ │ │ │ │ └── dto/
│ │ │ │ │ └── MailSendSingleToUserReqDTO.java
│ │ │ │ ├── notify/
│ │ │ │ │ ├── NotifyMessageSendApi.java
│ │ │ │ │ └── dto/
│ │ │ │ │ ├── NotifySendSingleToUserReqDTO.java
│ │ │ │ │ └── NotifyTemplateReqDTO.java
│ │ │ │ ├── oauth2/
│ │ │ │ │ ├── OAuth2TokenApi.java
│ │ │ │ │ └── dto/
│ │ │ │ │ ├── OAuth2AccessTokenCheckRespDTO.java
│ │ │ │ │ ├── OAuth2AccessTokenCreateReqDTO.java
│ │ │ │ │ └── OAuth2AccessTokenRespDTO.java
│ │ │ │ ├── permission/
│ │ │ │ │ ├── PermissionApi.java
│ │ │ │ │ ├── RoleApi.java
│ │ │ │ │ └── dto/
│ │ │ │ │ └── DeptDataPermissionRespDTO.java
│ │ │ │ ├── sms/
│ │ │ │ │ ├── SmsCodeApi.java
│ │ │ │ │ ├── SmsSendApi.java
│ │ │ │ │ └── dto/
│ │ │ │ │ ├── code/
│ │ │ │ │ │ ├── SmsCodeSendReqDTO.java
│ │ │ │ │ │ ├── SmsCodeUseReqDTO.java
│ │ │ │ │ │ └── SmsCodeValidateReqDTO.java
│ │ │ │ │ └── send/
│ │ │ │ │ └── SmsSendSingleToUserReqDTO.java
│ │ │ │ ├── social/
│ │ │ │ │ ├── SocialClientApi.java
│ │ │ │ │ ├── SocialUserApi.java
│ │ │ │ │ └── dto/
│ │ │ │ │ ├── SocialUserBindReqDTO.java
│ │ │ │ │ ├── SocialUserRespDTO.java
│ │ │ │ │ ├── SocialUserUnbindReqDTO.java
│ │ │ │ │ ├── SocialWxJsapiSignatureRespDTO.java
│ │ │ │ │ └── SocialWxPhoneNumberInfoRespDTO.java
│ │ │ │ ├── tenant/
│ │ │ │ │ └── TenantApi.java
│ │ │ │ └── user/
│ │ │ │ ├── AdminUserApi.java
│ │ │ │ └── dto/
│ │ │ │ └── AdminUserRespDTO.java
│ │ │ └── enums/
│ │ │ ├── DictTypeConstants.java
│ │ │ ├── ErrorCodeConstants.java
│ │ │ ├── LogRecordConstants.java
│ │ │ ├── common/
│ │ │ │ └── SexEnum.java
│ │ │ ├── logger/
│ │ │ │ ├── LoginLogTypeEnum.java
│ │ │ │ └── LoginResultEnum.java
│ │ │ ├── mail/
│ │ │ │ └── MailSendStatusEnum.java
│ │ │ ├── notice/
│ │ │ │ └── NoticeTypeEnum.java
│ │ │ ├── notify/
│ │ │ │ └── NotifyTemplateTypeEnum.java
│ │ │ ├── oauth2/
│ │ │ │ ├── OAuth2ClientConstants.java
│ │ │ │ └── OAuth2GrantTypeEnum.java
│ │ │ ├── permission/
│ │ │ │ ├── DataScopeEnum.java
│ │ │ │ ├── MenuTypeEnum.java
│ │ │ │ ├── RoleCodeEnum.java
│ │ │ │ └── RoleTypeEnum.java
│ │ │ ├── sms/
│ │ │ │ ├── SmsReceiveStatusEnum.java
│ │ │ │ ├── SmsSceneEnum.java
│ │ │ │ ├── SmsSendStatusEnum.java
│ │ │ │ └── SmsTemplateTypeEnum.java
│ │ │ └── social/
│ │ │ └── SocialTypeEnum.java
│ │ └── yshop-module-system-biz/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── co/
│ │ │ │ └── yixiang/
│ │ │ │ └── yshop/
│ │ │ │ └── module/
│ │ │ │ └── system/
│ │ │ │ ├── api/
│ │ │ │ │ ├── dept/
│ │ │ │ │ │ ├── DeptApiImpl.java
│ │ │ │ │ │ └── PostApiImpl.java
│ │ │ │ │ ├── dict/
│ │ │ │ │ │ └── DictDataApiImpl.java
│ │ │ │ │ ├── logger/
│ │ │ │ │ │ ├── LoginLogApiImpl.java
│ │ │ │ │ │ └── OperateLogApiImpl.java
│ │ │ │ │ ├── mail/
│ │ │ │ │ │ └── MailSendApiImpl.java
│ │ │ │ │ ├── notify/
│ │ │ │ │ │ └── NotifyMessageSendApiImpl.java
│ │ │ │ │ ├── oauth2/
│ │ │ │ │ │ └── OAuth2TokenApiImpl.java
│ │ │ │ │ ├── permission/
│ │ │ │ │ │ ├── PermissionApiImpl.java
│ │ │ │ │ │ └── RoleApiImpl.java
│ │ │ │ │ ├── sms/
│ │ │ │ │ │ ├── SmsCodeApiImpl.java
│ │ │ │ │ │ └── SmsSendApiImpl.java
│ │ │ │ │ ├── social/
│ │ │ │ │ │ ├── SocialClientApiImpl.java
│ │ │ │ │ │ └── SocialUserApiImpl.java
│ │ │ │ │ ├── tenant/
│ │ │ │ │ │ └── TenantApiImpl.java
│ │ │ │ │ └── user/
│ │ │ │ │ └── AdminUserApiImpl.java
│ │ │ │ ├── controller/
│ │ │ │ │ ├── admin/
│ │ │ │ │ │ ├── auth/
│ │ │ │ │ │ │ ├── AuthController.java
│ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ ├── AuthLoginReqVO.java
│ │ │ │ │ │ │ ├── AuthLoginRespVO.java
│ │ │ │ │ │ │ ├── AuthMenuRespVO.java
│ │ │ │ │ │ │ ├── AuthPermissionInfoRespVO.java
│ │ │ │ │ │ │ ├── AuthSmsLoginReqVO.java
│ │ │ │ │ │ │ ├── AuthSmsSendReqVO.java
│ │ │ │ │ │ │ └── AuthSocialLoginReqVO.java
│ │ │ │ │ │ ├── captcha/
│ │ │ │ │ │ │ └── CaptchaController.java
│ │ │ │ │ │ ├── dept/
│ │ │ │ │ │ │ ├── DeptController.java
│ │ │ │ │ │ │ ├── PostController.java
│ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ ├── dept/
│ │ │ │ │ │ │ │ ├── DeptListReqVO.java
│ │ │ │ │ │ │ │ ├── DeptRespVO.java
│ │ │ │ │ │ │ │ ├── DeptSaveReqVO.java
│ │ │ │ │ │ │ │ └── DeptSimpleRespVO.java
│ │ │ │ │ │ │ └── post/
│ │ │ │ │ │ │ ├── PostPageReqVO.java
│ │ │ │ │ │ │ ├── PostRespVO.java
│ │ │ │ │ │ │ ├── PostSaveReqVO.java
│ │ │ │ │ │ │ └── PostSimpleRespVO.java
│ │ │ │ │ │ ├── dict/
│ │ │ │ │ │ │ ├── DictDataController.java
│ │ │ │ │ │ │ ├── DictTypeController.java
│ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ ├── data/
│ │ │ │ │ │ │ │ ├── DictDataPageReqVO.java
│ │ │ │ │ │ │ │ ├── DictDataRespVO.java
│ │ │ │ │ │ │ │ ├── DictDataSaveReqVO.java
│ │ │ │ │ │ │ │ └── DictDataSimpleRespVO.java
│ │ │ │ │ │ │ └── type/
│ │ │ │ │ │ │ ├── DictTypePageReqVO.java
│ │ │ │ │ │ │ ├── DictTypeRespVO.java
│ │ │ │ │ │ │ ├── DictTypeSaveReqVO.java
│ │ │ │ │ │ │ └── DictTypeSimpleRespVO.java
│ │ │ │ │ │ ├── ip/
│ │ │ │ │ │ │ ├── AreaController.java
│ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ └── AreaNodeRespVO.java
│ │ │ │ │ │ ├── logger/
│ │ │ │ │ │ │ ├── LoginLogController.java
│ │ │ │ │ │ │ ├── OperateLogController.java
│ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ ├── loginlog/
│ │ │ │ │ │ │ │ ├── LoginLogPageReqVO.java
│ │ │ │ │ │ │ │ └── LoginLogRespVO.java
│ │ │ │ │ │ │ └── operatelog/
│ │ │ │ │ │ │ ├── OperateLogPageReqVO.java
│ │ │ │ │ │ │ └── OperateLogRespVO.java
│ │ │ │ │ │ ├── mail/
│ │ │ │ │ │ │ ├── MailAccountController.java
│ │ │ │ │ │ │ ├── MailLogController.java
│ │ │ │ │ │ │ ├── MailTemplateController.java
│ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ ├── account/
│ │ │ │ │ │ │ │ ├── MailAccountPageReqVO.java
│ │ │ │ │ │ │ │ ├── MailAccountRespVO.java
│ │ │ │ │ │ │ │ ├── MailAccountSaveReqVO.java
│ │ │ │ │ │ │ │ └── MailAccountSimpleRespVO.java
│ │ │ │ │ │ │ ├── log/
│ │ │ │ │ │ │ │ ├── MailLogPageReqVO.java
│ │ │ │ │ │ │ │ └── MailLogRespVO.java
│ │ │ │ │ │ │ └── template/
│ │ │ │ │ │ │ ├── MailTemplatePageReqVO.java
│ │ │ │ │ │ │ ├── MailTemplateRespVO.java
│ │ │ │ │ │ │ ├── MailTemplateSaveReqVO.java
│ │ │ │ │ │ │ ├── MailTemplateSendReqVO.java
│ │ │ │ │ │ │ └── MailTemplateSimpleRespVO.java
│ │ │ │ │ │ ├── notice/
│ │ │ │ │ │ │ ├── NoticeController.java
│ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ ├── NoticePageReqVO.java
│ │ │ │ │ │ │ ├── NoticeRespVO.java
│ │ │ │ │ │ │ └── NoticeSaveReqVO.java
│ │ │ │ │ │ ├── notify/
│ │ │ │ │ │ │ ├── NotifyMessageController.java
│ │ │ │ │ │ │ ├── NotifyTemplateController.java
│ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ ├── message/
│ │ │ │ │ │ │ │ ├── NotifyMessageMyPageReqVO.java
│ │ │ │ │ │ │ │ ├── NotifyMessagePageReqVO.java
│ │ │ │ │ │ │ │ └── NotifyMessageRespVO.java
│ │ │ │ │ │ │ └── template/
│ │ │ │ │ │ │ ├── NotifyTemplatePageReqVO.java
│ │ │ │ │ │ │ ├── NotifyTemplateRespVO.java
│ │ │ │ │ │ │ ├── NotifyTemplateSaveReqVO.java
│ │ │ │ │ │ │ └── NotifyTemplateSendReqVO.java
│ │ │ │ │ │ ├── oauth2/
│ │ │ │ │ │ │ ├── OAuth2ClientController.java
│ │ │ │ │ │ │ ├── OAuth2OpenController.java
│ │ │ │ │ │ │ ├── OAuth2TokenController.java
│ │ │ │ │ │ │ ├── OAuth2UserController.java
│ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ ├── client/
│ │ │ │ │ │ │ │ ├── OAuth2ClientPageReqVO.java
│ │ │ │ │ │ │ │ ├── OAuth2ClientRespVO.java
│ │ │ │ │ │ │ │ └── OAuth2ClientSaveReqVO.java
│ │ │ │ │ │ │ ├── open/
│ │ │ │ │ │ │ │ ├── OAuth2OpenAccessTokenRespVO.java
│ │ │ │ │ │ │ │ ├── OAuth2OpenAuthorizeInfoRespVO.java
│ │ │ │ │ │ │ │ └── OAuth2OpenCheckTokenRespVO.java
│ │ │ │ │ │ │ ├── token/
│ │ │ │ │ │ │ │ ├── OAuth2AccessTokenPageReqVO.java
│ │ │ │ │ │ │ │ └── OAuth2AccessTokenRespVO.java
│ │ │ │ │ │ │ └── user/
│ │ │ │ │ │ │ ├── OAuth2UserInfoRespVO.java
│ │ │ │ │ │ │ └── OAuth2UserUpdateReqVO.java
│ │ │ │ │ │ ├── permission/
│ │ │ │ │ │ │ ├── MenuController.java
│ │ │ │ │ │ │ ├── PermissionController.java
│ │ │ │ │ │ │ ├── RoleController.java
│ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ ├── menu/
│ │ │ │ │ │ │ │ ├── MenuListReqVO.java
│ │ │ │ │ │ │ │ ├── MenuRespVO.java
│ │ │ │ │ │ │ │ ├── MenuSaveVO.java
│ │ │ │ │ │ │ │ └── MenuSimpleRespVO.java
│ │ │ │ │ │ │ ├── permission/
│ │ │ │ │ │ │ │ ├── PermissionAssignRoleDataScopeReqVO.java
│ │ │ │ │ │ │ │ ├── PermissionAssignRoleMenuReqVO.java
│ │ │ │ │ │ │ │ └── PermissionAssignUserRoleReqVO.java
│ │ │ │ │ │ │ └── role/
│ │ │ │ │ │ │ ├── RolePageReqVO.java
│ │ │ │ │ │ │ ├── RoleRespVO.java
│ │ │ │ │ │ │ ├── RoleSaveReqVO.java
│ │ │ │ │ │ │ └── RoleSimpleRespVO.java
│ │ │ │ │ │ ├── sms/
│ │ │ │ │ │ │ ├── SmsCallbackController.java
│ │ │ │ │ │ │ ├── SmsChannelController.java
│ │ │ │ │ │ │ ├── SmsLogController.java
│ │ │ │ │ │ │ ├── SmsTemplateController.java
│ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ ├── channel/
│ │ │ │ │ │ │ │ ├── SmsChannelPageReqVO.java
│ │ │ │ │ │ │ │ ├── SmsChannelRespVO.java
│ │ │ │ │ │ │ │ ├── SmsChannelSaveReqVO.java
│ │ │ │ │ │ │ │ └── SmsChannelSimpleRespVO.java
│ │ │ │ │ │ │ ├── log/
│ │ │ │ │ │ │ │ ├── SmsLogPageReqVO.java
│ │ │ │ │ │ │ │ └── SmsLogRespVO.java
│ │ │ │ │ │ │ └── template/
│ │ │ │ │ │ │ ├── SmsTemplatePageReqVO.java
│ │ │ │ │ │ │ ├── SmsTemplateRespVO.java
│ │ │ │ │ │ │ ├── SmsTemplateSaveReqVO.java
│ │ │ │ │ │ │ └── SmsTemplateSendReqVO.java
│ │ │ │ │ │ ├── socail/
│ │ │ │ │ │ │ ├── SocialClientController.java
│ │ │ │ │ │ │ ├── SocialUserController.java
│ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ ├── client/
│ │ │ │ │ │ │ │ ├── SocialClientPageReqVO.java
│ │ │ │ │ │ │ │ ├── SocialClientRespVO.java
│ │ │ │ │ │ │ │ └── SocialClientSaveReqVO.java
│ │ │ │ │ │ │ └── user/
│ │ │ │ │ │ │ ├── SocialUserBindReqVO.java
│ │ │ │ │ │ │ ├── SocialUserPageReqVO.java
│ │ │ │ │ │ │ ├── SocialUserRespVO.java
│ │ │ │ │ │ │ └── SocialUserUnbindReqVO.java
│ │ │ │ │ │ ├── tenant/
│ │ │ │ │ │ │ ├── TenantController.java
│ │ │ │ │ │ │ ├── TenantPackageController.java
│ │ │ │ │ │ │ └── vo/
│ │ │ │ │ │ │ ├── packages/
│ │ │ │ │ │ │ │ ├── TenantPackagePageReqVO.java
│ │ │ │ │ │ │ │ ├── TenantPackageRespVO.java
│ │ │ │ │ │ │ │ ├── TenantPackageSaveReqVO.java
│ │ │ │ │ │ │ │ └── TenantPackageSimpleRespVO.java
│ │ │ │ │ │ │ └── tenant/
│ │ │ │ │ │ │ ├── TenantPageReqVO.java
│ │ │ │ │ │ │ ├── TenantRespVO.java
│ │ │ │ │ │ │ ├── TenantSaveReqVO.java
│ │ │ │ │ │ │ └── TenantSimpleRespVO.java
│ │ │ │ │ │ └── user/
│ │ │ │ │ │ ├── UserController.java
│ │ │ │ │ │ ├── UserProfileController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ ├── profile/
│ │ │ │ │ │ │ ├── UserProfileRespVO.java
│ │ │ │ │ │ │ ├── UserProfileUpdatePasswordReqVO.java
│ │ │ │ │ │ │ └── UserProfileUpdateReqVO.java
│ │ │ │ │ │ └── user/
│ │ │ │ │ │ ├── UserImportExcelVO.java
│ │ │ │ │ │ ├── UserImportRespVO.java
│ │ │ │ │ │ ├── UserPageReqVO.java
│ │ │ │ │ │ ├── UserRespVO.java
│ │ │ │ │ │ ├── UserSaveReqVO.java
│ │ │ │ │ │ ├── UserSimpleRespVO.java
│ │ │ │ │ │ ├── UserUpdatePasswordReqVO.java
│ │ │ │ │ │ └── UserUpdateStatusReqVO.java
│ │ │ │ │ └── app/
│ │ │ │ │ ├── dict/
│ │ │ │ │ │ ├── AppDictDataController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ └── AppDictDataRespVO.java
│ │ │ │ │ ├── ip/
│ │ │ │ │ │ ├── AppAreaController.java
│ │ │ │ │ │ └── vo/
│ │ │ │ │ │ └── AppAreaNodeRespVO.java
│ │ │ │ │ └── notice/
│ │ │ │ │ └── AppNoticeController.java
│ │ │ │ ├── convert/
│ │ │ │ │ ├── auth/
│ │ │ │ │ │ └── AuthConvert.java
│ │ │ │ │ ├── oauth2/
│ │ │ │ │ │ └── OAuth2OpenConvert.java
│ │ │ │ │ ├── social/
│ │ │ │ │ │ └── SocialUserConvert.java
│ │ │ │ │ ├── tenant/
│ │ │ │ │ │ └── TenantConvert.java
│ │ │ │ │ └── user/
│ │ │ │ │ └── UserConvert.java
│ │ │ │ ├── dal/
│ │ │ │ │ ├── dataobject/
│ │ │ │ │ │ ├── dept/
│ │ │ │ │ │ │ ├── DeptDO.java
│ │ │ │ │ │ │ ├── PostDO.java
│ │ │ │ │ │ │ └── UserPostDO.java
│ │ │ │ │ │ ├── dict/
│ │ │ │ │ │ │ ├── DictDataDO.java
│ │ │ │ │ │ │ └── DictTypeDO.java
│ │ │ │ │ │ ├── logger/
│ │ │ │ │ │ │ ├── LoginLogDO.java
│ │ │ │ │ │ │ └── OperateLogDO.java
│ │ │ │ │ │ ├── mail/
│ │ │ │ │ │ │ ├── MailAccountDO.java
│ │ │ │ │ │ │ ├── MailLogDO.java
│ │ │ │ │ │ │ └── MailTemplateDO.java
│ │ │ │ │ │ ├── notice/
│ │ │ │ │ │ │ └── NoticeDO.java
│ │ │ │ │ │ ├── notify/
│ │ │ │ │ │ │ ├── NotifyMessageDO.java
│ │ │ │ │ │ │ └── NotifyTemplateDO.java
│ │ │ │ │ │ ├── oauth2/
│ │ │ │ │ │ │ ├── OAuth2AccessTokenDO.java
│ │ │ │ │ │ │ ├── OAuth2ApproveDO.java
│ │ │ │ │ │ │ ├── OAuth2ClientDO.java
│ │ │ │ │ │ │ ├── OAuth2CodeDO.java
│ │ │ │ │ │ │ └── OAuth2RefreshTokenDO.java
│ │ │ │ │ │ ├── permission/
│ │ │ │ │ │ │ ├── MenuDO.java
│ │ │ │ │ │ │ ├── RoleDO.java
│ │ │ │ │ │ │ ├── RoleMenuDO.java
│ │ │ │ │ │ │ └── UserRoleDO.java
│ │ │ │ │ │ ├── sms/
│ │ │ │ │ │ │ ├── SmsChannelDO.java
│ │ │ │ │ │ │ ├── SmsCodeDO.java
│ │ │ │ │ │ │ ├── SmsLogDO.java
│ │ │ │ │ │ │ └── SmsTemplateDO.java
│ │ │ │ │ │ ├── social/
│ │ │ │ │ │ │ ├── SocialClientDO.java
│ │ │ │ │ │ │ ├── SocialUserBindDO.java
│ │ │ │ │ │ │ └── SocialUserDO.java
│ │ │ │ │ │ ├── tenant/
│ │ │ │ │ │ │ ├── TenantDO.java
│ │ │ │ │ │ │ └── TenantPackageDO.java
│ │ │ │ │ │ └── user/
│ │ │ │ │ │ └── AdminUserDO.java
│ │ │ │ │ ├── mysql/
│ │ │ │ │ │ ├── dept/
│ │ │ │ │ │ │ ├── DeptMapper.java
│ │ │ │ │ │ │ ├── PostMapper.java
│ │ │ │ │ │ │ └── UserPostMapper.java
│ │ │ │ │ │ ├── dict/
│ │ │ │ │ │ │ ├── DictDataMapper.java
│ │ │ │ │ │ │ └── DictTypeMapper.java
│ │ │ │ │ │ ├── logger/
│ │ │ │ │ │ │ ├── LoginLogMapper.java
│ │ │ │ │ │ │ └── OperateLogMapper.java
│ │ │ │ │ │ ├── mail/
│ │ │ │ │ │ │ ├── MailAccountMapper.java
│ │ │ │ │ │ │ ├── MailLogMapper.java
│ │ │ │ │ │ │ └── MailTemplateMapper.java
│ │ │ │ │ │ ├── notice/
│ │ │ │ │ │ │ └── NoticeMapper.java
│ │ │ │ │ │ ├── notify/
│ │ │ │ │ │ │ ├── NotifyMessageMapper.java
│ │ │ │ │ │ │ └── NotifyTemplateMapper.java
│ │ │ │ │ │ ├── oauth2/
│ │ │ │ │ │ │ ├── OAuth2AccessTokenMapper.java
│ │ │ │ │ │ │ ├── OAuth2ApproveMapper.java
│ │ │ │ │ │ │ ├── OAuth2ClientMapper.java
│ │ │ │ │ │ │ ├── OAuth2CodeMapper.java
│ │ │ │ │ │ │ └── OAuth2RefreshTokenMapper.java
│ │ │ │ │ │ ├── permission/
│ │ │ │ │ │ │ ├── MenuMapper.java
│ │ │ │ │ │ │ ├── RoleMapper.java
│ │ │ │ │ │ │ ├── RoleMenuMapper.java
│ │ │ │ │ │ │ └── UserRoleMapper.java
│ │ │ │ │ │ ├── sms/
│ │ │ │ │ │ │ ├── SmsChannelMapper.java
│ │ │ │ │ │ │ ├── SmsCodeMapper.java
│ │ │ │ │ │ │ ├── SmsLogMapper.java
│ │ │ │ │ │ │ └── SmsTemplateMapper.java
│ │ │ │ │ │ ├── social/
│ │ │ │ │ │ │ ├── SocialClientMapper.java
│ │ │ │ │ │ │ ├── SocialUserBindMapper.java
│ │ │ │ │ │ │ └── SocialUserMapper.java
│ │ │ │ │ │ ├── tenant/
│ │ │ │ │ │ │ ├── TenantMapper.java
│ │ │ │ │ │ │ └── TenantPackageMapper.java
│ │ │ │ │ │ └── user/
│ │ │ │ │ │ └── AdminUserMapper.java
│ │ │ │ │ └── redis/
│ │ │ │ │ ├── RedisKeyConstants.java
│ │ │ │ │ └── oauth2/
│ │ │ │ │ └── OAuth2AccessTokenRedisDAO.java
│ │ │ │ ├── framework/
│ │ │ │ │ ├── captcha/
│ │ │ │ │ │ ├── config/
│ │ │ │ │ │ │ └── YshopCaptchaConfiguration.java
│ │ │ │ │ │ └── core/
│
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
/.git
/.idea
*.log
*.DS_Store
/yshop-drink-boot3/target/
/yshop-drink-vue3/node_modules
/yshop-drink-uniapp-vue3/node_moduls
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2023 yshop
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
================================================
## 平台简介
意象点餐(扫码点餐)系统,在线点餐(外卖与自取)小程序模式,支持多门店模式,SaaS多租户模式,基础技术Java17,springboot3、vue3、uniapp(vue3)(支持H5、微信小程序)
采用当前流行技术组合的前后端分离点餐系统: SpringBoot3、Spring Security OAuth2、MybatisPlus、SpringSecurity、jwt、redis、Vue3的前后端分离的系统,
包含外卖与自取、商品管理(多规格sku)、店铺管理、云小票打印、图片素材库、订单管理、积分兑换(积分+金额)、充值、优惠券、充值、多门店、微信公众号、商家中心、提前预约、桌面扫码点餐(单人或者多人协同)、收银台(支持扫码枪与扫码盒子收款)、会员卡、桌台点餐等功能,更适合企业或个人二次开发.
官网地址:[https://www.yixiang.co/](https://www.yixiang.co/)
## 演示地址
| 后台登陆: | https://dc.yixiang.co 账号/密码:admin/admin123 |
|---|---|
| 门店登陆: | https://dc.yixiang.co 账号/密码:yixiang001/123456789 |
| 移动端演示:关注右边公众号点击菜单其他系统体验点餐小程序与点餐H5,其中如果演示使用验证码登陆的点击下验证码默认验证码是9999 |  |
## 视频资料
如果对您有帮助,您可以点右上角 "Star" 支持一下,这样我们才有继续免费下去的动力,谢谢! QQ交流群 (入群前,请在网页右上角点 "Star" ),群里有视频教程与开发文档哦!!
交流QQ群:544263002
## 项目说明
```
yshop-drink. Java工程
yshop-drink-vue 后台前端vue3工程
yshop-drink-uniapp-vue3 移动端uniapp(vue3版本)工程,支持微信小程序、h5
```
## 本地快速启动
##### 1、环境要求
```
jdk17
mysql8
redis6+
node16+
maven3.8+
```
##### 2、开发工具
```
idea
vscode
hbuilder
```
##### 3、后端启动
- 3.1 请使用idea打开Java工程,自动会安装依赖
- 3.2 创建数据库且导入工程目录下sql/yixiang-drink.sql 文件
- 3.3 找到项目下的yshop-server 的yml,修改数据库相关信息和redis相关信息,如图:

- 3.4 工程下输入
```
mvn clean install package '-Dmaven.test.skip=true
```
- 3.5 启动项目,如图

##### 4、后台vue启动
- 4.1 vscode 打开vue工程,在目录下输入命令:
```
pnpm install
```
- 4.2 配置api如图

- 4.3 本地启动:
```
npm run dev
```
##### 5 移动端uniapp启动
- 5.1 hbuilder导入uniapp项目,
- 5.2 配置api

- 5.3 配置小程序

- 5.4 运行小程序

- 5.5 运行h5

-
## 小程序截图
| |  |
|---|---|
|  |  |
|  |  |
## 后台截图
|  |
|---|---|
|  |
|  |
|  |  |



## 技术栈
- Spring Boot3
- Spring Security oauth2
- MyBatis
- MyBatisPlus
- Redis
- lombok
- hutool
- Vue3
- Element UI
- uniapp(vue3)
## 特别鸣谢
- ruoyi-vue-pro:https://gitee.com/zhijiantianya/ruoyi-vue-pro
- element-plus:https://element-plus.gitee.io/zh-CN/
- vue:https://cn.vuejs.org/
- pay-java-parent:https://gitee.com/egzosn/pay-java-parent
- uvui:https://www.uvui.cn/
- uniapp:https://uniapp.dcloud.net.cn/
## 开源协议
本项目采用比 Apache 2.0 更宽松的 [MIT License](https://gitee.com/guchengwuyue/yshop-drink/blob/master/LICENSE) 开源协议,个人与企业可 100% 免费使用,不用保留类作者、Copyright 信息。
================================================
FILE: yshop-drink-boot3/.gitignore
================================================
######################################################################
# Build Tools
.gradle
/build/
!gradle/wrapper/gradle-wrapper.jar
target/
!.mvn/wrapper/maven-wrapper.jar
.flattened-pom.xml
######################################################################
# IDE
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
nbproject/private/
build/*
nbbuild/
dist/
nbdist/
.nb-gradle/
######################################################################
# Others
*.log
*.xml.versionsBackup
*.swp
!*/build/*.java
!*/build/*.html
!*/build/*.xml
### JRebel ###
rebel.xml
application-my.yaml
================================================
FILE: yshop-drink-boot3/README.md
================================================
意向订餐系统,类似肯德基点餐小程序模式,支持多门店模式,基础技术Java,uniapp(支持H5、微信小程序)
采用当前流行技术组合的前后端分离点餐系统: SpringBoot3+jdk17、Spring Security OAuth2、MybatisPlus、SpringSecurity、jwt、redis、Vue3的前后端分离的系统,
包含店铺管理、积分兑换、云小票打印、图片素材库、订单管理、多规格sku、积分、优惠券、充值、多门店、微信公众号等功能,更适合企业或个人二次开发.
================================================
FILE: yshop-drink-boot3/lombok.config
================================================
config.stopBubbling = true
lombok.tostring.callsuper=CALL
lombok.equalsandhashcode.callsuper=CALL
lombok.accessors.chain=true
================================================
FILE: yshop-drink-boot3/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>co.yixiang.boot</groupId>
<artifactId>yshop</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>
<modules>
<module>yshop-dependencies</module>
<module>yshop-framework</module>
<!-- Server 主项目 -->
<module>yshop-server</module>
<!-- 各种 module 拓展 -->
<module>yshop-module-system</module>
<module>yshop-module-infra</module>
<module>yshop-module-pay</module>
<module>yshop-module-mp</module>
<module>yshop-module-mall</module>
<module>yshop-module-message</module>
<module>yshop-module-score</module>
<module>yshop-module-express</module>
<module>yshop-module-marketing</module>
<module>yshop-module-member</module>
</modules>
<name>${project.artifactId}</name>
<description>yshop项目基础脚手架</description>
<url>https://gitee.com/guchengwuyue/yshop-drink</url>
<properties>
<revision>3.0.0</revision>
<!-- Maven 相关 -->
<java.version>17</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<maven-surefire-plugin.version>3.2.2</maven-surefire-plugin.version>
<maven-compiler-plugin.version>3.11.0</maven-compiler-plugin.version>
<flatten-maven-plugin.version>1.5.0</flatten-maven-plugin.version>
<!-- 看看咋放到 bom 里 -->
<lombok.version>1.18.30</lombok.version>
<spring.boot.version>3.2.2</spring.boot.version>
<mapstruct.version>1.5.5.Final</mapstruct.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>co.yixiang.boot</groupId>
<artifactId>yshop-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 插件,解决 spring-boot-configuration-processor + 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>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
<!-- 编译参数写在 arg 内,解决 Spring Boot 3.2 的 Parameter Name Discovery 问题 -->
<debug>false</debug>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<!-- 统一 revision 版本 -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>${flatten-maven-plugin.version}</version>
<configuration>
<flattenMode>resolveCiFriendliesOnly</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: yshop-drink-boot3/script/docker/Docker-HOWTO.md
================================================
# Docker Build & Up
目标: 快速部署体验系统,帮助了解系统之间的依赖关系。
依赖:docker compose v2,删除`name: yshop-system`,降低`version`版本为`3.3`以下,支持`docker-compose`。
## 功能文件列表
```text
.
├── Docker-HOWTO.md
├── docker-compose.yml
├── docker.env <-- 提供docker-compose环境变量配置
├── yshop-server
│ └── Dockerfile
└── yshop-ui-admin
├── .dockerignore
├── Dockerfile
└── nginx.conf <-- 提供基础配置,gzip压缩、api转发
```
## 构建 jar 包
```shell
# 创建maven缓存volume
docker volume create --name yshop-maven-repo
docker run -it --rm --name yshop-maven \
-v yshop-maven-repo:/root/.m2 \
-v $PWD:/usr/src/mymaven \
-w /usr/src/mymaven \
maven mvn clean install package '-Dmaven.test.skip=true'
```
## 构建启动服务
```shell
docker compose --env-file docker.env up -d
```
首次运行会自动构建容器。可以通过`docker compose build [service]`来手动构建所有或某个docker镜像
`--env-file docker.env`为可选参数,只是展示了通过`.env`文件配置容器启动的环境变量,`docker-compose.yml`本身已经提供足够的默认参数来正常运行系统。
## 服务器的宿主机端口映射
- admin ui: http://localhost:8080
- api server: http://localhost:48080
- mysql: root/123456, port: 3306
- redis: port: 6379
================================================
FILE: yshop-drink-boot3/script/docker/docker-compose.yml
================================================
version: "3.4"
name: yshop-system
services:
mysql:
container_name: yshop-mysql
image: mysql:8
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE:-yixiang-drink}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-123456}
volumes:
- mysql:/var/lib/mysql/
- ./sql/mysql/yixiang-drink.sql:/docker-entrypoint-initdb.d/yixiang-drink.sql:ro
redis:
container_name: yshop-redis
image: redis:6-alpine
restart: unless-stopped
ports:
- "6379:6379"
volumes:
- redis:/data
server:
container_name: yshop-server
build:
context: ./yshop-server/
image: yshop-server
restart: unless-stopped
ports:
- "48080:48080"
environment:
# https://github.com/polovyivan/docker-pass-configs-to-container
SPRING_PROFILES_ACTIVE: local
JAVA_OPTS:
${JAVA_OPTS:-
-Xms512m
-Xmx512m
-Djava.security.egd=file:/dev/./urandom
}
ARGS:
--spring.datasource.dynamic.datasource.master.url=${MASTER_DATASOURCE_URL:-jdbc:mysql://yshop-mysql:3306/yixiang-drink?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true}
--spring.datasource.dynamic.datasource.master.username=${MASTER_DATASOURCE_USERNAME:-root}
--spring.datasource.dynamic.datasource.master.password=${MASTER_DATASOURCE_PASSWORD:-123456}
--spring.datasource.dynamic.datasource.slave.url=${SLAVE_DATASOURCE_URL:-jdbc:mysql://yshop-mysql:3306/yixiang-drink?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true}
--spring.datasource.dynamic.datasource.slave.username=${SLAVE_DATASOURCE_USERNAME:-root}
--spring.datasource.dynamic.datasource.slave.password=${SLAVE_DATASOURCE_PASSWORD:-123456}
--spring.data.redis.host=${REDIS_HOST:-yshop-redis}
depends_on:
- mysql
- redis
admin:
container_name: yshop-admin
build:
context: ./yshop-ui-admin
args:
NODE_ENV:
ENV=${NODE_ENV:-production}
PUBLIC_PATH=${PUBLIC_PATH:-/}
VUE_APP_TITLE=${VUE_APP_TITLE:-意象商城管理系统}
VUE_APP_BASE_API=${VUE_APP_BASE_API:-/prod-api}
VUE_APP_APP_NAME=${VUE_APP_APP_NAME:-/}
VUE_APP_TENANT_ENABLE=${VUE_APP_TENANT_ENABLE:-true}
VUE_APP_CAPTCHA_ENABLE=${VUE_APP_CAPTCHA_ENABLE:-true}
VUE_APP_DOC_ENABLE=${VUE_APP_DOC_ENABLE:-true}
VUE_APP_BAIDU_CODE=${VUE_APP_BAIDU_CODE:-fadc1bd5db1a1d6f581df60a1807f8ab}
image: yshop-admin
restart: unless-stopped
ports:
- "8080:80"
depends_on:
- server
volumes:
mysql:
driver: local
redis:
driver: local
================================================
FILE: yshop-drink-boot3/script/docker/docker.env
================================================
## mysql
MYSQL_DATABASE=yixiang-drink
MYSQL_ROOT_PASSWORD=123456
## server
JAVA_OPTS=-Xms512m -Xmx512m -Djava.security.egd=file:/dev/./urandom
MASTER_DATASOURCE_URL=jdbc:mysql://yshop-mysql:3306/${MYSQL_DATABASE}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
MASTER_DATASOURCE_USERNAME=root
MASTER_DATASOURCE_PASSWORD=${MYSQL_ROOT_PASSWORD}
SLAVE_DATASOURCE_URL=${MASTER_DATASOURCE_URL}
SLAVE_DATASOURCE_USERNAME=${MASTER_DATASOURCE_USERNAME}
SLAVE_DATASOURCE_PASSWORD=${MASTER_DATASOURCE_PASSWORD}
REDIS_HOST=yshop-redis
## admin
NODE_ENV=production
PUBLIC_PATH=/
VUE_APP_TITLE=意象商城管理系统
VUE_APP_BASE_API=/prod-api
VUE_APP_APP_NAME=/
VUE_APP_TENANT_ENABLE=true
VUE_APP_CAPTCHA_ENABLE=true
VUE_APP_DOC_ENABLE=true
VUE_APP_BAIDU_CODE=fadc1bd5db1a1d6f581df60a1807f8ab
================================================
FILE: yshop-drink-boot3/script/shell/deploy.sh
================================================
#!/bin/bash
set -e
DATE=$(date +%Y%m%d%H%M)
# 基础路径
BASE_PATH=/work/projects/yshop-server
# 编译后 jar 的地址。部署时,Jenkins 会上传 jar 包到该目录下
SOURCE_PATH=$BASE_PATH/build
# 服务名称。同时约定部署服务的 jar 包名字也为它。
SERVER_NAME=yshop-server
# 环境
PROFILES_ACTIVE=development
# 健康检查 URL
HEALTH_CHECK_URL=http://127.0.0.1:48080/actuator/health/
# heapError 存放路径
HEAP_ERROR_PATH=$BASE_PATH/heapError
# JVM 参数
JAVA_OPS="-Xms512m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$HEAP_ERROR_PATH"
# SkyWalking Agent 配置
#export SW_AGENT_NAME=$SERVER_NAME
#export SW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.0.84:11800
#export SW_GRPC_LOG_SERVER_HOST=192.168.0.84
#export SW_AGENT_TRACE_IGNORE_PATH="Redisson/PING,/actuator/**,/admin/**"
#export JAVA_AGENT=-javaagent:/work/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent.jar
# 备份
function backup() {
# 如果不存在,则无需备份
if [ ! -f "$BASE_PATH/$SERVER_NAME.jar" ]; then
echo "[backup] $BASE_PATH/$SERVER_NAME.jar 不存在,跳过备份"
# 如果存在,则备份到 backup 目录下,使用时间作为后缀
else
echo "[backup] 开始备份 $SERVER_NAME ..."
cp $BASE_PATH/$SERVER_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jar
echo "[backup] 备份 $SERVER_NAME 完成"
fi
}
# 最新构建代码 移动到项目环境
function transfer() {
echo "[transfer] 开始转移 $SERVER_NAME.jar"
# 删除原 jar 包
if [ ! -f "$BASE_PATH/$SERVER_NAME.jar" ]; then
echo "[transfer] $BASE_PATH/$SERVER_NAME.jar 不存在,跳过删除"
else
echo "[transfer] 移除 $BASE_PATH/$SERVER_NAME.jar 完成"
rm $BASE_PATH/$SERVER_NAME.jar
fi
# 复制新 jar 包
echo "[transfer] 从 $SOURCE_PATH 中获取 $SERVER_NAME.jar 并迁移至 $BASE_PATH ...."
cp $SOURCE_PATH/$SERVER_NAME.jar $BASE_PATH
echo "[transfer] 转移 $SERVER_NAME.jar 完成"
}
# 停止:优雅关闭之前已经启动的服务
function stop() {
echo "[stop] 开始停止 $BASE_PATH/$SERVER_NAME"
PID=$(ps -ef | grep $BASE_PATH/$SERVER_NAME | grep -v "grep" | awk '{print $2}')
# 如果 Java 服务启动中,则进行关闭
if [ -n "$PID" ]; then
# 正常关闭
echo "[stop] $BASE_PATH/$SERVER_NAME 运行中,开始 kill [$PID]"
kill -15 $PID
# 等待最大 120 秒,直到关闭完成。
for ((i = 0; i < 120; i++))
do
sleep 1
PID=$(ps -ef | grep $BASE_PATH/$SERVER_NAME | grep -v "grep" | awk '{print $2}')
if [ -n "$PID" ]; then
echo -e ".\c"
else
echo "[stop] 停止 $BASE_PATH/$SERVER_NAME 成功"
break
fi
done
# 如果正常关闭失败,那么进行强制 kill -9 进行关闭
if [ -n "$PID" ]; then
echo "[stop] $BASE_PATH/$SERVER_NAME 失败,强制 kill -9 $PID"
kill -9 $PID
fi
# 如果 Java 服务未启动,则无需关闭
else
echo "[stop] $BASE_PATH/$SERVER_NAME 未启动,无需停止"
fi
}
# 启动:启动后端项目
function start() {
# 开启启动前,打印启动参数
echo "[start] 开始启动 $BASE_PATH/$SERVER_NAME"
echo "[start] JAVA_OPS: $JAVA_OPS"
echo "[start] JAVA_AGENT: $JAVA_AGENT"
echo "[start] PROFILES: $PROFILES_ACTIVE"
# 开始启动
BUILD_ID=dontKillMe nohup java -server $JAVA_OPS $JAVA_AGENT -jar $BASE_PATH/$SERVER_NAME.jar --spring.profiles.active=$PROFILES_ACTIVE &
echo "[start] 启动 $BASE_PATH/$SERVER_NAME 完成"
}
# 健康检查:自动判断后端项目是否正常启动
function healthCheck() {
# 如果配置健康检查,则进行健康检查
if [ -n "$HEALTH_CHECK_URL" ]; then
# 健康检查最大 120 秒,直到健康检查通过
echo "[healthCheck] 开始通过 $HEALTH_CHECK_URL 地址,进行健康检查";
for ((i = 0; i < 120; i++))
do
# 请求健康检查地址,只获取状态码。
result=`curl -I -m 10 -o /dev/null -s -w %{http_code} $HEALTH_CHECK_URL || echo "000"`
# 如果状态码为 200,则说明健康检查通过
if [ "$result" == "200" ]; then
echo "[healthCheck] 健康检查通过";
break
# 如果状态码非 200,则说明未通过。sleep 1 秒后,继续重试
else
echo -e ".\c"
sleep 1
fi
done
# 健康检查未通过,则异常退出 shell 脚本,不继续部署。
if [ ! "$result" == "200" ]; then
echo "[healthCheck] 健康检查不通过,可能部署失败。查看日志,自行判断是否启动成功";
tail -n 10 nohup.out
exit 1;
# 健康检查通过,打印最后 10 行日志,可能部署的人想看下日志。
else
tail -n 10 nohup.out
fi
# 如果未配置健康检查,则 sleep 120 秒,人工看日志是否部署成功。
else
echo "[healthCheck] HEALTH_CHECK_URL 未配置,开始 sleep 120 秒";
sleep 120
echo "[healthCheck] sleep 120 秒完成,查看日志,自行判断是否启动成功";
tail -n 50 nohup.out
fi
}
# 部署
function deploy() {
cd $BASE_PATH
# 备份原 jar
backup
# 停止 Java 服务
stop
# 部署新 jar
transfer
# 启动 Java 服务
start
# 健康检查
healthCheck
}
deploy
================================================
FILE: yshop-drink-boot3/sql/yixiang-drink-open.sql
================================================
[File too large to display: 15.5 MB]
================================================
FILE: yshop-drink-boot3/yshop-dependencies/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>co.yixiang.boot</groupId>
<artifactId>yshop-dependencies</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>
<name>${project.artifactId}</name>
<description>基础 bom 文件,管理整个项目的依赖版本</description>
<url>https://gitee.com/guchengwuyue/yshop-drink</url>
<properties>
<revision>3.0.0</revision>
<flatten-maven-plugin.version>1.5.0</flatten-maven-plugin.version>
<!-- 统一依赖管理 -->
<spring.boot.version>3.2.2</spring.boot.version>
<!-- Web 相关 -->
<springdoc.version>2.2.0</springdoc.version>
<knife4j.version>4.3.0</knife4j.version>
<!-- DB 相关 -->
<druid.version>1.2.21</druid.version>
<mybatis-plus.version>3.5.5</mybatis-plus.version>
<mybatis-plus-generator.version>3.5.5</mybatis-plus-generator.version>
<dynamic-datasource.version>4.3.0</dynamic-datasource.version>
<mybatis-plus-join.version>1.4.10</mybatis-plus-join.version>
<easy-trans.version>2.2.11</easy-trans.version>
<redisson.version>3.26.0</redisson.version>
<dm8.jdbc.version>8.1.3.62</dm8.jdbc.version>
<!-- 消息队列 -->
<rocketmq-spring.version>2.3.0</rocketmq-spring.version>
<!-- 服务保障相关 -->
<lock4j.version>2.2.7</lock4j.version>
<!-- 监控相关 -->
<skywalking.version>9.0.0</skywalking.version>
<spring-boot-admin.version>3.2.1</spring-boot-admin.version>
<opentracing.version>0.33.0</opentracing.version>
<!-- Test 测试相关 -->
<podam.version>8.0.1.RELEASE</podam.version>
<jedis-mock.version>1.0.13</jedis-mock.version>
<mockito-inline.version>5.2.0</mockito-inline.version>
<!-- Bpm 工作流相关 -->
<flowable.version>7.0.1</flowable.version>
<!-- 工具类相关 -->
<captcha-plus.version>2.0.3</captcha-plus.version>
<jsoup.version>1.17.2</jsoup.version>
<lombok.version>1.18.30</lombok.version>
<mapstruct.version>1.5.5.Final</mapstruct.version>
<hutool-5.version>5.8.25</hutool-5.version>
<hutool-6.version>6.0.0-M10</hutool-6.version>
<easyexcel.verion>3.3.3</easyexcel.verion>
<velocity.version>2.3</velocity.version>
<screw.version>1.0.5</screw.version>
<fastjson.version>1.2.83</fastjson.version>
<guava.version>33.0.0-jre</guava.version>
<guice.version>5.1.0</guice.version>
<transmittable-thread-local.version>2.14.5</transmittable-thread-local.version>
<commons-net.version>3.10.0</commons-net.version>
<jsch.version>0.1.55</jsch.version>
<tika-core.version>2.9.1</tika-core.version>
<ip2region.version>2.7.0</ip2region.version>
<bizlog-sdk.version>3.0.6</bizlog-sdk.version>
<!-- 三方云服务相关 -->
<okio.version>3.5.0</okio.version>
<okhttp3.version>4.11.0</okhttp3.version>
<commons-io.version>2.15.1</commons-io.version>
<minio.version>8.5.7</minio.version>
<aliyun-java-sdk-core.version>4.6.4</aliyun-java-sdk-core.version>
<aliyun-java-sdk-dysmsapi.version>2.2.1</aliyun-java-sdk-dysmsapi.version>
<tencentcloud-sdk-java.version>3.1.880</tencentcloud-sdk-java.version>
<justauth.version>2.0.5</justauth.version>
<jimureport.version>1.6.6-beta2</jimureport.version>
<xercesImpl.version>2.12.2</xercesImpl.version>
<weixin-java.version>4.6.0</weixin-java.version>
<pay.boot.version>1.0.5</pay.boot.version>
<pay.version>2.14.9</pay.version>
<zxing.version>3.3.3</zxing.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- 统一依赖管理 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 业务组件 -->
<dependency>
<groupId>io.github.mouzt</groupId>
<artifactId>bizlog-sdk</artifactId>
<version>${bizlog-sdk.version}</version>
<exclusions>
<exclusion> <!-- 排除掉springboot依赖使用项目的 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>co.yixiang.boot</groupId>
<artifactId>yshop-spring-boot-starter-biz-tenant</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>co.yixiang.boot</groupId>
<artifactId>yshop-spring-boot-starter-biz-data-permission</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>co.yixiang.boot</groupId>
<artifactId>yshop-spring-boot-starter-biz-ip</artifactId>
<version>${revision}</version>
</dependency>
<!-- Spring 核心 -->
<dependency>
<!-- 用于生成自定义的 Spring @ConfigurationProperties 配置类的说明文件 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>${spring.boot.version}</version>
</dependency>
<!-- Web 相关 -->
<dependency>
<groupId>co.yixiang.boot</groupId>
<artifactId>yshop-spring-boot-starter-web</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>co.yixiang.boot</groupId>
<artifactId>yshop-spring-boot-starter-security</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>co.yixiang.boot</groupId>
<artifactId>yshop-spring-boot-starter-websocket</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-api</artifactId>
<version>${springdoc.version}</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>${springdoc.version}</version>
</dependency>
<!-- DB 相关 -->
<dependency>
<groupId>co.yixiang.boot</groupId>
<artifactId>yshop-spring-boot-starter-mybatis</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-3-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId> <!-- 代码生成器,使用它解析表结构 -->
<version>${mybatis-plus-generator.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot3-starter</artifactId> <!-- 多数据源 -->
<version>${dynamic-datasource.version}</version>
</dependency>
<dependency>
<groupId>com.github.yulichang</groupId>
<artifactId>mybatis-plus-join-boot-starter</artifactId> <!-- MyBatis 联表查询 -->
<version>${mybatis-plus-join.version}</version>
</dependency>
<dependency>
<groupId>com.fhs-opensource</groupId> <!-- VO 数据翻译 -->
<artifactId>easy-trans-spring-boot-starter</artifactId>
<version>${easy-trans.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-commons</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.fhs-opensource</groupId>
<artifactId>easy-trans-mybatis-plus-extend</artifactId>
<version>${easy-trans.version}</version>
</dependency>
<dependency>
<groupId>com.fhs-opensource</groupId>
<artifactId>easy-trans-anno</artifactId>
<version>${easy-trans.version}</version>
</dependency>
<dependency>
<groupId>co.yixiang.boot</groupId>
<artifactId>yshop-spring-boot-starter-redis</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>${redisson.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>${dm8.jdbc.version}</version>
</dependency>
<!-- Job 定时任务相关 -->
<dependency>
<groupId>co.yixiang.boot</groupId>
<artifactId>yshop-spring-boot-starter-job</artifactId>
<version>${revision}</version>
</dependency>
<!-- 消息队列相关 -->
<dependency>
<groupId>co.yixiang.boot</groupId>
<artifactId>yshop-spring-boot-starter-mq</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>${rocketmq-spring.version}</version>
</dependency>
<!-- 服务保障相关 -->
<dependency>
<groupId>co.yixiang.boot</groupId>
<artifactId>yshop-spring-boot-starter-protection</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>lock4j-redisson-spring-boot-starter</artifactId>
<version>${lock4j.version}</version>
<exclusions>
<exclusion>
<artifactId>redisson-spring-boot-starter</artifactId>
<groupId>org.redisson</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- 监控相关 -->
<dependency>
<groupId>co.yixiang.boot</groupId>
<artifactId>yshop-spring-boot-starter-monitor</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>${skywalking.version}</version>
</dependency>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>${skywalking.version}</version>
</dependency>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-opentracing</artifactId>
<version>${skywalking.version}</version>
<!-- <exclusions>-->
<!-- <exclusion>-->
<!-- <artifactId>opentracing-api</artifactId>-->
<!-- <groupId>io.opentracing</groupId>-->
<!-- </exclusion>-->
<!-- <exclusion>-->
<!-- <artifactId>opentracing-util</artifactId>-->
<!-- <groupId>io.opentracing</groupId>-->
<!-- </exclusion>-->
<!-- </exclusions>-->
</dependency>
<dependency>
<groupId>io.opentracing</groupId>
<artifactId>opentracing-api</artifactId>
<version>${opentracing.version}</version>
</dependency>
<dependency>
<groupId>io.opentracing</groupId>
<artifactId>opentracing-util</artifactId>
<version>${opentracing.version}</version>
</dependency>
<dependency>
<groupId>io.opentracing</groupId>
<artifactId>opentracing-noop</artifactId>
<version>${opentracing.version}</version>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId> <!-- 实现 Spring Boot Admin Server 服务端 -->
<version>${spring-boot-admin.version}</version>
<exclusions>
<exclusion>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-cloud</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId> <!-- 实现 Spring Boot Admin Server 服务端 -->
<version>${spring-boot-admin.version}</version>
</dependency>
<!-- Test 测试相关 -->
<dependency>
<groupId>co.yixiang.boot</groupId>
<artifactId>yshop-spring-boot-starter-test</artifactId>
<version>${revision}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId>
<version>${mockito-inline.version}</version> <!-- 支持 Mockito 的 final 类与 static 方法的 mock -->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>${spring.boot.version}</version>
<exclusions>
<exclusion>
<artifactId>asm</artifactId>
<groupId>org.ow2.asm</groupId>
</exclusion>
<exclusion>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.github.fppt</groupId> <!-- 单元测试,我们采用内嵌的 Redis 数据库 -->
<artifactId>jedis-mock</artifactId>
<version>${jedis-mock.version}</version>
</dependency>
<dependency>
<groupId>uk.co.jemos.podam</groupId> <!-- 单元测试,随机生成 POJO 类 -->
<artifactId>podam</artifactId>
<version>${podam.version}</version>
</dependency>
<!-- 工作流相关 -->
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter-process</artifactId>
<version>${flowable.version}</version>
</dependency>
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter-actuator</artifactId>
<version>${flowable.version}</version>
</dependency>
<!-- 工作流相关结束 -->
<!-- 工具类相关 -->
<dependency>
<groupId>co.yixiang.boot</groupId>
<artifactId>yshop-common</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>co.yixiang.boot</groupId>
<artifactId>yshop-spring-boot-starter-excel</artifactId>
<version>${revision}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId> <!-- use mapstruct-jdk8 for Java 8 or higher -->
<version>${mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool-5.version}</version>
</dependency>
<dependency>
<groupId>org.dromara.hutool</groupId>
<artifactId>hutool-extra</artifactId>
<version>${hutool-6.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>${easyexcel.verion}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-core</artifactId> <!-- 文件类型的识别 -->
<version>${tika-core.version}</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>${velocity.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>${guice.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>transmittable-thread-local</artifactId> <!-- 解决 ThreadLocal 父子线程的传值问题 -->
<version>${transmittable-thread-local.version}</version>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId> <!-- 解决 ftp 连接 -->
<version>${commons-net.version}</version>
</dependency>
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId> <!-- 解决 sftp 连接 -->
<version>${jsch.version}</version>
</dependency>
<dependency>
<groupId>com.xingyuv</groupId>
<artifactId>spring-boot-starter-captcha-plus</artifactId>
<version>${captcha-plus.version}</version>
</dependency>
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
<version>${ip2region.version}</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>${jsoup.version}</version>
</dependency>
<!-- 三方云服务相关 -->
<dependency>
<groupId>com.squareup.okio</groupId>
<artifactId>okio</artifactId>
<version>${okio.version}</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>${okhttp3.version}</version>
</dependency>
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>${minio.version}</version>
</dependency>
<!-- SMS SDK begin -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>${aliyun-java-sdk-core.version}</version>
<exclusions>
<exclusion>
<artifactId>opentracing-api</artifactId>
<groupId>io.opentracing</groupId>
</exclusion>
<exclusion>
<artifactId>opentracing-util</artifactId>
<groupId>io.opentracing</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>${aliyun-java-sdk-dysmsapi.version}</version>
</dependency>
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java-sms</artifactId>
<version>${tencentcloud-sdk-java.version}</version>
</dependency>
<!-- SMS SDK end -->
<dependency>
<groupId>com.xingyuv</groupId>
<artifactId>spring-boot-starter-justauth</artifactId> <!-- 社交登陆(例如说,个人微信、企业微信等等) -->
<version>${justauth.version}</version>
<exclusions>
<exclusion>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-pay</artifactId>
<version>${weixin-java.version}</version>
</dependency>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>wx-java-mp-spring-boot-starter</artifactId>
<version>${weixin-java.version}</version>
</dependency>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>wx-java-miniapp-spring-boot-starter</artifactId>
<version>${weixin-java.version}</version>
</dependency>
<!-- 积木报表-->
<dependency>
<groupId>org.jeecgframework.jimureport</groupId>
<artifactId>jimureport-spring-boot3-starter</artifactId>
<version>${jimureport.version}</version>
<exclusions>
<exclusion>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>${xercesImpl.version}</version>
</dependency>
<!-- pay -->
<dependency>
<groupId>com.egzosn</groupId>
<artifactId>pay-spring-boot-starter</artifactId>
<version>${pay.boot.version}</version>
</dependency>
<dependency>
<groupId>com.egzosn</groupId>
<artifactId>pay-java-ali</artifactId>
<version>${pay.version}</version>
</dependency>
<dependency>
<groupId>com.egzosn</groupId>
<artifactId>pay-java-wx</artifactId>
<version>${pay.version}</version>
</dependency>
<dependency>
<groupId>com.egzosn</groupId>
<artifactId>pay-java-web-support</artifactId>
<version>${pay.version}</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>${zxing.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<!-- 统一 revision 版本 -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>${flatten-maven-plugin.version}</version>
<configuration>
<flattenMode>resolveCiFriendliesOnly</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>
</project>
================================================
FILE: yshop-drink-boot3/yshop-framework/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>
<parent>
<artifactId>yshop</artifactId>
<groupId>co.yixiang.boot</groupId>
<version>${revision}</version>
</parent>
<packaging>pom</packaging>
<modules>
<module>yshop-common</module>
<module>yshop-spring-boot-starter-mybatis</module>
<module>yshop-spring-boot-starter-redis</module>
<module>yshop-spring-boot-starter-web</module>
<module>yshop-spring-boot-starter-security</module>
<module>yshop-spring-boot-starter-websocket</module>
<module>yshop-spring-boot-starter-monitor</module>
<module>yshop-spring-boot-starter-protection</module>
<module>yshop-spring-boot-starter-job</module>
<module>yshop-spring-boot-starter-mq</module>
<module>yshop-spring-boot-starter-excel</module>
<module>yshop-spring-boot-starter-test</module>
<module>yshop-spring-boot-starter-biz-tenant</module>
<module>yshop-spring-boot-starter-biz-data-permission</module>
<module>yshop-spring-boot-starter-biz-ip</module>
</modules>
<artifactId>yshop-framework</artifactId>
<description>
该包是技术组件,每个子包,代表一个组件。每个组件包括两部分:
1. core 包:是该组件的核心封装
2. config 包:是该组件基于 Spring 的配置
技术组件,也分成两类:
1. 框架组件:和我们熟悉的 MyBatis、Redis 等等的拓展
2. 业务组件:和业务相关的组件的封装,例如说数据字典、操作日志等等。
如果是业务组件,Maven 名字会包含 biz
</description>
<url>https://gitee.com/guchengwuyue/yshop-drink</url>
</project>
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/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">
<parent>
<groupId>co.yixiang.boot</groupId>
<artifactId>yshop-framework</artifactId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>yshop-common</artifactId>
<packaging>jar</packaging>
<name>${project.artifactId}</name>
<description>定义基础 pojo 类、枚举、工具类等等</description>
<url>https://gitee.com/guchengwuyue/yshop-drink</url>
<dependencies>
<!-- Spring 核心 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<scope>provided</scope> <!-- 设置为 provided,只有工具类需要使用到 -->
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<scope>provided</scope> <!-- 设置为 provided,只有工具类需要使用到 -->
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<scope>provided</scope> <!-- 设置为 provided,只有工具类需要使用到 -->
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<scope>provided</scope> <!-- 设置为 provided,只有工具类需要使用到 -->
</dependency>
<dependency>
<!-- 用于生成自定义的 Spring @ConfigurationProperties 配置类的说明文件 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- Web 相关 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<scope>provided</scope> <!-- 设置为 provided,只有工具类需要使用到 -->
</dependency>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<scope>provided</scope> <!-- 设置为 provided,只有工具类需要使用到 -->
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-api</artifactId>
<scope>provided</scope> <!-- 设置为 provided,主要是 PageParam 使用到 -->
</dependency>
<!-- 监控相关 -->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
</dependency>
<!-- 工具类相关 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId> <!-- use mapstruct-jdk8 for Java 8 or higher -->
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<scope>provided</scope> <!-- 设置为 provided,只有工具类需要使用到 -->
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<scope>provided</scope> <!-- 设置为 provided,只有工具类需要使用到 -->
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<scope>provided</scope> <!-- 设置为 provided,只有工具类需要使用到 -->
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<scope>provided</scope> <!-- 设置为 provided,只有工具类需要使用到 -->
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<scope>provided</scope> <!-- 设置为 provided,只有工具类需要使用到 -->
</dependency>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<scope>provided</scope> <!-- 设置为 provided,主要是 PageParam 使用到 -->
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>transmittable-thread-local</artifactId>
</dependency>
<dependency>
<groupId>com.fhs-opensource</groupId> <!-- VO 数据翻译 -->
<artifactId>easy-trans-anno</artifactId> <!-- 默认引入的原因,方便 xxx-module-api 包使用 -->
</dependency>
<!-- Test 测试相关 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/constant/ShopConstants.java
================================================
/**
* Copyright (C) 2018-2022
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.yshop.framework.common.constant;
/**
* 商城统一常量
* @author hupeng
* @since 2020-02-27
*/
public interface ShopConstants {
/**
* 订单自动取消时间(分钟)
*/
long ORDER_OUTTIME_UNPAY = 30;
/**
* 订单自动收货时间(分钟)
*/
long ORDER_OUTTIME_UNCONFIRM = 60;
/**
* redis订单未付款key
*/
String REDIS_ORDER_OUTTIME_UNPAY_QUEUE = "order-unpay-cancel-queue";
/**
* redis订单收货key
*/
String REDIS_ORDER_OUTTIME_UNCONFIRM = "order:unconfirm:";
/**
* redis拼团key
*/
String REDIS_PINK_CANCEL_KEY = "pink:cancel:";
/**
* 微信支付service
*/
String YSHOP_WEIXIN_PAY_SERVICE = "yshop_weixin_pay_service";
/**
* 微信支付小程序service
*/
String YSHOP_WEIXIN_MINI_PAY_SERVICE = "yshop_weixin_mini_pay_service";
/**
* 微信支付app service
*/
String YSHOP_WEIXIN_APP_PAY_SERVICE = "yshop_weixin_app_pay_service";
/**
* 微信公众号service
*/
String YSHOP_WEIXIN_MP_SERVICE = "yshop_weixin_mp_service";
/**
* 微信小程序service
*/
String YSHOP_WEIXIN_MA_SERVICE = "yshop_weixin_ma_service";
/**
* 商城默认密码
*/
String YSHOP_DEFAULT_PWD = "123456";
/**
* 商城默认注册图片
*/
String YSHOP_DEFAULT_AVATAR = "https://image.dayouqiantu.cn/5e79f6cfd33b6.png";
/**
* 腾讯地图地址解析
*/
String QQ_MAP_URL = "https://apis.map.qq.com/ws/geocoder/v1/";
/**
* redis首页键
*/
String YSHOP_REDIS_INDEX_KEY = "yshop:index_data";
/**
* 配置列表缓存
*/
String YSHOP_REDIS_CONFIG_DATAS = "yshop:config_datas";
/**
* 充值方案
*/
String YSHOP_RECHARGE_PRICE_WAYS = "yshop_recharge_price_ways";
/**
* 首页banner
*/
String YSHOP_HOME_BANNER = "yshop_home_banner";
/**
* 首页菜单
*/
String YSHOP_HOME_MENUS = "yshop_home_menus";
/**
* 首页滚动新闻
*/
String YSHOP_HOME_ROLL_NEWS = "yshop_home_roll_news";
/**
* 热门搜索
*/
String YSHOP_HOT_SEARCH = "yshop_hot_search";
/**
* 个人中心菜单
*/
String YSHOP_MY_MENUES = "yshop_my_menus";
/**
* 秒杀时间段
*/
String YSHOP_SECKILL_TIME = "yshop_seckill_time";
/**
* 签到天数
*/
String YSHOP_SIGN_DAY_NUM = "yshop_sign_day_num";
/**
* 打印机配置
*/
String YSHOP_ORDER_PRINT_COUNT = "order_print_count";
/**
* 飞蛾用户信息
*/
String YSHOP_FEI_E_USER = "fei_e_user";
/**
* 飞蛾用户密钥
*/
String YSHOP_FEI_E_UKEY= "fei_e_ukey";
/**
* 打印机配置
*/
String YSHOP_ORDER_PRINT_COUNT_DETAIL = "order_print_count_detail";
/**
* 短信验证码长度
*/
int YSHOP_SMS_SIZE = 6;
/**
* 短信缓存时间
*/
long YSHOP_SMS_REDIS_TIME = 600L;
//零标识
String YSHOP_ZERO = "0";
//业务标识标识
String YSHOP_ONE = "1";
//目前完成任务数量是3
int TASK_FINISH_COUNT = 3;
int YSHOP_ONE_NUM = 1;
String YSHOP_ORDER_CACHE_KEY = "yshop:order";
String YSHOP_ORDER_SALE_STATUS_KEY = "yshop:order:sale:status";
long YSHOP_ORDER_CACHE_TIME = 3600L;
String WECHAT_MENUS = "wechat_menus";
String YSHOP_EXPRESS_SERVICE = "yshop_express_service";
String YSHOP_REDIS_SYS_CITY_KEY = "yshop:city_list";
String YSHOP_REDIS_CITY_KEY = "yshop:city";
String YSHOP_APP_LOGIN_USER = "app-online-token:";
String YSHOP_WECHAT_PUSH_REMARK = "yshop为您服务!";
String DEFAULT_UNI_H5_URL = "https://h5.yixiang.co";
String YSHOP_MINI_SESSION_KET = "yshop:session_key:";
/**公众号二维码*/
String WECHAT_FOLLOW_IMG="wechat_follow_img";
/**后台api地址*/
String ADMIN_API_URL="admin_api_url";
//快递查询接口Logistic
String KDNIAO_LOGISTIC_QUERY="https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx";
//跳转到扫码页面
String PAGE_GOOD_HOME = "pages/components/pages/scan/scan";
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/constant/SystemConfigConstants.java
================================================
package co.yixiang.yshop.framework.common.constant;
public class SystemConfigConstants {
//地址配置
public final static String API="api";
public final static String API_URL="api_url";
public final static String SITE_URL="site_url";
public final static String UNI_SITE_URL="uni_site_url";
public final static String TENGXUN_MAP_KEY="tengxun_map_key";
public final static String FILE_STORE_MODE="file_store_mode";
//业务相关配置
public final static String IMAGEARR="imageArr";
public final static String INTERGRAL_FULL="integral_full";
public final static String INTERGRAL_MAX="integral_max";
public final static String INTERGRAL_RATIO="integral_ratio";
public final static String ORDER_CANCEL_JOB_TIME="order_cancel_job_time";
public final static String STORE_BROKERAGE_OPEN="store_brokerage_open";
public final static String STORE_BROKERAGE_RATIO="store_brokerage_ratio";
public final static String STORE_BROKERAGE_STATU="store_brokerage_statu";
public final static String STORE_BROKERAGE_TWO="store_brokerage_two";
public final static String STORE_FREE_POSTAGE="store_free_postage";
public final static String STORE_POSTAGE="store_postage";
public final static String STORE_SEFL_MENTION="store_self_mention";
public final static String STORE_USER_MIN_RECHARGE="store_user_min_recharge";
public final static String USER_EXTRACT_MIN_PRICE="user_extract_min_price";
public final static String YSHOP_SHOW_RECHARGE = "yshop_show_recharge";
//微信相关配置
public final static String WECHAT_APPID="wechat_appid";
public final static String WECHAT_APPSECRET="wechat_appsecret";
public final static String WECHAT_AVATAR="wechat_avatar";
public final static String WECHAT_ENCODE="wechat_encode";
public final static String WECHAT_ENCODINGAESKEY="wechat_encodingaeskey";
public final static String WECHAT_ID="wechat_id";
public final static String WECHAT_NAME="wechat_name";
public final static String WECHAT_QRCODE="wechat_qrcode";
public final static String WECHAT_SHARE_IMG="wechat_share_img";
public final static String WECHAT_SHARE_SYNOPSIS="wechat_share_synopsis";
public final static String WECHAT_SHARE_TITLE="wechat_share_title";
public final static String WECHAT_SOURCEID="wechat_sourceid";
public final static String WECHAT_TOKEN="wechat_token";
public final static String WECHAT_MA_TOKEN="wechat_ma_token";
public final static String WECHAT_MA_ENCODINGAESKEY="wechat_ma_encodingaeskey";
public final static String WECHAT_TYPE="wechat_type";
public final static String WXAPP_APPID="wxapp_appId";
public final static String WXAPP_SECRET="wxapp_secret";
public final static String WXPAY_APPID="wxpay_appId";
public final static String WXPAY_KEYPATH="wxpay_keyPath";
public final static String WXPAY_MCHID="wxpay_mchId";
public final static String WXPAY_MCHKEY="wxpay_mchKey";
public final static String WX_NATIVE_APP_APPID="wx_native_app_appId";
public final static String EXP_APPID = "exp_appId";
//播放状态变化事件,detail = {code}
public static final String BINDSTATECHANGE = "bindstatechange";
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/core/IntArrayValuable.java
================================================
package co.yixiang.yshop.framework.common.core;
/**
* 可生成 Int 数组的接口
*
* @author yshop
*/
public interface IntArrayValuable {
/**
* @return int 数组
*/
int[] array();
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/core/KeyValue.java
================================================
package co.yixiang.yshop.framework.common.core;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* Key Value 的键值对
*
* @author yshop
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class KeyValue<K, V> implements Serializable {
private K key;
private V value;
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/CommonStatusEnum.java
================================================
package co.yixiang.yshop.framework.common.enums;
import cn.hutool.core.util.ObjUtil;
import co.yixiang.yshop.framework.common.core.IntArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* 通用状态枚举
*
* @author yshop
*/
@Getter
@AllArgsConstructor
public enum CommonStatusEnum implements IntArrayValuable {
ENABLE(0, "开启"),
DISABLE(1, "关闭");
public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(CommonStatusEnum::getStatus).toArray();
/**
* 状态值
*/
private final Integer status;
/**
* 状态名
*/
private final String name;
@Override
public int[] array() {
return ARRAYS;
}
public static boolean isEnable(Integer status) {
return ObjUtil.equal(ENABLE.status, status);
}
public static boolean isDisable(Integer status) {
return ObjUtil.equal(DISABLE.status, status);
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/DateIntervalEnum.java
================================================
package co.yixiang.yshop.framework.common.enums;
import cn.hutool.core.util.ArrayUtil;
import co.yixiang.yshop.framework.common.core.IntArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* 时间间隔的枚举
*
* @author dhb52
*/
@Getter
@AllArgsConstructor
public enum DateIntervalEnum implements IntArrayValuable {
DAY(1, "天"),
WEEK(2, "周"),
MONTH(3, "月"),
QUARTER(4, "季度"),
YEAR(5, "年")
;
public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(DateIntervalEnum::getInterval).toArray();
/**
* 类型
*/
private final Integer interval;
/**
* 名称
*/
private final String name;
@Override
public int[] array() {
return ARRAYS;
}
public static DateIntervalEnum valueOf(Integer interval) {
return ArrayUtil.firstMatch(item -> item.getInterval().equals(interval), DateIntervalEnum.values());
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/DocumentEnum.java
================================================
package co.yixiang.yshop.framework.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 文档地址
*
* @author yshop
*/
@Getter
@AllArgsConstructor
public enum DocumentEnum {
REDIS_INSTALL("https://gitee.com/zhijiantianya/yixiang-drink/issues/I4VCSJ", "Redis 安装文档"),
TENANT("https://www.yixiang.co", "SaaS 多租户文档");
private final String url;
private final String memo;
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/OrderInfoEnum.java
================================================
/**
* Copyright (C) 2018-2022
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.yshop.framework.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.stream.Stream;
/**
* @author hupeng
* 订单相关枚举
*/
@Getter
@AllArgsConstructor
public enum OrderInfoEnum {
STATUS_NE1(-1,"申请退款"),
STATUS_NE2(-2,"退款成功"),
STATUS_0(0,"默认"),
STATUS_1(1,"待收货"),
STATUS_2(2,"已收货"),
STATUS_3(3,"已完成"),
PAY_STATUS_0(0,"未支付"),
PAY_STATUS_1(1,"已支付"),
REFUND_STATUS_0(0,"正常"),
REFUND_STATUS_1(1,"退款中"),
REFUND_STATUS_2(2,"已退款"),
BARGAIN_STATUS_1(1,"参与中"),
BARGAIN_STATUS_2(2,"参与失败"),
BARGAIN_STATUS_3(3,"参与成功"),
PINK_STATUS_1(1,"进行中"),
PINK_STATUS_2(2,"已完成"),
PINK_STATUS_3(3,"未完成"),
PINK_REFUND_STATUS_0(0,"拼团正常"),
PINK_REFUND_STATUS_1(1,"拼团已退款"),
CANCEL_STATUS_0(0,"正常"),
CANCEL_STATUS_1(1,"已取消"),
CONFIRM_STATUS_0(0,"正常"),
CONFIRM_STATUS_1(1,"确认"),
PAY_CHANNEL_0(0,"公众号/H5支付渠道"),
PAY_CHANNEL_1(1,"小程序支付渠道"),
DESK_ORDER_STATUS_CONFIRM(0,"确认完成"),
DESK_ORDER_STATUS_ING(1,"就餐中"),
SHIPPIING_TYPE_1(1,"快递"),
SHIPPIING_TYPE_2(2,"门店自提");
private Integer value;
private String desc;
public static OrderInfoEnum toType(int value) {
return Stream.of(OrderInfoEnum.values())
.filter(p -> p.value == value)
.findAny()
.orElse(null);
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/OrderTypeEnum.java
================================================
package co.yixiang.yshop.framework.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author hupeng
* 类型枚举
*/
@Getter
@AllArgsConstructor
public enum OrderTypeEnum {
TYPE_WORK("work","工作台"),
TYPE_COMMON("common","普通");
private String value;
private String desc;
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/PayIdEnum.java
================================================
package co.yixiang.yshop.framework.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author hupeng
* 支付ID枚举
*/
@Getter
@AllArgsConstructor
public enum PayIdEnum {
WX_H5("wx_h5","微信支付H5"),
WX_MINIAPP("wx_miniapp","微信支付小程序"),
WX_WECHAT("wx_wechat","微信支付公众号"),
WX_PC("wx_pc","微信支付pc"),
WX_APP("wx_app","微信支付app"),
ALI_H5("ali_h5","支付宝H5"),
ALI_MINIAPP("ali_miniapp","支付宝小程序"),
ALI_WECHAT("ali_wechat","支付宝公众号"),
ALI_PC("ali_pc","支付宝pc"),
ALI_APP("ali_app","支付宝app");
private String value;
private String desc;
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/ShopCommonEnum.java
================================================
package co.yixiang.yshop.framework.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author hupeng
* 商城常用枚举
*/
@Getter
@AllArgsConstructor
public enum ShopCommonEnum {
STORE_MODE_1(1,"本地存储"),
STORE_MODE_2(2,"云存储"),
ENABLE_1(1,"开启"),
ENABLE_2(2,"关闭"),
EXTRACT_MINUS_1(-1,"提现未通过"),
EXTRACT_0(0,"提现审核中"),
EXTRACT_1(1,"提现已完成"),
IS_FINISH_0(0,"未完成"),
IS_FINISH_1(1,"已完成"),
IS_FOREVER_0(0,"不是永久"),
IS_FOREVER_1(1,"永久"),
AGREE_1(1,"同意"),
AGREE_2(2,"拒绝"),
IS_PERMANENT_0(0,"限制"),
IS_PERMANENT_1(1,"不限制"),
IS_STATUS_0(0,"否"),
IS_STATUS_1(1,"是"),
IS_PROMOTER_0(0,"默认"),
IS_PROMOTER_1(1,"是客服"),
IS_NEW_0(0,"默认"),
IS_NEW_1(1,"新品"),
IS_SUB_0(0,"不单独分佣"),
IS_SUB_1(1,"单独分佣"),
GRADE_0(0,"一级推荐人"),
GRADE_1(1,"二级推荐人"),
REPLY_0(0,"未回复"),
REPLY_1(1,"已回复"),
ADD_1(1,"增加"),
ADD_2(2,"减少"),
DELETE_0(0,"未删除"),
DELETE_1(1,"已删除"),
SHOW_0(0,"不显示"),
SHOW_1(1,"显示"),
DEFAULT_0(0,"不是默认"),
DEFAULT_1(1,"默认");
private Integer value;
private String desc;
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/TerminalEnum.java
================================================
package co.yixiang.yshop.framework.common.enums;
import co.yixiang.yshop.framework.common.core.IntArrayValuable;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import java.util.Arrays;
/**
* 终端的枚举
*
* @author yshop
*/
@RequiredArgsConstructor
@Getter
public enum TerminalEnum implements IntArrayValuable {
UNKNOWN(0, "未知"), // 目的:在无法解析到 terminal 时,使用它
WECHAT_MINI_PROGRAM(10, "微信小程序"),
WECHAT_WAP(11, "微信公众号"),
H5(20, "H5 网页"),
APP(31, "手机 App"),
;
public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(TerminalEnum::getTerminal).toArray();
/**
* 终端
*/
private final Integer terminal;
/**
* 终端名
*/
private final String name;
@Override
public int[] array() {
return ARRAYS;
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/UserTypeEnum.java
================================================
package co.yixiang.yshop.framework.common.enums;
import cn.hutool.core.util.ArrayUtil;
import co.yixiang.yshop.framework.common.core.IntArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* 全局用户类型枚举
*/
@AllArgsConstructor
@Getter
public enum UserTypeEnum implements IntArrayValuable {
MEMBER(1, "会员"), // 面向 c 端,普通用户
ADMIN(2, "管理员"); // 面向 b 端,管理后台
public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(UserTypeEnum::getValue).toArray();
/**
* 类型
*/
private final Integer value;
/**
* 类型名
*/
private final String name;
public static UserTypeEnum valueOf(Integer value) {
return ArrayUtil.firstMatch(userType -> userType.getValue().equals(value), UserTypeEnum.values());
}
@Override
public int[] array() {
return ARRAYS;
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/WebFilterOrderEnum.java
================================================
package co.yixiang.yshop.framework.common.enums;
/**
* Web 过滤器顺序的枚举类,保证过滤器按照符合我们的预期
*
* 考虑到每个 starter 都需要用到该工具类,所以放到 common 模块下的 enums 包下
*
* @author yshop
*/
public interface WebFilterOrderEnum {
int CORS_FILTER = Integer.MIN_VALUE;
int TRACE_FILTER = CORS_FILTER + 1;
int REQUEST_BODY_CACHE_FILTER = Integer.MIN_VALUE + 500;
// OrderedRequestContextFilter 默认为 -105,用于国际化上下文等等
int TENANT_CONTEXT_FILTER = - 104; // 需要保证在 ApiAccessLogFilter 前面
int API_ACCESS_LOG_FILTER = -103; // 需要保证在 RequestBodyCacheFilter 后面
int XSS_FILTER = -102; // 需要保证在 RequestBodyCacheFilter 后面
// Spring Security Filter 默认为 -100,可见 org.springframework.boot.autoconfigure.security.SecurityProperties 配置属性类
int TENANT_SECURITY_FILTER = -99; // 需要保证在 Spring Security 过滤器后面
int FLOWABLE_FILTER = -98; // 需要保证在 Spring Security 过滤后面
int DEMO_FILTER = Integer.MAX_VALUE;
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/exception/ErrorCode.java
================================================
package co.yixiang.yshop.framework.common.exception;
import co.yixiang.yshop.framework.common.exception.enums.GlobalErrorCodeConstants;
import co.yixiang.yshop.framework.common.exception.enums.ServiceErrorCodeRange;
import lombok.Data;
/**
* 错误码对象
*
* 全局错误码,占用 [0, 999], 参见 {@link GlobalErrorCodeConstants}
* 业务异常错误码,占用 [1 000 000 000, +∞),参见 {@link ServiceErrorCodeRange}
*
* TODO 错误码设计成对象的原因,为未来的 i18 国际化做准备
*/
@Data
public class ErrorCode {
/**
* 错误码
*/
private final Integer code;
/**
* 错误提示
*/
private final String msg;
public ErrorCode(Integer code, String message) {
this.code = code;
this.msg = message;
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/exception/ServerException.java
================================================
package co.yixiang.yshop.framework.common.exception;
import co.yixiang.yshop.framework.common.exception.enums.GlobalErrorCodeConstants;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 服务器异常 Exception
*/
@Data
@EqualsAndHashCode(callSuper = true)
public final class ServerException extends RuntimeException {
/**
* 全局错误码
*
* @see GlobalErrorCodeConstants
*/
private Integer code;
/**
* 错误提示
*/
private String message;
/**
* 空构造方法,避免反序列化问题
*/
public ServerException() {
}
public ServerException(ErrorCode errorCode) {
this.code = errorCode.getCode();
this.message = errorCode.getMsg();
}
public ServerException(Integer code, String message) {
this.code = code;
this.message = message;
}
public Integer getCode() {
return code;
}
public ServerException setCode(Integer code) {
this.code = code;
return this;
}
@Override
public String getMessage() {
return message;
}
public ServerException setMessage(String message) {
this.message = message;
return this;
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/exception/ServiceException.java
================================================
package co.yixiang.yshop.framework.common.exception;
import co.yixiang.yshop.framework.common.exception.enums.ServiceErrorCodeRange;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 业务逻辑异常 Exception
*/
@Data
@EqualsAndHashCode(callSuper = true)
public final class ServiceException extends RuntimeException {
/**
* 业务错误码
*
* @see ServiceErrorCodeRange
*/
private Integer code;
/**
* 错误提示
*/
private String message;
/**
* 空构造方法,避免反序列化问题
*/
public ServiceException() {
}
public ServiceException(ErrorCode errorCode) {
this.code = errorCode.getCode();
this.message = errorCode.getMsg();
}
public ServiceException(Integer code, String message) {
this.code = code;
this.message = message;
}
public Integer getCode() {
return code;
}
public ServiceException setCode(Integer code) {
this.code = code;
return this;
}
@Override
public String getMessage() {
return message;
}
public ServiceException setMessage(String message) {
this.message = message;
return this;
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/exception/enums/GlobalErrorCodeConstants.java
================================================
package co.yixiang.yshop.framework.common.exception.enums;
import co.yixiang.yshop.framework.common.exception.ErrorCode;
/**
* 全局错误码枚举
* 0-999 系统异常编码保留
*
* 一般情况下,使用 HTTP 响应状态码 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status
* 虽然说,HTTP 响应状态码作为业务使用表达能力偏弱,但是使用在系统层面还是非常不错的
* 比较特殊的是,因为之前一直使用 0 作为成功,就不使用 200 啦。
*
* @author yshop
*/
public interface GlobalErrorCodeConstants {
ErrorCode SUCCESS = new ErrorCode(0, "成功");
// ========== 客户端错误段 ==========
ErrorCode BAD_REQUEST = new ErrorCode(400, "请求参数不正确");
ErrorCode UNAUTHORIZED = new ErrorCode(401, "账号未登录");
ErrorCode FORBIDDEN = new ErrorCode(403, "没有该操作权限");
ErrorCode NOT_FOUND = new ErrorCode(404, "请求未找到");
ErrorCode METHOD_NOT_ALLOWED = new ErrorCode(405, "请求方法不正确");
ErrorCode LOCKED = new ErrorCode(423, "请求失败,请稍后重试"); // 并发请求,不允许
ErrorCode TOO_MANY_REQUESTS = new ErrorCode(429, "请求过于频繁,请稍后重试");
// ========== 服务端错误段 ==========
ErrorCode INTERNAL_SERVER_ERROR = new ErrorCode(500, "系统异常");
ErrorCode NOT_IMPLEMENTED = new ErrorCode(501, "功能未实现/未开启");
ErrorCode ERROR_CONFIGURATION = new ErrorCode(502, "错误的配置项");
// ========== 自定义错误段 ==========
ErrorCode REPEATED_REQUESTS = new ErrorCode(900, "重复请求,请稍后重试"); // 重复请求
ErrorCode DEMO_DENY = new ErrorCode(901, "演示模式,禁止写操作");
ErrorCode UNKNOWN = new ErrorCode(999, "未知错误");
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/exception/enums/ServiceErrorCodeRange.java
================================================
package co.yixiang.yshop.framework.common.exception.enums;
/**
* 业务异常的错误码区间,解决:解决各模块错误码定义,避免重复,在此只声明不做实际使用
*
* 一共 10 位,分成四段
*
* 第一段,1 位,类型
* 1 - 业务级别异常
* x - 预留
* 第二段,3 位,系统类型
* 001 - 用户系统
* 002 - 商品系统
* 003 - 订单系统
* 004 - 支付系统
* 005 - 优惠劵系统
* ... - ...
* 第三段,3 位,模块
* 不限制规则。
* 一般建议,每个系统里面,可能有多个模块,可以再去做分段。以用户系统为例子:
* 001 - OAuth2 模块
* 002 - User 模块
* 003 - MobileCode 模块
* 第四段,3 位,错误码
* 不限制规则。
* 一般建议,每个模块自增。
*
* @author yshop
*/
public class ServiceErrorCodeRange {
// 模块 infra 错误码区间 [1-001-000-000 ~ 1-002-000-000)
// 模块 system 错误码区间 [1-002-000-000 ~ 1-003-000-000)
// 模块 report 错误码区间 [1-003-000-000 ~ 1-004-000-000)
// 模块 member 错误码区间 [1-004-000-000 ~ 1-005-000-000)
// 模块 mp 错误码区间 [1-006-000-000 ~ 1-007-000-000)
// 模块 pay 错误码区间 [1-007-000-000 ~ 1-008-000-000)
// 模块 bpm 错误码区间 [1-009-000-000 ~ 1-010-000-000)
// 模块 product 错误码区间 [1-008-000-000 ~ 1-009-000-000)
// 模块 trade 错误码区间 [1-011-000-000 ~ 1-012-000-000)
// 模块 promotion 错误码区间 [1-013-000-000 ~ 1-014-000-000)
// 模块 crm 错误码区间 [1-020-000-000 ~ 1-021-000-000)
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/exception/util/ServiceExceptionUtil.java
================================================
package co.yixiang.yshop.framework.common.exception.util;
import co.yixiang.yshop.framework.common.exception.ErrorCode;
import co.yixiang.yshop.framework.common.exception.ServiceException;
import co.yixiang.yshop.framework.common.exception.enums.GlobalErrorCodeConstants;
import com.google.common.annotations.VisibleForTesting;
import lombok.extern.slf4j.Slf4j;
/**
* {@link ServiceException} 工具类
*
* 目的在于,格式化异常信息提示。
* 考虑到 String.format 在参数不正确时会报错,因此使用 {} 作为占位符,并使用 {@link #doFormat(int, String, Object...)} 方法来格式化
*
*/
@Slf4j
public class ServiceExceptionUtil {
// ========== 和 ServiceException 的集成 ==========
public static ServiceException exception(ErrorCode errorCode) {
return exception0(errorCode.getCode(), errorCode.getMsg());
}
public static ServiceException exception(ErrorCode errorCode, Object... params) {
return exception0(errorCode.getCode(), errorCode.getMsg(), params);
}
public static ServiceException exception0(Integer code, String messagePattern, Object... params) {
String message = doFormat(code, messagePattern, params);
return new ServiceException(code, message);
}
public static ServiceException invalidParamException(String messagePattern, Object... params) {
return exception0(GlobalErrorCodeConstants.BAD_REQUEST.getCode(), messagePattern, params);
}
// ========== 格式化方法 ==========
/**
* 将错误编号对应的消息使用 params 进行格式化。
*
* @param code 错误编号
* @param messagePattern 消息模版
* @param params 参数
* @return 格式化后的提示
*/
@VisibleForTesting
public static String doFormat(int code, String messagePattern, Object... params) {
StringBuilder sbuf = new StringBuilder(messagePattern.length() + 50);
int i = 0;
int j;
int l;
for (l = 0; l < params.length; l++) {
j = messagePattern.indexOf("{}", i);
if (j == -1) {
log.error("[doFormat][参数过多:错误码({})|错误内容({})|参数({})", code, messagePattern, params);
if (i == 0) {
return messagePattern;
} else {
sbuf.append(messagePattern.substring(i));
return sbuf.toString();
}
} else {
sbuf.append(messagePattern, i, j);
sbuf.append(params[l]);
i = j + 2;
}
}
if (messagePattern.indexOf("{}", i) != -1) {
log.error("[doFormat][参数过少:错误码({})|错误内容({})|参数({})", code, messagePattern, params);
}
sbuf.append(messagePattern.substring(i));
return sbuf.toString();
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/params/QueryParam.java
================================================
/**
* Copyright (C) 2018-2022
* All rights reserved, Designed By www.yixiang.co
*/
package co.yixiang.yshop.framework.common.params;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
@Data
@Schema(description = "用户 APP - 查询参数对象")
public abstract class QueryParam implements Serializable{
private static final long serialVersionUID = -3263921252635611410L;
@Schema(description = "页码,默认为1", required = true)
private Integer page =1;
@Schema(description = "页大小,默认为10", required = true)
private Integer limit = 10;
@Schema(description = "搜索字符串", required = true)
private String keyword;
// @Schema(description = "当前第几页", required = true)
// public void setCurrent(Integer current) {
// if (current == null || current <= 0){
// this.page = 1;
// }else{
// this.page = current;
// }
// }
//
// public void setSize(Integer size) {
// if (size == null || size <= 0){
// this.limit = 10;
// }else{
// this.limit = size;
// }
// }
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/pojo/CommonResult.java
================================================
package co.yixiang.yshop.framework.common.pojo;
import co.yixiang.yshop.framework.common.exception.ErrorCode;
import co.yixiang.yshop.framework.common.exception.ServiceException;
import co.yixiang.yshop.framework.common.exception.enums.GlobalErrorCodeConstants;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import org.springframework.util.Assert;
import java.io.Serializable;
import java.util.Objects;
/**
* 通用返回
*
* @param <T> 数据泛型
*/
@Data
public class CommonResult<T> implements Serializable {
/**
* 错误码
*
* @see ErrorCode#getCode()
*/
private Integer code;
/**
* 返回数据
*/
private T data;
/**
* 错误提示,用户可阅读
*
* @see ErrorCode#getMsg() ()
*/
private String msg;
/**
* 将传入的 result 对象,转换成另外一个泛型结果的对象
*
* 因为 A 方法返回的 CommonResult 对象,不满足调用其的 B 方法的返回,所以需要进行转换。
*
* @param result 传入的 result 对象
* @param <T> 返回的泛型
* @return 新的 CommonResult 对象
*/
public static <T> CommonResult<T> error(CommonResult<?> result) {
return error(result.getCode(), result.getMsg());
}
public static <T> CommonResult<T> error(Integer code, String message) {
Assert.isTrue(!GlobalErrorCodeConstants.SUCCESS.getCode().equals(code), "code 必须是错误的!");
CommonResult<T> result = new CommonResult<>();
result.code = code;
result.msg = message;
return result;
}
public static <T> CommonResult<T> error(ErrorCode errorCode) {
return error(errorCode.getCode(), errorCode.getMsg());
}
public static <T> CommonResult<T> success(T data) {
CommonResult<T> result = new CommonResult<>();
result.code = GlobalErrorCodeConstants.SUCCESS.getCode();
result.data = data;
result.msg = "";
return result;
}
public static boolean isSuccess(Integer code) {
return Objects.equals(code, GlobalErrorCodeConstants.SUCCESS.getCode());
}
@JsonIgnore // 避免 jackson 序列化
public boolean isSuccess() {
return isSuccess(code);
}
@JsonIgnore // 避免 jackson 序列化
public boolean isError() {
return !isSuccess();
}
// ========= 和 Exception 异常体系集成 =========
/**
* 判断是否有异常。如果有,则抛出 {@link ServiceException} 异常
*/
public void checkError() throws ServiceException {
if (isSuccess()) {
return;
}
// 业务异常
throw new ServiceException(code, msg);
}
/**
* 判断是否有异常。如果有,则抛出 {@link ServiceException} 异常
* 如果没有,则返回 {@link #data} 数据
*/
@JsonIgnore // 避免 jackson 序列化
public T getCheckedData() {
checkError();
return data;
}
public static <T> CommonResult<T> error(ServiceException serviceException) {
return error(serviceException.getCode(), serviceException.getMessage());
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/pojo/PageParam.java
================================================
package co.yixiang.yshop.framework.common.pojo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.NotNull;
import java.io.Serializable;
@Schema(description="分页参数")
@Data
public class PageParam implements Serializable {
private static final Integer PAGE_NO = 1;
private static final Integer PAGE_SIZE = 10;
/**
* 每页条数 - 不分页
*
* 例如说,导出接口,可以设置 {@link #pageSize} 为 -1 不分页,查询所有数据。
*/
public static final Integer PAGE_SIZE_NONE = -1;
@Schema(description = "页码,从 1 开始", requiredMode = Schema.RequiredMode.REQUIRED,example = "1")
@NotNull(message = "页码不能为空")
@Min(value = 1, message = "页码最小值为 1")
private Integer pageNo = PAGE_NO;
@Schema(description = "每页条数,最大值为 100", requiredMode = Schema.RequiredMode.REQUIRED, example = "10")
@NotNull(message = "每页条数不能为空")
@Min(value = 1, message = "每页条数最小值为 1")
@Max(value = 100, message = "每页条数最大值为 100")
private Integer pageSize = PAGE_SIZE;
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/pojo/PageResult.java
================================================
package co.yixiang.yshop.framework.common.pojo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@Schema(description = "分页结果")
@Data
public final class PageResult<T> implements Serializable {
@Schema(description = "数据", requiredMode = Schema.RequiredMode.REQUIRED)
private List<T> list;
@Schema(description = "总量", requiredMode = Schema.RequiredMode.REQUIRED)
private Long total;
public PageResult() {
}
public PageResult(List<T> list, Long total) {
this.list = list;
this.total = total;
}
public PageResult(Long total) {
this.list = new ArrayList<>();
this.total = total;
}
public static <T> PageResult<T> empty() {
return new PageResult<>(0L);
}
public static <T> PageResult<T> empty(Long total) {
return new PageResult<>(total);
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/pojo/SortablePageParam.java
================================================
package co.yixiang.yshop.framework.common.pojo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.util.List;
@Schema(description = "可排序的分页参数")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class SortablePageParam extends PageParam {
@Schema(description = "排序字段")
private List<SortingField> sortingFields;
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/pojo/SortingField.java
================================================
package co.yixiang.yshop.framework.common.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* 排序字段 DTO
*
* 类名加了 ing 的原因是,避免和 ES SortField 重名。
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SortingField implements Serializable {
/**
* 顺序 - 升序
*/
public static final String ORDER_ASC = "asc";
/**
* 顺序 - 降序
*/
public static final String ORDER_DESC = "desc";
/**
* 字段
*/
private String field;
/**
* 顺序
*/
private String order;
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/serializer/BigDecimalSerializer.java
================================================
package co.yixiang.yshop.framework.common.serializer;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.DecimalFormat;
/**
* @author :LionCity
* @date :Created in 2020-05-30 14:12
* @description:
* @modified By:
* @version:
*/
public class BigDecimalSerializer extends JsonSerializer<BigDecimal> {
@Override
public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializerProvider) throws IOException {
if (value != null && !"".equals(value)) {
DecimalFormat df2 =new DecimalFormat("0.00");
gen.writeString(df2.format(value));
} else {
gen.writeString(value + "");
}
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/serializer/DoubleSerializer.java
================================================
package co.yixiang.yshop.framework.common.serializer;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.text.DecimalFormat;
/**
* @author :LionCity
* @date :Created in 2020-05-30 14:12
* @description:
* @modified By:
* @version:
*/
public class DoubleSerializer extends JsonSerializer<Double> {
@Override
public void serialize(Double value, JsonGenerator gen, SerializerProvider serializerProvider) throws IOException {
if (value != null && !"".equals(value)) {
DecimalFormat df2 =new DecimalFormat("0.00");
gen.writeString(df2.format(value));
} else {
gen.writeString(value + "");
}
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/cache/CacheUtils.java
================================================
package co.yixiang.yshop.framework.common.util.cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import java.time.Duration;
import java.util.concurrent.Executors;
/**
* Cache 工具类
*
* @author yshop
*/
public class CacheUtils {
/**
* 构建异步刷新的 LoadingCache 对象
*
* 注意:如果你的缓存和 ThreadLocal 有关系,要么自己处理 ThreadLocal 的传递,要么使用 {@link #buildCache(Duration, CacheLoader)} 方法
*
* 或者简单理解:
* 1、和“人”相关的,使用 {@link #buildCache(Duration, CacheLoader)} 方法
* 2、和“全局”、“系统”相关的,使用当前缓存方法
*
* @param duration 过期时间
* @param loader CacheLoader 对象
* @return LoadingCache 对象
*/
public static <K, V> LoadingCache<K, V> buildAsyncReloadingCache(Duration duration, CacheLoader<K, V> loader) {
return CacheBuilder.newBuilder()
// 只阻塞当前数据加载线程,其他线程返回旧值
.refreshAfterWrite(duration)
// 通过 asyncReloading 实现全异步加载,包括 refreshAfterWrite 被阻塞的加载线程
.build(CacheLoader.asyncReloading(loader, Executors.newCachedThreadPool())); // TODO yshop:可能要思考下,未来要不要做成可配置
}
/**
* 构建同步刷新的 LoadingCache 对象
*
* @param duration 过期时间
* @param loader CacheLoader 对象
* @return LoadingCache 对象
*/
public static <K, V> LoadingCache<K, V> buildCache(Duration duration, CacheLoader<K, V> loader) {
return CacheBuilder.newBuilder().refreshAfterWrite(duration).build(loader);
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/collection/ArrayUtils.java
================================================
package co.yixiang.yshop.framework.common.util.collection;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.collection.IterUtil;
import cn.hutool.core.util.ArrayUtil;
import java.util.Collection;
import java.util.function.Consumer;
import java.util.function.Function;
import static co.yixiang.yshop.framework.common.util.collection.CollectionUtils.convertList;
/**
* Array 工具类
*
* @author yshop
*/
public class ArrayUtils {
/**
* 将 object 和 newElements 合并成一个数组
*
* @param object 对象
* @param newElements 数组
* @param <T> 泛型
* @return 结果数组
*/
@SafeVarargs
public static <T> Consumer<T>[] append(Consumer<T> object, Consumer<T>... newElements) {
if (object == null) {
return newElements;
}
Consumer<T>[] result = ArrayUtil.newArray(Consumer.class, 1 + newElements.length);
result[0] = object;
System.arraycopy(newElements, 0, result, 1, newElements.length);
return result;
}
public static <T, V> V[] toArray(Collection<T> from, Function<T, V> mapper) {
return toArray(convertList(from, mapper));
}
@SuppressWarnings("unchecked")
public static <T> T[] toArray(Collection<T> from) {
if (CollectionUtil.isEmpty(from)) {
return (T[]) (new Object[0]);
}
return ArrayUtil.toArray(from, (Class<T>) IterUtil.getElementType(from.iterator()));
}
public static <T> T get(T[] array, int index) {
if (null == array || index >= array.length) {
return null;
}
return array[index];
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/collection/CollectionUtils.java
================================================
package co.yixiang.yshop.framework.common.util.collection;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ArrayUtil;
import com.google.common.collect.ImmutableMap;
import java.util.*;
import java.util.function.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static java.util.Arrays.asList;
/**
* Collection 工具类
*
* @author yshop
*/
public class CollectionUtils {
public static boolean containsAny(Object source, Object... targets) {
return asList(targets).contains(source);
}
public static boolean isAnyEmpty(Collection<?>... collections) {
return Arrays.stream(collections).anyMatch(CollectionUtil::isEmpty);
}
public static <T> boolean anyMatch(Collection<T> from, Predicate<T> predicate) {
return from.stream().anyMatch(predicate);
}
public static <T> List<T> filterList(Collection<T> from, Predicate<T> predicate) {
if (CollUtil.isEmpty(from)) {
return new ArrayList<>();
}
return from.stream().filter(predicate).collect(Collectors.toList());
}
public static <T, R> List<T> distinct(Collection<T> from, Function<T, R> keyMapper) {
if (CollUtil.isEmpty(from)) {
return new ArrayList<>();
}
return distinct(from, keyMapper, (t1, t2) -> t1);
}
public static <T, R> List<T> distinct(Collection<T> from, Function<T, R> keyMapper, BinaryOperator<T> cover) {
if (CollUtil.isEmpty(from)) {
return new ArrayList<>();
}
return new ArrayList<>(convertMap(from, keyMapper, Function.identity(), cover).values());
}
public static <T, U> List<U> convertList(T[] from, Function<T, U> func) {
if (ArrayUtil.isEmpty(from)) {
return new ArrayList<>();
}
return convertList(Arrays.asList(from), func);
}
public static <T, U> List<U> convertList(Collection<T> from, Function<T, U> func) {
if (CollUtil.isEmpty(from)) {
return new ArrayList<>();
}
return from.stream().map(func).filter(Objects::nonNull).collect(Collectors.toList());
}
public static <T, U> List<U> convertList(Collection<T> from, Function<T, U> func, Predicate<T> filter) {
if (CollUtil.isEmpty(from)) {
return new ArrayList<>();
}
return from.stream().filter(filter).map(func).filter(Objects::nonNull).collect(Collectors.toList());
}
public static <T, U> List<U> convertListByFlatMap(Collection<T> from,
Function<T, ? extends Stream<? extends U>> func) {
if (CollUtil.isEmpty(from)) {
return new ArrayList<>();
}
return from.stream().filter(Objects::nonNull).flatMap(func).filter(Objects::nonNull).collect(Collectors.toList());
}
public static <T, U, R> List<R> convertListByFlatMap(Collection<T> from,
Function<? super T, ? extends U> mapper,
Function<U, ? extends Stream<? extends R>> func) {
if (CollUtil.isEmpty(from)) {
return new ArrayList<>();
}
return from.stream().map(mapper).filter(Objects::nonNull).flatMap(func).filter(Objects::nonNull).collect(Collectors.toList());
}
public static <K, V> List<V> mergeValuesFromMap(Map<K, List<V>> map) {
return map.values()
.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
}
public static <T> Set<T> convertSet(Collection<T> from) {
return convertSet(from, v -> v);
}
public static <T, U> Set<U> convertSet(Collection<T> from, Function<T, U> func) {
if (CollUtil.isEmpty(from)) {
return new HashSet<>();
}
return from.stream().map(func).filter(Objects::nonNull).collect(Collectors.toSet());
}
public static <T, U> Set<U> convertSet(Collection<T> from, Function<T, U> func, Predicate<T> filter) {
if (CollUtil.isEmpty(from)) {
return new HashSet<>();
}
return from.stream().filter(filter).map(func).filter(Objects::nonNull).collect(Collectors.toSet());
}
public static <T, K> Map<K, T> convertMapByFilter(Collection<T> from, Predicate<T> filter, Function<T, K> keyFunc) {
if (CollUtil.isEmpty(from)) {
return new HashMap<>();
}
return from.stream().filter(filter).collect(Collectors.toMap(keyFunc, v -> v));
}
public static <T, U> Set<U> convertSetByFlatMap(Collection<T> from,
Function<T, ? extends Stream<? extends U>> func) {
if (CollUtil.isEmpty(from)) {
return new HashSet<>();
}
return from.stream().filter(Objects::nonNull).flatMap(func).filter(Objects::nonNull).collect(Collectors.toSet());
}
public static <T, U, R> Set<R> convertSetByFlatMap(Collection<T> from,
Function<? super T, ? extends U> mapper,
Function<U, ? extends Stream<? extends R>> func) {
if (CollUtil.isEmpty(from)) {
return new HashSet<>();
}
return from.stream().map(mapper).filter(Objects::nonNull).flatMap(func).filter(Objects::nonNull).collect(Collectors.toSet());
}
public static <T, K> Map<K, T> convertMap(Collection<T> from, Function<T, K> keyFunc) {
if (CollUtil.isEmpty(from)) {
return new HashMap<>();
}
return convertMap(from, keyFunc, Function.identity());
}
public static <T, K> Map<K, T> convertMap(Collection<T> from, Function<T, K> keyFunc, Supplier<? extends Map<K, T>> supplier) {
if (CollUtil.isEmpty(from)) {
return supplier.get();
}
return convertMap(from, keyFunc, Function.identity(), supplier);
}
public static <T, K, V> Map<K, V> convertMap(Collection<T> from, Function<T, K> keyFunc, Function<T, V> valueFunc) {
if (CollUtil.isEmpty(from)) {
return new HashMap<>();
}
return convertMap(from, keyFunc, valueFunc, (v1, v2) -> v1);
}
public static <T, K, V> Map<K, V> convertMap(Collection<T> from, Function<T, K> keyFunc, Function<T, V> valueFunc, BinaryOperator<V> mergeFunction) {
if (CollUtil.isEmpty(from)) {
return new HashMap<>();
}
return convertMap(from, keyFunc, valueFunc, mergeFunction, HashMap::new);
}
public static <T, K, V> Map<K, V> convertMap(Collection<T> from, Function<T, K> keyFunc, Function<T, V> valueFunc, Supplier<? extends Map<K, V>> supplier) {
if (CollUtil.isEmpty(from)) {
return supplier.get();
}
return convertMap(from, keyFunc, valueFunc, (v1, v2) -> v1, supplier);
}
public static <T, K, V> Map<K, V> convertMap(Collection<T> from, Function<T, K> keyFunc, Function<T, V> valueFunc, BinaryOperator<V> mergeFunction, Supplier<? extends Map<K, V>> supplier) {
if (CollUtil.isEmpty(from)) {
return new HashMap<>();
}
return from.stream().collect(Collectors.toMap(keyFunc, valueFunc, mergeFunction, supplier));
}
public static <T, K> Map<K, List<T>> convertMultiMap(Collection<T> from, Function<T, K> keyFunc) {
if (CollUtil.isEmpty(from)) {
return new HashMap<>();
}
return from.stream().collect(Collectors.groupingBy(keyFunc, Collectors.mapping(t -> t, Collectors.toList())));
}
public static <T, K, V> Map<K, List<V>> convertMultiMap(Collection<T> from, Function<T, K> keyFunc, Function<T, V> valueFunc) {
if (CollUtil.isEmpty(from)) {
return new HashMap<>();
}
return from.stream()
.collect(Collectors.groupingBy(keyFunc, Collectors.mapping(valueFunc, Collectors.toList())));
}
// 暂时没想好名字,先以 2 结尾噶
public static <T, K, V> Map<K, Set<V>> convertMultiMap2(Collection<T> from, Function<T, K> keyFunc, Function<T, V> valueFunc) {
if (CollUtil.isEmpty(from)) {
return new HashMap<>();
}
return from.stream().collect(Collectors.groupingBy(keyFunc, Collectors.mapping(valueFunc, Collectors.toSet())));
}
public static <T, K> Map<K, T> convertImmutableMap(Collection<T> from, Function<T, K> keyFunc) {
if (CollUtil.isEmpty(from)) {
return Collections.emptyMap();
}
ImmutableMap.Builder<K, T> builder = ImmutableMap.builder();
from.forEach(item -> builder.put(keyFunc.apply(item), item));
return builder.build();
}
/**
* 对比老、新两个列表,找出新增、修改、删除的数据
*
* @param oldList 老列表
* @param newList 新列表
* @param sameFunc 对比函数,返回 true 表示相同,返回 false 表示不同
* 注意,same 是通过每个元素的“标识”,判断它们是不是同一个数据
* @return [新增列表、修改列表、删除列表]
*/
public static <T> List<List<T>> diffList(Collection<T> oldList, Collection<T> newList,
BiFunction<T, T, Boolean> sameFunc) {
List<T> createList = new LinkedList<>(newList); // 默认都认为是新增的,后续会进行移除
List<T> updateList = new ArrayList<>();
List<T> deleteList = new ArrayList<>();
// 通过以 oldList 为主遍历,找出 updateList 和 deleteList
for (T oldObj : oldList) {
// 1. 寻找是否有匹配的
T foundObj = null;
for (Iterator<T> iterator = createList.iterator(); iterator.hasNext(); ) {
T newObj = iterator.next();
// 1.1 不匹配,则直接跳过
if (!sameFunc.apply(oldObj, newObj)) {
continue;
}
// 1.2 匹配,则移除,并结束寻找
iterator.remove();
foundObj = newObj;
break;
}
// 2. 匹配添加到 updateList;不匹配则添加到 deleteList 中
if (foundObj != null) {
updateList.add(foundObj);
} else {
deleteList.add(oldObj);
}
}
return asList(createList, updateList, deleteList);
}
public static boolean containsAny(Collection<?> source, Collection<?> candidates) {
return org.springframework.util.CollectionUtils.containsAny(source, candidates);
}
public static <T> T getFirst(List<T> from) {
return !CollectionUtil.isEmpty(from) ? from.get(0) : null;
}
public static <T> T findFirst(Collection<T> from, Predicate<T> predicate) {
return findFirst(from, predicate, Function.identity());
}
public static <T, U> U findFirst(Collection<T> from, Predicate<T> predicate, Function<T, U> func) {
if (CollUtil.isEmpty(from)) {
return null;
}
return from.stream().filter(predicate).findFirst().map(func).orElse(null);
}
public static <T, V extends Comparable<? super V>> V getMaxValue(Collection<T> from, Function<T, V> valueFunc) {
if (CollUtil.isEmpty(from)) {
return null;
}
assert !from.isEmpty(); // 断言,避免告警
T t = from.stream().max(Comparator.comparing(valueFunc)).get();
return valueFunc.apply(t);
}
public static <T, V extends Comparable<? super V>> V getMinValue(List<T> from, Function<T, V> valueFunc) {
if (CollUtil.isEmpty(from)) {
return null;
}
assert from.size() > 0; // 断言,避免告警
T t = from.stream().min(Comparator.comparing(valueFunc)).get();
return valueFunc.apply(t);
}
public static <T, V extends Comparable<? super V>> V getSumValue(List<T> from, Function<T, V> valueFunc,
BinaryOperator<V> accumulator) {
return getSumValue(from, valueFunc, accumulator, null);
}
public static <T, V extends Comparable<? super V>> V getSumValue(Collection<T> from, Function<T, V> valueFunc,
BinaryOperator<V> accumulator, V defaultValue) {
if (CollUtil.isEmpty(from)) {
return defaultValue;
}
assert !from.isEmpty(); // 断言,避免告警
return from.stream().map(valueFunc).filter(Objects::nonNull).reduce(accumulator).orElse(defaultValue);
}
public static <T> void addIfNotNull(Collection<T> coll, T item) {
if (item == null) {
return;
}
coll.add(item);
}
public static <T> Collection<T> singleton(T obj) {
return obj == null ? Collections.emptyList() : Collections.singleton(obj);
}
public static <T> List<T> newArrayList(List<List<T>> list) {
return list.stream().flatMap(Collection::stream).collect(Collectors.toList());
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/collection/MapUtils.java
================================================
package co.yixiang.yshop.framework.common.util.collection;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjUtil;
import co.yixiang.yshop.framework.common.core.KeyValue;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
/**
* Map 工具类
*
* @author yshop
*/
public class MapUtils {
/**
* 从哈希表表中,获得 keys 对应的所有 value 数组
*
* @param multimap 哈希表
* @param keys keys
* @return value 数组
*/
public static <K, V> List<V> getList(Multimap<K, V> multimap, Collection<K> keys) {
List<V> result = new ArrayList<>();
keys.forEach(k -> {
Collection<V> values = multimap.get(k);
if (CollectionUtil.isEmpty(values)) {
return;
}
result.addAll(values);
});
return result;
}
/**
* 从哈希表查找到 key 对应的 value,然后进一步处理
* key 为 null 时, 不处理
* 注意,如果查找到的 value 为 null 时,不进行处理
*
* @param map 哈希表
* @param key key
* @param consumer 进一步处理的逻辑
*/
public static <K, V> void findAndThen(Map<K, V> map, K key, Consumer<V> consumer) {
if (ObjUtil.isNull(key) || CollUtil.isEmpty(map)) {
return;
}
V value = map.get(key);
if (value == null) {
return;
}
consumer.accept(value);
}
public static <K, V> Map<K, V> convertMap(List<KeyValue<K, V>> keyValues) {
Map<K, V> map = Maps.newLinkedHashMapWithExpectedSize(keyValues.size());
keyValues.forEach(keyValue -> map.put(keyValue.getKey(), keyValue.getValue()));
return map;
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/collection/SetUtils.java
================================================
package co.yixiang.yshop.framework.common.util.collection;
import cn.hutool.core.collection.CollUtil;
import java.util.Set;
/**
* Set 工具类
*
* @author yshop
*/
public class SetUtils {
@SafeVarargs
public static <T> Set<T> asSet(T... objs) {
return CollUtil.newHashSet(objs);
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/date/DateUtils.java
================================================
package co.yixiang.yshop.framework.common.util.date;
import cn.hutool.core.date.LocalDateTimeUtil;
import java.time.*;
import java.util.Calendar;
import java.util.Date;
/**
* 时间工具类
*
* @author yshop
*/
public class DateUtils {
/**
* 时区 - 默认
*/
public static final String TIME_ZONE_DEFAULT = "GMT+8";
/**
* 秒转换成毫秒
*/
public static final long SECOND_MILLIS = 1000;
public static final String FORMAT_YEAR_MONTH_DAY = "yyyy-MM-dd";
public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss";
/**
* 将 LocalDateTime 转换成 Date
*
* @param date LocalDateTime
* @return LocalDateTime
*/
public static Date of(LocalDateTime date) {
if (date == null) {
return null;
}
// 将此日期时间与时区相结合以创建 ZonedDateTime
ZonedDateTime zonedDateTime = date.atZone(ZoneId.systemDefault());
// 本地时间线 LocalDateTime 到即时时间线 Instant 时间戳
Instant instant = zonedDateTime.toInstant();
// UTC时间(世界协调时间,UTC + 00:00)转北京(北京,UTC + 8:00)时间
return Date.from(instant);
}
/**
* 将 Date 转换成 LocalDateTime
*
* @param date Date
* @return LocalDateTime
*/
public static LocalDateTime of(Date date) {
if (date == null) {
return null;
}
// 转为时间戳
Instant instant = date.toInstant();
// UTC时间(世界协调时间,UTC + 00:00)转北京(北京,UTC + 8:00)时间
return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
}
public static Date addTime(Duration duration) {
return new Date(System.currentTimeMillis() + duration.toMillis());
}
public static boolean isExpired(LocalDateTime time) {
LocalDateTime now = LocalDateTime.now();
return now.isAfter(time);
}
/**
* 创建指定时间
*
* @param year 年
* @param mouth 月
* @param day 日
* @return 指定时间
*/
public static Date buildTime(int year, int mouth, int day) {
return buildTime(year, mouth, day, 0, 0, 0);
}
/**
* 创建指定时间
*
* @param year 年
* @param mouth 月
* @param day 日
* @param hour 小时
* @param minute 分钟
* @param second 秒
* @return 指定时间
*/
public static Date buildTime(int year, int mouth, int day,
int hour, int minute, int second) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, mouth - 1);
calendar.set(Calendar.DAY_OF_MONTH, day);
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, second);
calendar.set(Calendar.MILLISECOND, 0); // 一般情况下,都是 0 毫秒
return calendar.getTime();
}
public static Date max(Date a, Date b) {
if (a == null) {
return b;
}
if (b == null) {
return a;
}
return a.compareTo(b) > 0 ? a : b;
}
public static LocalDateTime max(LocalDateTime a, LocalDateTime b) {
if (a == null) {
return b;
}
if (b == null) {
return a;
}
return a.isAfter(b) ? a : b;
}
/**
* 是否今天
*
* @param date 日期
* @return 是否
*/
public static boolean isToday(LocalDateTime date) {
return LocalDateTimeUtil.isSameDay(date, LocalDateTime.now());
}
/**
* 是否昨天
*
* @param date 日期
* @return 是否
*/
public static boolean isYesterday(LocalDateTime date) {
return LocalDateTimeUtil.isSameDay(date, LocalDateTime.now().minusDays(1));
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/date/LocalDateTimeUtils.java
================================================
package co.yixiang.yshop.framework.common.util.date;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import co.yixiang.yshop.framework.common.enums.DateIntervalEnum;
import java.time.*;
import java.time.format.DateTimeParseException;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.List;
/**
* 时间工具类,用于 {@link java.time.LocalDateTime}
*
* @author yshop
*/
public class LocalDateTimeUtils {
/**
* 空的 LocalDateTime 对象,主要用于 DB 唯一索引的默认值
*/
public static LocalDateTime EMPTY = buildTime(1970, 1, 1);
/**
* 解析时间
*
* 相比 {@link LocalDateTimeUtil#parse(CharSequence)} 方法来说,会尽量去解析,直到成功
*
* @param time 时间
* @return 时间字符串
*/
public static LocalDateTime parse(String time) {
try {
return LocalDateTimeUtil.parse(time, DatePattern.NORM_DATE_PATTERN);
} catch (DateTimeParseException e) {
return LocalDateTimeUtil.parse(time);
}
}
public static LocalDateTime addTime(Duration duration) {
return LocalDateTime.now().plus(duration);
}
public static LocalDateTime minusTime(Duration duration) {
return LocalDateTime.now().minus(duration);
}
public static boolean beforeNow(LocalDateTime date) {
return date.isBefore(LocalDateTime.now());
}
public static boolean afterNow(LocalDateTime date) {
return date.isAfter(LocalDateTime.now());
}
/**
* 创建指定时间
*
* @param year 年
* @param mouth 月
* @param day 日
* @return 指定时间
*/
public static LocalDateTime buildTime(int year, int mouth, int day) {
return LocalDateTime.of(year, mouth, day, 0, 0, 0);
}
public static LocalDateTime[] buildBetweenTime(int year1, int mouth1, int day1,
int year2, int mouth2, int day2) {
return new LocalDateTime[]{buildTime(year1, mouth1, day1), buildTime(year2, mouth2, day2)};
}
/**
* 判指定断时间,是否在该时间范围内
*
* @param startTime 开始时间
* @param endTime 结束时间
* @param time 指定时间
* @return 是否
*/
public static boolean isBetween(LocalDateTime startTime, LocalDateTime endTime, String time) {
if (startTime == null || endTime == null || time == null) {
return false;
}
return LocalDateTimeUtil.isIn(parse(time), startTime, endTime);
}
/**
* 判断当前时间是否在该时间范围内
*
* @param startTime 开始时间
* @param endTime 结束时间
* @return 是否
*/
public static boolean isBetween(LocalDateTime startTime, LocalDateTime endTime) {
if (startTime == null || endTime == null) {
return false;
}
return LocalDateTimeUtil.isIn(LocalDateTime.now(), startTime, endTime);
}
/**
* 判断当前时间是否在该时间范围内
*
* @param startTime 开始时间
* @param endTime 结束时间
* @return 是否
*/
public static boolean isBetween(String startTime, String endTime) {
if (startTime == null || endTime == null) {
return false;
}
LocalDate nowDate = LocalDate.now();
return LocalDateTimeUtil.isIn(LocalDateTime.now(),
LocalDateTime.of(nowDate, LocalTime.parse(startTime)),
LocalDateTime.of(nowDate, LocalTime.parse(endTime)));
}
/**
* 判断时间段是否重叠
*
* @param startTime1 开始 time1
* @param endTime1 结束 time1
* @param startTime2 开始 time2
* @param endTime2 结束 time2
* @return 重叠:true 不重叠:false
*/
public static boolean isOverlap(LocalTime startTime1, LocalTime endTime1, LocalTime startTime2, LocalTime endTime2) {
LocalDate nowDate = LocalDate.now();
return LocalDateTimeUtil.isOverlap(LocalDateTime.of(nowDate, startTime1), LocalDateTime.of(nowDate, endTime1),
LocalDateTime.of(nowDate, startTime2), LocalDateTime.of(nowDate, endTime2));
}
/**
* 获取指定日期所在的月份的开始时间
* 例如:2023-09-30 00:00:00,000
*
* @param date 日期
* @return 月份的开始时间
*/
public static LocalDateTime beginOfMonth(LocalDateTime date) {
return date.with(TemporalAdjusters.firstDayOfMonth()).with(LocalTime.MIN);
}
/**
* 获取指定日期所在的月份的最后时间
* 例如:2023-09-30 23:59:59,999
*
* @param date 日期
* @return 月份的结束时间
*/
public static LocalDateTime endOfMonth(LocalDateTime date) {
return date.with(TemporalAdjusters.lastDayOfMonth()).with(LocalTime.MAX);
}
/**
* 获得指定日期所在季度
*
* @param date 日期
* @return 所在季度
*/
public static int getQuarterOfYear(LocalDateTime date) {
return (date.getMonthValue() - 1) / 3 + 1;
}
/**
* 获取指定日期到现在过了几天,如果指定日期在当前日期之后,获取结果为负
*
* @param dateTime 日期
* @return 相差天数
*/
public static Long between(LocalDateTime dateTime) {
return LocalDateTimeUtil.between(dateTime, LocalDateTime.now(), ChronoUnit.DAYS);
}
/**
* 获取今天的开始时间
*
* @return 今天
*/
public static LocalDateTime getToday() {
return LocalDateTimeUtil.beginOfDay(LocalDateTime.now());
}
/**
* 获取昨天的开始时间
*
* @return 昨天
*/
public static LocalDateTime getYesterday() {
return LocalDateTimeUtil.beginOfDay(LocalDateTime.now().minusDays(1));
}
/**
* 获取本月的开始时间
*
* @return 本月
*/
public static LocalDateTime getMonth() {
return beginOfMonth(LocalDateTime.now());
}
/**
* 获取本年的开始时间
*
* @return 本年
*/
public static LocalDateTime getYear() {
return LocalDateTime.now().with(TemporalAdjusters.firstDayOfYear()).with(LocalTime.MIN);
}
public static List<LocalDateTime[]> getDateRangeList(LocalDateTime startTime,
LocalDateTime endTime,
Integer interval) {
// 1.1 找到枚举
DateIntervalEnum intervalEnum = DateIntervalEnum.valueOf(interval);
Assert.notNull(intervalEnum, "interval({}} 找不到对应的枚举", interval);
// 1.2 将时间对齐
startTime = LocalDateTimeUtil.beginOfDay(startTime);
endTime = LocalDateTimeUtil.endOfDay(endTime);
// 2. 循环,生成时间范围
List<LocalDateTime[]> timeRanges = new ArrayList<>();
switch (intervalEnum) {
case DAY:
while (startTime.isBefore(endTime)) {
timeRanges.add(new LocalDateTime[]{startTime, startTime.plusDays(1).minusNanos(1)});
startTime = startTime.plusDays(1);
}
break;
case WEEK:
while (startTime.isBefore(endTime)) {
LocalDateTime endOfWeek = startTime.with(DayOfWeek.SUNDAY).plusDays(1).minusNanos(1);
timeRanges.add(new LocalDateTime[]{startTime, endOfWeek});
startTime = endOfWeek.plusNanos(1);
}
break;
case MONTH:
while (startTime.isBefore(endTime)) {
LocalDateTime endOfMonth = startTime.with(TemporalAdjusters.lastDayOfMonth()).plusDays(1).minusNanos(1);
timeRanges.add(new LocalDateTime[]{startTime, endOfMonth});
startTime = endOfMonth.plusNanos(1);
}
break;
case QUARTER:
while (startTime.isBefore(endTime)) {
int quarterOfYear = getQuarterOfYear(startTime);
LocalDateTime quarterEnd = quarterOfYear == 4
? startTime.with(TemporalAdjusters.lastDayOfYear()).plusDays(1).minusNanos(1)
: startTime.withMonth(quarterOfYear * 3 + 1).withDayOfMonth(1).minusNanos(1);
timeRanges.add(new LocalDateTime[]{startTime, quarterEnd});
startTime = quarterEnd.plusNanos(1);
}
break;
case YEAR:
while (startTime.isBefore(endTime)) {
LocalDateTime endOfYear = startTime.with(TemporalAdjusters.lastDayOfYear()).plusDays(1).minusNanos(1);
timeRanges.add(new LocalDateTime[]{startTime, endOfYear});
startTime = endOfYear.plusNanos(1);
}
break;
default:
throw new IllegalArgumentException("Invalid interval: " + interval);
}
// 3. 兜底,最后一个时间,需要保持在 endTime 之前
LocalDateTime[] lastTimeRange = CollUtil.getLast(timeRanges);
if (lastTimeRange != null) {
lastTimeRange[1] = endTime;
}
return timeRanges;
}
/**
* 格式化时间范围
*
* @param startTime 开始时间
* @param endTime 结束时间
* @param interval 时间间隔
* @return 时间范围
*/
public static String formatDateRange(LocalDateTime startTime, LocalDateTime endTime, Integer interval) {
// 1. 找到枚举
DateIntervalEnum intervalEnum = DateIntervalEnum.valueOf(interval);
Assert.notNull(intervalEnum, "interval({}} 找不到对应的枚举", interval);
// 2. 循环,生成时间范围
switch (intervalEnum) {
case DAY:
return LocalDateTimeUtil.format(startTime, DatePattern.NORM_DATE_PATTERN);
case WEEK:
return LocalDateTimeUtil.format(startTime, DatePattern.NORM_DATE_PATTERN)
+ StrUtil.format("(第 {} 周)", LocalDateTimeUtil.weekOfYear(startTime));
case MONTH:
return LocalDateTimeUtil.format(startTime, DatePattern.NORM_MONTH_PATTERN);
case QUARTER:
return StrUtil.format("{}-Q{}", startTime.getYear(), getQuarterOfYear(startTime));
case YEAR:
return LocalDateTimeUtil.format(startTime, DatePattern.NORM_YEAR_PATTERN);
default:
throw new IllegalArgumentException("Invalid interval: " + interval);
}
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/http/HttpUtils.java
================================================
package co.yixiang.yshop.framework.common.util.http;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.map.TableMap;
import cn.hutool.core.net.url.UrlBuilder;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;
import org.springframework.util.StringUtils;
import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder;
import jakarta.servlet.http.HttpServletRequest;
import java.net.URI;
import java.nio.charset.Charset;
import java.util.Map;
/**
* HTTP 工具类
*
* @author yshop
*/
public class HttpUtils {
@SuppressWarnings("unchecked")
public static String replaceUrlQuery(String url, String key, String value) {
UrlBuilder builder = UrlBuilder.of(url, Charset.defaultCharset());
// 先移除
TableMap<CharSequence, CharSequence> query = (TableMap<CharSequence, CharSequence>)
ReflectUtil.getFieldValue(builder.getQuery(), "query");
query.remove(key);
// 后添加
builder.addQuery(key, value);
return builder.build();
}
private String append(String base, Map<String, ?> query, boolean fragment) {
return append(base, query, null, fragment);
}
/**
* 拼接 URL
*
* copy from Spring Security OAuth2 的 AuthorizationEndpoint 类的 append 方法
*
* @param base 基础 URL
* @param query 查询参数
* @param keys query 的 key,对应的原本的 key 的映射。例如说 query 里有个 key 是 xx,实际它的 key 是 extra_xx,则通过 keys 里添加这个映射
* @param fragment URL 的 fragment,即拼接到 # 中
* @return 拼接后的 URL
*/
public static String append(String base, Map<String, ?> query, Map<String, String> keys, boolean fragment) {
UriComponentsBuilder template = UriComponentsBuilder.newInstance();
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(base);
URI redirectUri;
try {
// assume it's encoded to start with (if it came in over the wire)
redirectUri = builder.build(true).toUri();
} catch (Exception e) {
// ... but allow client registrations to contain hard-coded non-encoded values
redirectUri = builder.build().toUri();
builder = UriComponentsBuilder.fromUri(redirectUri);
}
template.scheme(redirectUri.getScheme()).port(redirectUri.getPort()).host(redirectUri.getHost())
.userInfo(redirectUri.getUserInfo()).path(redirectUri.getPath());
if (fragment) {
StringBuilder values = new StringBuilder();
if (redirectUri.getFragment() != null) {
String append = redirectUri.getFragment();
values.append(append);
}
for (String key : query.keySet()) {
if (values.length() > 0) {
values.append("&");
}
String name = key;
if (keys != null && keys.containsKey(key)) {
name = keys.get(key);
}
values.append(name).append("={").append(key).append("}");
}
if (values.length() > 0) {
template.fragment(values.toString());
}
UriComponents encoded = template.build().expand(query).encode();
builder.fragment(encoded.getFragment());
} else {
for (String key : query.keySet()) {
String name = key;
if (keys != null && keys.containsKey(key)) {
name = keys.get(key);
}
template.queryParam(name, "{" + key + "}");
}
template.fragment(redirectUri.getFragment());
UriComponents encoded = template.build().expand(query).encode();
builder.query(encoded.getQuery());
}
return builder.build().toUriString();
}
public static String[] obtainBasicAuthorization(HttpServletRequest request) {
String clientId;
String clientSecret;
// 先从 Header 中获取
String authorization = request.getHeader("Authorization");
authorization = StrUtil.subAfter(authorization, "Basic ", true);
if (StringUtils.hasText(authorization)) {
authorization = Base64.decodeStr(authorization);
clientId = StrUtil.subBefore(authorization, ":", false);
clientSecret = StrUtil.subAfter(authorization, ":", false);
// 再从 Param 中获取
} else {
clientId = request.getParameter("client_id");
clientSecret = request.getParameter("client_secret");
}
// 如果两者非空,则返回
if (StrUtil.isNotEmpty(clientId) && StrUtil.isNotEmpty(clientSecret)) {
return new String[]{clientId, clientSecret};
}
return null;
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/io/FileUtils.java
================================================
package co.yixiang.yshop.framework.common.util.io;
import cn.hutool.core.io.FileTypeUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.file.FileNameUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil;
import lombok.SneakyThrows;
import java.io.ByteArrayInputStream;
import java.io.File;
/**
* 文件工具类
*
* @author yshop
*/
public class FileUtils {
/**
* 创建临时文件
* 该文件会在 JVM 退出时,进行删除
*
* @param data 文件内容
* @return 文件
*/
@SneakyThrows
public static File createTempFile(String data) {
File file = createTempFile();
// 写入内容
FileUtil.writeUtf8String(data, file);
return file;
}
/**
* 创建临时文件
* 该文件会在 JVM 退出时,进行删除
*
* @param data 文件内容
* @return 文件
*/
@SneakyThrows
public static File createTempFile(byte[] data) {
File file = createTempFile();
// 写入内容
FileUtil.writeBytes(data, file);
return file;
}
/**
* 创建临时文件,无内容
* 该文件会在 JVM 退出时,进行删除
*
* @return 文件
*/
@SneakyThrows
public static File createTempFile() {
// 创建文件,通过 UUID 保证唯一
File file = File.createTempFile(IdUtil.simpleUUID(), null);
// 标记 JVM 退出时,自动删除
file.deleteOnExit();
return file;
}
/**
* 生成文件路径
*
* @param content 文件内容
* @param originalName 原始文件名
* @return path,唯一不可重复
*/
public static String generatePath(byte[] content, String originalName) {
String sha256Hex = DigestUtil.sha256Hex(content);
// 情况一:如果存在 name,则优先使用 name 的后缀
if (StrUtil.isNotBlank(originalName)) {
String extName = FileNameUtil.extName(originalName);
return StrUtil.isBlank(extName) ? sha256Hex : sha256Hex + "." + extName;
}
// 情况二:基于 content 计算
return sha256Hex + '.' + FileTypeUtil.getType(new ByteArrayInputStream(content));
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/io/IoUtils.java
================================================
package co.yixiang.yshop.framework.common.util.io;
import cn.hutool.core.io.IORuntimeException;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.StrUtil;
import java.io.InputStream;
/**
* IO 工具类,用于 {@link cn.hutool.core.io.IoUtil} 缺失的方法
*
* @author yshop
*/
public class IoUtils {
/**
* 从流中读取 UTF8 编码的内容
*
* @param in 输入流
* @param isClose 是否关闭
* @return 内容
* @throws IORuntimeException IO 异常
*/
public static String readUtf8(InputStream in, boolean isClose) throws IORuntimeException {
return StrUtil.utf8Str(IoUtil.read(in, isClose));
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/json/JsonUtils.java
================================================
package co.yixiang.yshop.framework.common.util.json;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
/**
* JSON 工具类
*
* @author yshop
*/
@Slf4j
public class JsonUtils {
private static ObjectMapper objectMapper = new ObjectMapper();
static {
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); // 忽略 null 值
objectMapper.registerModules(new JavaTimeModule()); // 解决 LocalDateTime 的序列化
}
/**
* 初始化 objectMapper 属性
* <p>
* 通过这样的方式,使用 Spring 创建的 ObjectMapper Bean
*
* @param objectMapper ObjectMapper 对象
*/
public static void init(ObjectMapper objectMapper) {
JsonUtils.objectMapper = objectMapper;
}
@SneakyThrows
public static String toJsonString(Object object) {
return objectMapper.writeValueAsString(object);
}
@SneakyThrows
public static byte[] toJsonByte(Object object) {
return objectMapper.writeValueAsBytes(object);
}
@SneakyThrows
public static String toJsonPrettyString(Object object) {
return objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(object);
}
public static <T> T parseObject(String text, Class<T> clazz) {
if (StrUtil.isEmpty(text)) {
return null;
}
try {
return objectMapper.readValue(text, clazz);
} catch (IOException e) {
log.error("json parse err,json:{}", text, e);
throw new RuntimeException(e);
}
}
public static <T> T parseObject(String text, String path, Class<T> clazz) {
if (StrUtil.isEmpty(text)) {
return null;
}
try {
JsonNode treeNode = objectMapper.readTree(text);
JsonNode pathNode = treeNode.path(path);
return objectMapper.readValue(pathNode.toString(), clazz);
} catch (IOException e) {
log.error("json parse err,json:{}", text, e);
throw new RuntimeException(e);
}
}
public static <T> T parseObject(String text, Type type) {
if (StrUtil.isEmpty(text)) {
return null;
}
try {
return objectMapper.readValue(text, objectMapper.getTypeFactory().constructType(type));
} catch (IOException e) {
log.error("json parse err,json:{}", text, e);
throw new RuntimeException(e);
}
}
/**
* 将字符串解析成指定类型的对象
* 使用 {@link #parseObject(String, Class)} 时,在@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS) 的场景下,
* 如果 text 没有 class 属性,则会报错。此时,使用这个方法,可以解决。
*
* @param text 字符串
* @param clazz 类型
* @return 对象
*/
public static <T> T parseObject2(String text, Class<T> clazz) {
if (StrUtil.isEmpty(text)) {
return null;
}
return JSONUtil.toBean(text, clazz);
}
public static <T> T parseObject(byte[] bytes, Class<T> clazz) {
if (ArrayUtil.isEmpty(bytes)) {
return null;
}
try {
return objectMapper.readValue(bytes, clazz);
} catch (IOException e) {
log.error("json parse err,json:{}", bytes, e);
throw new RuntimeException(e);
}
}
public static <T> T parseObject(String text, TypeReference<T> typeReference) {
try {
return objectMapper.readValue(text, typeReference);
} catch (IOException e) {
log.error("json parse err,json:{}", text, e);
throw new RuntimeException(e);
}
}
/**
* 解析 JSON 字符串成指定类型的对象,如果解析失败,则返回 null
*
* @param text 字符串
* @param typeReference 类型引用
* @return 指定类型的对象
*/
public static <T> T parseObjectQuietly(String text, TypeReference<T> typeReference) {
try {
return objectMapper.readValue(text, typeReference);
} catch (IOException e) {
return null;
}
}
public static <T> List<T> parseArray(String text, Class<T> clazz) {
if (StrUtil.isEmpty(text)) {
return new ArrayList<>();
}
try {
return objectMapper.readValue(text, objectMapper.getTypeFactory().constructCollectionType(List.class, clazz));
} catch (IOException e) {
log.error("json parse err,json:{}", text, e);
throw new RuntimeException(e);
}
}
public static <T> List<T> parseArray(String text, String path, Class<T> clazz) {
if (StrUtil.isEmpty(text)) {
return null;
}
try {
JsonNode treeNode = objectMapper.readTree(text);
JsonNode pathNode = treeNode.path(path);
return objectMapper.readValue(pathNode.toString(), objectMapper.getTypeFactory().constructCollectionType(List.class, clazz));
} catch (IOException e) {
log.error("json parse err,json:{}", text, e);
throw new RuntimeException(e);
}
}
public static JsonNode parseTree(String text) {
try {
return objectMapper.readTree(text);
} catch (IOException e) {
log.error("json parse err,json:{}", text, e);
throw new RuntimeException(e);
}
}
public static JsonNode parseTree(byte[] text) {
try {
return objectMapper.readTree(text);
} catch (IOException e) {
log.error("json parse err,json:{}", text, e);
throw new RuntimeException(e);
}
}
public static boolean isJson(String text) {
return JSONUtil.isTypeJSON(text);
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/monitor/TracerUtils.java
================================================
package co.yixiang.yshop.framework.common.util.monitor;
import org.apache.skywalking.apm.toolkit.trace.TraceContext;
/**
* 链路追踪工具类
*
* 考虑到每个 starter 都需要用到该工具类,所以放到 common 模块下的 util 包下
*
* @author yshop
*/
public class TracerUtils {
/**
* 私有化构造方法
*/
private TracerUtils() {
}
/**
* 获得链路追踪编号,直接返回 SkyWalking 的 TraceId。
* 如果不存在的话为空字符串!!!
*
* @return 链路追踪编号
*/
public static String getTraceId() {
return TraceContext.traceId();
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/number/MoneyUtils.java
================================================
package co.yixiang.yshop.framework.common.util.number;
import cn.hutool.core.math.Money;
import cn.hutool.core.util.NumberUtil;
import java.math.BigDecimal;
import java.math.RoundingMode;
/**
* 金额工具类
*
* @author yshop
*/
public class MoneyUtils {
/**
* 金额的小数位数
*/
private static final int PRICE_SCALE = 2;
/**
* 百分比对应的 BigDecimal 对象
*/
public static final BigDecimal PERCENT_100 = BigDecimal.valueOf(100);
/**
* 计算百分比金额,四舍五入
*
* @param price 金额
* @param rate 百分比,例如说 56.77% 则传入 56.77
* @return 百分比金额
*/
public static Integer calculateRatePrice(Integer price, Double rate) {
return calculateRatePrice(price, rate, 0, RoundingMode.HALF_UP).intValue();
}
/**
* 计算百分比金额,向下传入
*
* @param price 金额
* @param rate 百分比,例如说 56.77% 则传入 56.77
* @return 百分比金额
*/
public static Integer calculateRatePriceFloor(Integer price, Double rate) {
return calculateRatePrice(price, rate, 0, RoundingMode.FLOOR).intValue();
}
/**
* 计算百分比金额
*
* @param price 金额(单位分)
* @param count 数量
* @param percent 折扣(单位分),列如 60.2%,则传入 6020
* @return 商品总价
*/
public static Integer calculator(Integer price, Integer count, Integer percent) {
price = price * count;
if (percent == null) {
return price;
}
return MoneyUtils.calculateRatePriceFloor(price, (double) (percent / 100));
}
/**
* 计算百分比金额
*
* @param price 金额
* @param rate 百分比,例如说 56.77% 则传入 56.77
* @param scale 保留小数位数
* @param roundingMode 舍入模式
*/
public static BigDecimal calculateRatePrice(Number price, Number rate, int scale, RoundingMode roundingMode) {
return NumberUtil.toBigDecimal(price).multiply(NumberUtil.toBigDecimal(rate)) // 乘以
.divide(BigDecimal.valueOf(100), scale, roundingMode); // 除以 100
}
/**
* 分转元
*
* @param fen 分
* @return 元
*/
public static BigDecimal fenToYuan(int fen) {
return new Money(0, fen).getAmount();
}
/**
* 分转元(字符串)
*
* 例如说 fen 为 1 时,则结果为 0.01
*
* @param fen 分
* @return 元
*/
public static String fenToYuanStr(int fen) {
return new Money(0, fen).toString();
}
/**
* 金额相乘,默认进行四舍五入
*
* 位数:{@link #PRICE_SCALE}
*
* @param price 金额
* @param count 数量
* @return 金额相乘结果
*/
public static BigDecimal priceMultiply(BigDecimal price, BigDecimal count) {
if (price == null || count == null) {
return null;
}
return price.multiply(count).setScale(PRICE_SCALE, RoundingMode.HALF_UP);
}
/**
* 金额相乘(百分比),默认进行四舍五入
*
* 位数:{@link #PRICE_SCALE}
*
* @param price 金额
* @param percent 百分比
* @return 金额相乘结果
*/
public static BigDecimal priceMultiplyPercent(BigDecimal price, BigDecimal percent) {
if (price == null || percent == null) {
return null;
}
return price.multiply(percent).divide(PERCENT_100, PRICE_SCALE, RoundingMode.HALF_UP);
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/number/NumberUtils.java
================================================
package co.yixiang.yshop.framework.common.util.number;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import java.math.BigDecimal;
/**
* 数字的工具类,补全 {@link cn.hutool.core.util.NumberUtil} 的功能
*
* @author yshop
*/
public class NumberUtils {
public static Long parseLong(String str) {
return StrUtil.isNotEmpty(str) ? Long.valueOf(str) : null;
}
public static Integer parseInt(String str) {
return StrUtil.isNotEmpty(str) ? Integer.valueOf(str) : null;
}
/**
* 通过经纬度获取地球上两点之间的距离
*
* 参考 <<a href="https://gitee.com/dromara/hutool/blob/1caabb586b1f95aec66a21d039c5695df5e0f4c1/hutool-core/src/main/java/cn/hutool/core/util/DistanceUtil.java">DistanceUtil</a>> 实现,目前它已经被 hutool 删除
*
* @param lat1 经度1
* @param lng1 纬度1
* @param lat2 经度2
* @param lng2 纬度2
* @return 距离,单位:千米
*/
public static double getDistance(double lat1, double lng1, double lat2, double lng2) {
double radLat1 = lat1 * Math.PI / 180.0;
double radLat2 = lat2 * Math.PI / 180.0;
double a = radLat1 - radLat2;
double b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;
double distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
+ Math.cos(radLat1) * Math.cos(radLat2)
* Math.pow(Math.sin(b / 2), 2)));
distance = distance * 6378.137;
distance = Math.round(distance * 10000d) / 10000d;
return distance;
}
/**
* 提供精确的乘法运算
*
* 和 hutool {@link NumberUtil#mul(BigDecimal...)} 的差别是,如果存在 null,则返回 null
*
* @param values 多个被乘值
* @return 积
*/
public static BigDecimal mul(BigDecimal... values) {
for (BigDecimal value : values) {
if (value == null) {
return null;
}
}
return NumberUtil.mul(values);
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/object/BeanUtils.java
================================================
package co.yixiang.yshop.framework.common.util.object;
import cn.hutool.core.bean.BeanUtil;
import co.yixiang.yshop.framework.common.pojo.PageResult;
import co.yixiang.yshop.framework.common.util.collection.CollectionUtils;
import java.util.List;
import java.util.function.Consumer;
/**
* Bean 工具类
*
* 1. 默认使用 {@link cn.hutool.core.bean.BeanUtil} 作为实现类,虽然不同 bean 工具的性能有差别,但是对绝大多数同学的项目,不用在意这点性能
* 2. 针对复杂的对象转换,可以搜参考 AuthConvert 实现,通过 mapstruct + default 配合实现
*
* @author yshop
*/
public class BeanUtils {
public static <T> T toBean(Object source, Class<T> targetClass) {
return BeanUtil.toBean(source, targetClass);
}
public static <T> T toBean(Object source, Class<T> targetClass, Consumer<T> peek) {
T target = toBean(source, targetClass);
if (target != null) {
peek.accept(target);
}
return target;
}
public static <S, T> List<T> toBean(List<S> source, Class<T> targetType) {
if (source == null) {
return null;
}
return CollectionUtils.convertList(source, s -> toBean(s, targetType));
}
public static <S, T> List<T> toBean(List<S> source, Class<T> targetType, Consumer<T> peek) {
List<T> list = toBean(source, targetType);
if (list != null) {
list.forEach(peek);
}
return list;
}
public static <S, T> PageResult<T> toBean(PageResult<S> source, Class<T> targetType) {
return toBean(source, targetType, null);
}
public static <S, T> PageResult<T> toBean(PageResult<S> source, Class<T> targetType, Consumer<T> peek) {
if (source == null) {
return null;
}
List<T> list = toBean(source.getList(), targetType);
if (peek != null) {
list.forEach(peek);
}
return new PageResult<>(list, source.getTotal());
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/object/ObjectUtils.java
================================================
package co.yixiang.yshop.framework.common.util.object;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReflectUtil;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.function.Consumer;
/**
* Object 工具类
*
* @author yshop
*/
public class ObjectUtils {
/**
* 复制对象,并忽略 Id 编号
*
* @param object 被复制对象
* @param consumer 消费者,可以二次编辑被复制对象
* @return 复制后的对象
*/
public static <T> T cloneIgnoreId(T object, Consumer<T> consumer) {
T result = ObjectUtil.clone(object);
// 忽略 id 编号
Field field = ReflectUtil.getField(object.getClass(), "id");
if (field != null) {
ReflectUtil.setFieldValue(result, field, null);
}
// 二次编辑
if (result != null) {
consumer.accept(result);
}
return result;
}
public static <T extends Comparable<T>> T max(T obj1, T obj2) {
if (obj1 == null) {
return obj2;
}
if (obj2 == null) {
return obj1;
}
return obj1.compareTo(obj2) > 0 ? obj1 : obj2;
}
@SafeVarargs
public static <T> T defaultIfNull(T... array) {
for (T item : array) {
if (item != null) {
return item;
}
}
return null;
}
@SafeVarargs
public static <T> boolean equalsAny(T obj, T... array) {
return Arrays.asList(array).contains(obj);
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/object/PageUtils.java
================================================
package co.yixiang.yshop.framework.common.util.object;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.func.Func1;
import cn.hutool.core.lang.func.LambdaUtil;
import cn.hutool.core.util.ArrayUtil;
import co.yixiang.yshop.framework.common.pojo.PageParam;
import co.yixiang.yshop.framework.common.pojo.SortablePageParam;
import co.yixiang.yshop.framework.common.pojo.SortingField;
import org.springframework.util.Assert;
import static java.util.Collections.singletonList;
/**
* {@link co.yixiang.yshop.framework.common.pojo.PageParam} 工具类
*
* @author yshop
*/
public class PageUtils {
private static final Object[] ORDER_TYPES = new String[]{SortingField.ORDER_ASC, SortingField.ORDER_DESC};
public static int getStart(PageParam pageParam) {
return (pageParam.getPageNo() - 1) * pageParam.getPageSize();
}
/**
* 构建排序字段(默认倒序)
*
* @param func 排序字段的 Lambda 表达式
* @param <T> 排序字段所属的类型
* @return 排序字段
*/
public static <T> SortingField buildSortingField(Func1<T, ?> func) {
return buildSortingField(func, SortingField.ORDER_DESC);
}
/**
* 构建排序字段
*
* @param func 排序字段的 Lambda 表达式
* @param order 排序类型 {@link SortingField#ORDER_ASC} {@link SortingField#ORDER_DESC}
* @param <T> 排序字段所属的类型
* @return 排序字段
*/
public static <T> SortingField buildSortingField(Func1<T, ?> func, String order) {
Assert.isTrue(ArrayUtil.contains(ORDER_TYPES, order), String.format("字段的排序类型只能是 %s/%s", ORDER_TYPES));
String fieldName = LambdaUtil.getFieldName(func);
return new SortingField(fieldName, order);
}
/**
* 构建默认的排序字段
* 如果排序字段为空,则设置排序字段;否则忽略
*
* @param sortablePageParam 排序分页查询参数
* @param func 排序字段的 Lambda 表达式
* @param <T> 排序字段所属的类型
*/
public static <T> void buildDefaultSortingField(SortablePageParam sortablePageParam, Func1<T, ?> func) {
if (sortablePageParam != null && CollUtil.isEmpty(sortablePageParam.getSortingFields())) {
sortablePageParam.setSortingFields(singletonList(buildSortingField(func)));
}
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/servlet/ServletUtils.java
================================================
package co.yixiang.yshop.framework.common.util.servlet;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.servlet.JakartaServletUtil;
import co.yixiang.yshop.framework.common.util.json.JsonUtils;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.MediaType;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.Map;
/**
* 客户端工具类
*
* @author yshop
*/
public class ServletUtils {
/**
* 返回 JSON 字符串
*
* @param response 响应
* @param object 对象,会序列化成 JSON 字符串
*/
@SuppressWarnings("deprecation") // 必须使用 APPLICATION_JSON_UTF8_VALUE,否则会乱码
public static void writeJSON(HttpServletResponse response, Object object) {
String content = JsonUtils.toJsonString(object);
JakartaServletUtil.write(response, content, MediaType.APPLICATION_JSON_UTF8_VALUE);
}
/**
* @param request 请求
* @return ua
*/
public static String getUserAgent(HttpServletRequest request) {
String ua = request.getHeader("User-Agent");
return ua != null ? ua : "";
}
/**
* 获得请求
*
* @return HttpServletRequest
*/
public static HttpServletRequest getRequest() {
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
if (!(requestAttributes instanceof ServletRequestAttributes)) {
return null;
}
return ((ServletRequestAttributes) requestAttributes).getRequest();
}
public static String getUserAgent() {
HttpServletRequest request = getRequest();
if (request == null) {
return null;
}
return getUserAgent(request);
}
public static String getClientIP() {
HttpServletRequest request = getRequest();
if (request == null) {
return null;
}
return JakartaServletUtil.getClientIP(request);
}
public static boolean isJsonRequest(ServletRequest request) {
return StrUtil.startWithIgnoreCase(request.getContentType(), MediaType.APPLICATION_JSON_VALUE);
}
public static String getBody(HttpServletRequest request) {
// 只有在 json 请求在读取,因为只有 CacheRequestBodyFilter 才会进行缓存,支持重复读取
if (isJsonRequest(request)) {
return JakartaServletUtil.getBody(request);
}
return null;
}
public static byte[] getBodyBytes(HttpServletRequest request) {
// 只有在 json 请求在读取,因为只有 CacheRequestBodyFilter 才会进行缓存,支持重复读取
if (isJsonRequest(request)) {
return JakartaServletUtil.getBodyBytes(request);
}
return null;
}
public static String getClientIP(HttpServletRequest request) {
return JakartaServletUtil.getClientIP(request);
}
public static Map<String, String> getParamMap(HttpServletRequest request) {
return JakartaServletUtil.getParamMap(request);
}
public static String getRequstHost(HttpServletRequest request){
String port = ":" + request.getServerPort();
if(request.getServerPort() == 80 || request.getServerPort() == 443){
port = "";
}
return request.getScheme()+"://" + request.getServerName() + port;
}
/**
* 返回附件
*
* @param response 响应
* @param filename 文件名
* @param content 附件内容
*/
public static void writeAttachment(HttpServletResponse response, String filename, byte[] content) throws IOException {
// 设置 header 和 contentType
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
// 输出附件
IoUtil.write(response.getOutputStream(), false, content);
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/spring/SpringExpressionUtils.java
================================================
package co.yixiang.yshop.framework.common.util.spring;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ArrayUtil;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.core.DefaultParameterNameDiscoverer;
import org.springframework.core.ParameterNameDiscoverer;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* Spring EL 表达式的工具类
*
* @author mashu
*/
public class SpringExpressionUtils {
/**
* Spring EL 表达式解析器
*/
private static final ExpressionParser EXPRESSION_PARSER = new SpelExpressionParser();
/**
* 参数名发现器
*/
private static final ParameterNameDiscoverer PARAMETER_NAME_DISCOVERER = new DefaultParameterNameDiscoverer();
private SpringExpressionUtils() {
}
/**
* 从切面中,单个解析 EL 表达式的结果
*
* @param joinPoint 切面点
* @param expressionString EL 表达式数组
* @return 执行界面
*/
public static Object parseExpression(JoinPoint joinPoint, String expressionString) {
Map<String, Object> result = parseExpressions(joinPoint, Collections.singletonList(expressionString));
return result.get(expressionString);
}
/**
* 从切面中,批量解析 EL 表达式的结果
*
* @param joinPoint 切面点
* @param expressionStrings EL 表达式数组
* @return 结果,key 为表达式,value 为对应值
*/
public static Map<String, Object> parseExpressions(JoinPoint joinPoint, List<String> expressionStrings) {
// 如果为空,则不进行解析
if (CollUtil.isEmpty(expressionStrings)) {
return MapUtil.newHashMap();
}
// 第一步,构建解析的上下文 EvaluationContext
// 通过 joinPoint 获取被注解方法
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
Method method = methodSignature.getMethod();
// 使用 spring 的 ParameterNameDiscoverer 获取方法形参名数组
String[] paramNames = PARAMETER_NAME_DISCOVERER.getParameterNames(method);
// Spring 的表达式上下文对象
EvaluationContext context = new StandardEvaluationContext();
// 给上下文赋值
if (ArrayUtil.isNotEmpty(paramNames)) {
Object[] args = joinPoint.getArgs();
for (int i = 0; i < paramNames.length; i++) {
context.setVariable(paramNames[i], args[i]);
}
}
// 第二步,逐个参数解析
Map<String, Object> result = MapUtil.newHashMap(expressionStrings.size(), true);
expressionStrings.forEach(key -> {
Object value = EXPRESSION_PARSER.parseExpression(key).getValue(context);
result.put(key, value);
});
return result;
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/spring/SpringUtils.java
================================================
package co.yixiang.yshop.framework.common.util.spring;
import cn.hutool.extra.spring.SpringUtil;
import java.util.Objects;
/**
* Spring 工具类
*
* @author yshop
*/
public class SpringUtils extends SpringUtil {
/**
* 是否为生产环境
*
* @return 是否生产环境
*/
public static boolean isProd() {
String activeProfile = getActiveProfile();
return Objects.equals("prod", activeProfile);
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/string/StrUtils.java
================================================
package co.yixiang.yshop.framework.common.util.string;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import org.springframework.util.CollectionUtils;
import java.text.Collator;
import java.util.*;
import java.util.stream.Collectors;
/**
* 字符串工具类
*
* @author yshop
*/
public class StrUtils {
public static String maxLength(CharSequence str, int maxLength) {
return StrUtil.maxLength(str, maxLength - 3); // -3 的原因,是该方法会补充 ... 恰好
}
/**
* 给定字符串是否以任何一个字符串开始
* 给定字符串和数组为空都返回 false
*
* @param str 给定字符串
* @param prefixes 需要检测的开始字符串
* @since 3.0.6
*/
public static boolean startWithAny(String str, Collection<String> prefixes) {
if (StrUtil.isEmpty(str) || ArrayUtil.isEmpty(prefixes)) {
return false;
}
for (CharSequence suffix : prefixes) {
if (StrUtil.startWith(str, suffix, false)) {
return true;
}
}
return false;
}
public static List<Long> splitToLong(String value, CharSequence separator) {
long[] longs = StrUtil.splitToLong(value, separator);
return Arrays.stream(longs).boxed().collect(Collectors.toList());
}
public static Set<Long> splitToLongSet(String value) {
return splitToLongSet(value, StrPool.COMMA);
}
public static Set<Long> splitToLongSet(String value, CharSequence separator) {
long[] longs = StrUtil.splitToLong(value, separator);
return Arrays.stream(longs).boxed().collect(Collectors.toSet());
}
public static List<Integer> splitToInteger(String value, CharSequence separator) {
int[] integers = StrUtil.splitToInt(value, separator);
return Arrays.stream(integers).boxed().collect(Collectors.toList());
}
/**
* 移除字符串中,包含指定字符串的行
*
* @param content 字符串
* @param sequence 包含的字符串
* @return 移除后的字符串
*/
public static String removeLineContains(String content, String sequence) {
if (StrUtil.isEmpty(content) || StrUtil.isEmpty(sequence)) {
return content;
}
return Arrays.stream(content.split("\n"))
.filter(line -> !line.contains(sequence))
.collect(Collectors.joining("\n"));
}
/**
* 数字排在最前,英文字母其次,汉字则按照拼音进行排序
*/
public static List<String> compareTo(List<String> stringList) {
if (CollectionUtils.isEmpty(stringList)) {
return Collections.emptyList();
}
Comparator<String> comparator = (text, texts) -> {
Collator collator = Collator.getInstance(java.util.Locale.CHINESE);
return collator.getCollationKey(text).compareTo(
collator.getCollationKey(texts));
};
Collections.sort(stringList, comparator);
return stringList;
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/validation/ValidationUtils.java
================================================
package co.yixiang.yshop.framework.common.util.validation;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import org.springframework.util.StringUtils;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.ConstraintViolationException;
import jakarta.validation.Validation;
import jakarta.validation.Validator;
import java.util.Set;
import java.util.regex.Pattern;
/**
* 校验工具类
*
* @author yshop
*/
public class ValidationUtils {
private static final Pattern PATTERN_MOBILE = Pattern.compile("^(?:(?:\\+|00)86)?1(?:(?:3[\\d])|(?:4[0,1,4-9])|(?:5[0-3,5-9])|(?:6[2,5-7])|(?:7[0-8])|(?:8[\\d])|(?:9[0-3,5-9]))\\d{8}$");
private static final Pattern PATTERN_URL = Pattern.compile("^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]");
private static final Pattern PATTERN_XML_NCNAME = Pattern.compile("[a-zA-Z_][\\-_.0-9_a-zA-Z$]*");
public static boolean isMobile(String mobile) {
return StringUtils.hasText(mobile)
&& PATTERN_MOBILE.matcher(mobile).matches();
}
public static boolean isURL(String url) {
return StringUtils.hasText(url)
&& PATTERN_URL.matcher(url).matches();
}
public static boolean isXmlNCName(String str) {
return StringUtils.hasText(str)
&& PATTERN_XML_NCNAME.matcher(str).matches();
}
public static void validate(Object object, Class<?>... groups) {
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Assert.notNull(validator);
validate(validator, object, groups);
}
public static void validate(Validator validator, Object object, Class<?>... groups) {
Set<ConstraintViolation<Object>> constraintViolations = validator.validate(object, groups);
if (CollUtil.isNotEmpty(constraintViolations)) {
throw new ConstraintViolationException(constraintViolations);
}
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/yshop/LocationUtils.java
================================================
package co.yixiang.yshop.framework.common.util.yshop;
import cn.hutool.core.util.NumberUtil;
/**
* 定位工具
* @author hupeng
*/
public class LocationUtils {
private static double EARTH_RADIUS = 6378.137;
private static double rad(double d) {
return d * Math.PI / 180.0;
}
/**
* 通过经纬度获取距离(单位:千米)
*
* @param lat1
* @param lng1
* @param lat2
* @param lng2
* @return
*/
public static double getDistance(double lat1, double lng1, double lat2,
double lng2) {
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double a = radLat1 - radLat2;
double b = rad(lng1) - rad(lng2);
double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
+ Math.cos(radLat1) * Math.cos(radLat2)
* Math.pow(Math.sin(b / 2), 2)));
s = s * EARTH_RADIUS;
s = Math.round(s * 10000d) / 10000d;
//s = s*1000;
return NumberUtil.round(s, 2).doubleValue();
//return s;
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/validation/InEnum.java
================================================
package co.yixiang.yshop.framework.common.validation;
import co.yixiang.yshop.framework.common.core.IntArrayValuable;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.*;
@Target({
ElementType.METHOD,
ElementType.FIELD,
ElementType.ANNOTATION_TYPE,
ElementType.CONSTRUCTOR,
ElementType.PARAMETER,
ElementType.TYPE_USE
})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(
validatedBy = {InEnumValidator.class, InEnumCollectionValidator.class}
)
public @interface InEnum {
/**
* @return 实现 EnumValuable 接口的
*/
Class<? extends IntArrayValuable> value();
String message() default "必须在指定范围 {value}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/validation/InEnumCollectionValidator.java
================================================
package co.yixiang.yshop.framework.common.validation;
import cn.hutool.core.collection.CollUtil;
import co.yixiang.yshop.framework.common.core.IntArrayValuable;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
public class InEnumCollectionValidator implements ConstraintValidator<InEnum, Collection<Integer>> {
private List<Integer> values;
@Override
public void initialize(InEnum annotation) {
IntArrayValuable[] values = annotation.value().getEnumConstants();
if (values.length == 0) {
this.values = Collections.emptyList();
} else {
this.values = Arrays.stream(values[0].array()).boxed().collect(Collectors.toList());
}
}
@Override
public boolean isValid(Collection<Integer> list, ConstraintValidatorContext context) {
// 校验通过
if (CollUtil.containsAll(values, list)) {
return true;
}
// 校验不通过,自定义提示语句(因为,注解上的 value 是枚举类,无法获得枚举类的实际值)
context.disableDefaultConstraintViolation(); // 禁用默认的 message 的值
context.buildConstraintViolationWithTemplate(context.getDefaultConstraintMessageTemplate()
.replaceAll("\\{value}", CollUtil.join(list, ","))).addConstraintViolation(); // 重新添加错误提示语句
return false;
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/validation/InEnumValidator.java
================================================
package co.yixiang.yshop.framework.common.validation;
import co.yixiang.yshop.framework.common.core.IntArrayValuable;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
public class InEnumValidator implements ConstraintValidator<InEnum, Integer> {
private List<Integer> values;
@Override
public void initialize(InEnum annotation) {
IntArrayValuable[] values = annotation.value().getEnumConstants();
if (values.length == 0) {
this.values = Collections.emptyList();
} else {
this.values = Arrays.stream(values[0].array()).boxed().collect(Collectors.toList());
}
}
@Override
public boolean isValid(Integer value, ConstraintValidatorContext context) {
// 为空时,默认不校验,即认为通过
if (value == null) {
return true;
}
// 校验通过
if (values.contains(value)) {
return true;
}
// 校验不通过,自定义提示语句(因为,注解上的 value 是枚举类,无法获得枚举类的实际值)
context.disableDefaultConstraintViolation(); // 禁用默认的 message 的值
context.buildConstraintViolationWithTemplate(context.getDefaultConstraintMessageTemplate()
.replaceAll("\\{value}", values.toString())).addConstraintViolation(); // 重新添加错误提示语句
return false;
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/validation/Mobile.java
================================================
package co.yixiang.yshop.framework.common.validation;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.*;
@Target({
ElementType.METHOD,
ElementType.FIELD,
ElementType.ANNOTATION_TYPE,
ElementType.CONSTRUCTOR,
ElementType.PARAMETER,
ElementType.TYPE_USE
})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(
validatedBy = MobileValidator.class
)
public @interface Mobile {
String message() default "手机号格式不正确";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/validation/MobileValidator.java
================================================
package co.yixiang.yshop.framework.common.validation;
import cn.hutool.core.util.StrUtil;
import co.yixiang.yshop.framework.common.util.validation.ValidationUtils;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
public class MobileValidator implements ConstraintValidator<Mobile, String> {
@Override
public void initialize(Mobile annotation) {
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
// 如果手机号为空,默认不校验,即校验通过
if (StrUtil.isEmpty(value)) {
return true;
}
// 校验手机
return ValidationUtils.isMobile(value);
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/validation/Telephone.java
================================================
package co.yixiang.yshop.framework.common.validation;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.*;
@Target({
ElementType.METHOD,
ElementType.FIELD,
ElementType.ANNOTATION_TYPE,
ElementType.CONSTRUCTOR,
ElementType.PARAMETER,
ElementType.TYPE_USE
})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(
validatedBy = TelephoneValidator.class
)
public @interface Telephone {
String message() default "电话格式不正确";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/validation/TelephoneValidator.java
================================================
package co.yixiang.yshop.framework.common.validation;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.PhoneUtil;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
public class TelephoneValidator implements ConstraintValidator<Telephone, String> {
@Override
public void initialize(Telephone annotation) {
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
// 如果手机号为空,默认不校验,即校验通过
if (CharSequenceUtil.isEmpty(value)) {
return true;
}
// 校验手机
return PhoneUtil.isTel(value) || PhoneUtil.isPhone(value);
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/validation/package-info.java
================================================
/**
* 使用 Hibernate Validator 实现参数校验
*/
package co.yixiang.yshop.framework.common.validation;
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/test/java/co/yixiang/yshop/framework/common/util/collection/CollectionUtilsTest.java
================================================
package co.yixiang.yshop.framework.common.util.collection;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.function.BiFunction;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
* {@link CollectionUtils} 的单元测试
*/
public class CollectionUtilsTest {
@Data
@AllArgsConstructor
private static class Dog {
private Integer id;
private String name;
private String code;
}
@Test
public void testDiffList() {
// 准备参数
Collection<Dog> oldList = Arrays.asList(
new Dog(1, "花花", "hh"),
new Dog(2, "旺财", "wc")
);
Collection<Dog> newList = Arrays.asList(
new Dog(null, "花花2", "hh"),
new Dog(null, "小白", "xb")
);
BiFunction<Dog, Dog, Boolean> sameFunc = (oldObj, newObj) -> {
boolean same = oldObj.getCode().equals(newObj.getCode());
// 如果相等的情况下,需要设置下 id,后续好更新
if (same) {
newObj.setId(oldObj.getId());
}
return same;
};
// 调用
List<List<Dog>> result = CollectionUtils.diffList(oldList, newList, sameFunc);
// 断言
assertEquals(result.size(), 3);
// 断言 create
assertEquals(result.get(0).size(), 1);
assertEquals(result.get(0).get(0), new Dog(null, "小白", "xb"));
// 断言 update
assertEquals(result.get(1).size(), 1);
assertEquals(result.get(1).get(0), new Dog(1, "花花2", "hh"));
// 断言 delete
assertEquals(result.get(2).size(), 1);
assertEquals(result.get(2).get(0), new Dog(2, "旺财", "wc"));
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/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">
<parent>
<artifactId>yshop-framework</artifactId>
<groupId>co.yixiang.boot</groupId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>yshop-spring-boot-starter-biz-data-permission</artifactId>
<packaging>jar</packaging>
<name>${project.artifactId}</name>
<description>数据权限</description>
<url>https://gitee.com/guchengwuyue/yshop-drink</url>
<dependencies>
<dependency>
<groupId>co.yixiang.boot</groupId>
<artifactId>yshop-common</artifactId>
</dependency>
<!-- Web 相关 -->
<dependency>
<groupId>co.yixiang.boot</groupId>
<artifactId>yshop-spring-boot-starter-security</artifactId>
<optional>true</optional> <!-- 可选,如果使用 DeptDataPermissionRule 必须提供 -->
</dependency>
<!-- DB 相关 -->
<dependency>
<groupId>co.yixiang.boot</groupId>
<artifactId>yshop-spring-boot-starter-mybatis</artifactId>
</dependency>
<!-- 业务组件 -->
<dependency>
<groupId>co.yixiang.boot</groupId>
<artifactId>yshop-module-system-api</artifactId> <!-- 需要使用它,进行数据权限的获取 -->
<version>${revision}</version>
</dependency>
<!-- Test 测试相关 -->
<dependency>
<groupId>co.yixiang.boot</groupId>
<artifactId>yshop-spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/config/YshopDataPermissionAutoConfiguration.java
================================================
package co.yixiang.yshop.framework.datapermission.config;
import co.yixiang.yshop.framework.datapermission.core.aop.DataPermissionAnnotationAdvisor;
import co.yixiang.yshop.framework.datapermission.core.db.DataPermissionDatabaseInterceptor;
import co.yixiang.yshop.framework.datapermission.core.rule.DataPermissionRule;
import co.yixiang.yshop.framework.datapermission.core.rule.DataPermissionRuleFactory;
import co.yixiang.yshop.framework.datapermission.core.rule.DataPermissionRuleFactoryImpl;
import co.yixiang.yshop.framework.mybatis.core.util.MyBatisUtils;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.context.annotation.Bean;
import java.util.List;
/**
* 数据权限的自动配置类
*
* @author yshop
*/
@AutoConfiguration
public class YshopDataPermissionAutoConfiguration {
@Bean
public DataPermissionRuleFactory dataPermissionRuleFactory(List<DataPermissionRule> rules) {
return new DataPermissionRuleFactoryImpl(rules);
}
@Bean
public DataPermissionDatabaseInterceptor dataPermissionDatabaseInterceptor(MybatisPlusInterceptor interceptor,
DataPermissionRuleFactory ruleFactory) {
// 创建 DataPermissionDatabaseInterceptor 拦截器
DataPermissionDatabaseInterceptor inner = new DataPermissionDatabaseInterceptor(ruleFactory);
// 添加到 interceptor 中
// 需要加在首个,主要是为了在分页插件前面。这个是 MyBatis Plus 的规定
MyBatisUtils.addInterceptor(interceptor, inner, 0);
return inner;
}
@Bean
public DataPermissionAnnotationAdvisor dataPermissionAnnotationAdvisor() {
return new DataPermissionAnnotationAdvisor();
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/config/YshopDeptDataPermissionAutoConfiguration.java
================================================
package co.yixiang.yshop.framework.datapermission.config;
import co.yixiang.yshop.framework.datapermission.core.rule.dept.DeptDataPermissionRule;
import co.yixiang.yshop.framework.datapermission.core.rule.dept.DeptDataPermissionRuleCustomizer;
import co.yixiang.yshop.framework.security.core.LoginUser;
import co.yixiang.yshop.module.system.api.permission.PermissionApi;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import java.util.List;
/**
* 基于部门的数据权限 AutoConfiguration
*
* @author yshop
*/
@AutoConfiguration
@ConditionalOnClass(LoginUser.class)
@ConditionalOnBean(value = {PermissionApi.class, DeptDataPermissionRuleCustomizer.class})
public class YshopDeptDataPermissionAutoConfiguration {
@Bean
public DeptDataPermissionRule deptDataPermissionRule(PermissionApi permissionApi,
List<DeptDataPermissionRuleCustomizer> customizers) {
// 创建 DeptDataPermissionRule 对象
DeptDataPermissionRule rule = new DeptDataPermissionRule(permissionApi);
// 补全表配置
customizers.forEach(customizer -> customizer.customize(rule));
return rule;
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/core/annotation/DataPermission.java
================================================
package co.yixiang.yshop.framework.datapermission.core.annotation;
import co.yixiang.yshop.framework.datapermission.core.rule.DataPermissionRule;
import java.lang.annotation.*;
/**
* 数据权限注解
* 可声明在类或者方法上,标识使用的数据权限规则
*
* @author yshop
*/
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataPermission {
/**
* 当前类或方法是否开启数据权限
* 即使不添加 @DataPermission 注解,默认是开启状态
* 可通过设置 enable 为 false 禁用
*/
boolean enable() default true;
/**
* 生效的数据权限规则数组,优先级高于 {@link #excludeRules()}
*/
Class<? extends DataPermissionRule>[] includeRules() default {};
/**
* 排除的数据权限规则数组,优先级最低
*/
Class<? extends DataPermissionRule>[] excludeRules() default {};
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/core/aop/DataPermissionAnnotationAdvisor.java
================================================
package co.yixiang.yshop.framework.datapermission.core.aop;
import co.yixiang.yshop.framework.datapermission.core.annotation.DataPermission;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import org.aopalliance.aop.Advice;
import org.springframework.aop.Pointcut;
import org.springframework.aop.support.AbstractPointcutAdvisor;
import org.springframework.aop.support.ComposablePointcut;
import org.springframework.aop.support.annotation.AnnotationMatchingPointcut;
/**
* {@link co.yixiang.yshop.framework.datapermission.core.annotation.DataPermission} 注解的 Advisor 实现类
*
* @author yshop
*/
@Getter
@EqualsAndHashCode(callSuper = true)
public class DataPermissionAnnotationAdvisor extends AbstractPointcutAdvisor {
private final Advice advice;
private final Pointcut pointcut;
public DataPermissionAnnotationAdvisor() {
this.advice = new DataPermissionAnnotationInterceptor();
this.pointcut = this.buildPointcut();
}
protected Pointcut buildPointcut() {
Pointcut classPointcut = new AnnotationMatchingPointcut(DataPermission.class, true);
Pointcut methodPointcut = new AnnotationMatchingPointcut(null, DataPermission.class, true);
return new ComposablePointcut(classPointcut).union(methodPointcut);
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/core/aop/DataPermissionAnnotationInterceptor.java
================================================
package co.yixiang.yshop.framework.datapermission.core.aop;
import co.yixiang.yshop.framework.datapermission.core.annotation.DataPermission;
import lombok.Getter;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.core.MethodClassKey;
import org.springframework.core.annotation.AnnotationUtils;
import java.lang.reflect.Method;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* {@link DataPermission} 注解的拦截器
* 1. 在执行方法前,将 @DataPermission 注解入栈
* 2. 在执行方法后,将 @DataPermission 注解出栈
*
* @author yshop
*/
@DataPermission // 该注解,用于 {@link DATA_PERMISSION_NULL} 的空对象
public class DataPermissionAnnotationInterceptor implements MethodInterceptor {
/**
* DataPermission 空对象,用于方法无 {@link DataPermission} 注解时,使用 DATA_PERMISSION_NULL 进行占位
*/
static final DataPermission DATA_PERMISSION_NULL = DataPermissionAnnotationInterceptor.class.getAnnotation(DataPermission.class);
@Getter
private final Map<MethodClassKey, DataPermission> dataPermissionCache = new ConcurrentHashMap<>();
@Override
public Object invoke(MethodInvocation methodInvocation) throws Throwable {
// 入栈
DataPermission dataPermission = this.findAnnotation(methodInvocation);
if (dataPermission != null) {
DataPermissionContextHolder.add(dataPermission);
}
try {
// 执行逻辑
return methodInvocation.proceed();
} finally {
// 出栈
if (dataPermission != null) {
DataPermissionContextHolder.remove();
}
}
}
private DataPermission findAnnotation(MethodInvocation methodInvocation) {
// 1. 从缓存中获取
Method method = methodInvocation.getMethod();
Object targetObject = methodInvocation.getThis();
Class<?> clazz = targetObject != null ? targetObject.getClass() : method.getDeclaringClass();
MethodClassKey methodClassKey = new MethodClassKey(method, clazz);
DataPermission dataPermission = dataPermissionCache.get(methodClassKey);
if (dataPermission != null) {
return dataPermission != DATA_PERMISSION_NULL ? dataPermission : null;
}
// 2.1 从方法中获取
dataPermission = AnnotationUtils.findAnnotation(method, DataPermission.class);
// 2.2 从类上获取
if (dataPermission == null) {
dataPermission = AnnotationUtils.findAnnotation(clazz, DataPermission.class);
}
// 2.3 添加到缓存中
dataPermissionCache.put(methodClassKey, dataPermission != null ? dataPermission : DATA_PERMISSION_NULL);
return dataPermission;
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/core/aop/DataPermissionContextHolder.java
================================================
package co.yixiang.yshop.framework.datapermission.core.aop;
import co.yixiang.yshop.framework.datapermission.core.annotation.DataPermission;
import com.alibaba.ttl.TransmittableThreadLocal;
import java.util.LinkedList;
import java.util.List;
/**
* {@link DataPermission} 注解的 Context 上下文
*
* @author yshop
*/
public class DataPermissionContextHolder {
/**
* 使用 List 的原因,可能存在方法的嵌套调用
*/
private static final ThreadLocal<LinkedList<DataPermission>> DATA_PERMISSIONS =
TransmittableThreadLocal.withInitial(LinkedList::new);
/**
* 获得当前的 DataPermission 注解
*
* @return DataPermission 注解
*/
public static DataPermission get() {
return DATA_PERMISSIONS.get().peekLast();
}
/**
* 入栈 DataPermission 注解
*
* @param dataPermission DataPermission 注解
*/
public static void add(DataPermission dataPermission) {
DATA_PERMISSIONS.get().addLast(dataPermission);
}
/**
* 出栈 DataPermission 注解
*
* @return DataPermission 注解
*/
public static DataPermission remove() {
DataPermission dataPermission = DATA_PERMISSIONS.get().removeLast();
// 无元素时,清空 ThreadLocal
if (DATA_PERMISSIONS.get().isEmpty()) {
DATA_PERMISSIONS.remove();
}
return dataPermission;
}
/**
* 获得所有 DataPermission
*
* @return DataPermission 队列
*/
public static List<DataPermission> getAll() {
return DATA_PERMISSIONS.get();
}
/**
* 清空上下文
*
* 目前仅仅用于单测
*/
public static void clear() {
DATA_PERMISSIONS.remove();
}
}
================================================
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/core/db/DataPermissionDatabaseInterceptor.java
================================================
package co.yixiang.yshop.framework.datapermission.core.db;
import cn.hutool.core.collection.CollUtil;
import co.yixiang.yshop.framework.common.util.collection.SetUtils;
import co.yixiang.yshop.framework.datapermission.core.rule.DataPermissionRule;
import co.yixiang.yshop.framework.datapermission.core.rule.DataPermissionRuleFactory;
import co.yixiang.yshop.framework.mybatis.core.util.MyBatisUtils;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
import com.baomidou.mybatisplus.extension.parser.JsqlParserSupport;
import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import net.sf.jsqlparser.expression.*;
import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
import net.sf.jsqlparser.expression.operators.conditional.OrExpression;
import net.sf.jsqlparser.expression.operators.relational.ExistsExpression;
import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
import net.sf.jsqlparser.expression.operators.relational.InExpression;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.delete.Delete;
import net.sf.jsqlparser.statement.select.*;
import net.sf.jsqlparser.statement.update.Update;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlCommandType;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import java.sql.Connection;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
/**
* 数据权限拦截器,通过 {@link DataPermissionRule} 数据权限规则,重写 SQL 的方式来实现
* 主要的 SQL 重写方法,可见 {@link #builderExpression(Expression, List)} 方法
*
* 整体的代码实现上,参考 {@link com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor} 实现。
* 所以每次 MyBatis Plus 升级时,需要 Review 下其具体的实现是否有变更!
*
* @author yshop
*/
@RequiredArgsConstructor
public class DataPermissionDatabaseInterceptor extends JsqlParserSupport implements InnerInterceptor {
private final DataPermissionRuleFactory ruleFactory;
@Getter
private final MappedStatementCache mappedStatementCache = new MappedStatementCache();
@Override // SELECT 场景
public void beforeQuery(Executor executor,
Showing preview only (368K chars total). Download the full file or copy to clipboard to get everything.
gitextract_s5ijlxg7/ ├── .gitignore ├── LICENSE ├── README.md ├── yshop-drink-boot3/ │ ├── .gitignore │ ├── README.md │ ├── lombok.config │ ├── pom.xml │ ├── script/ │ │ ├── docker/ │ │ │ ├── Docker-HOWTO.md │ │ │ ├── docker-compose.yml │ │ │ └── docker.env │ │ └── shell/ │ │ └── deploy.sh │ ├── sql/ │ │ └── yixiang-drink-open.sql │ ├── yshop-dependencies/ │ │ └── pom.xml │ ├── yshop-framework/ │ │ ├── pom.xml │ │ ├── yshop-common/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── co/ │ │ │ │ └── yixiang/ │ │ │ │ └── yshop/ │ │ │ │ └── framework/ │ │ │ │ └── common/ │ │ │ │ ├── constant/ │ │ │ │ │ ├── ShopConstants.java │ │ │ │ │ └── SystemConfigConstants.java │ │ │ │ ├── core/ │ │ │ │ │ ├── IntArrayValuable.java │ │ │ │ │ └── KeyValue.java │ │ │ │ ├── enums/ │ │ │ │ │ ├── CommonStatusEnum.java │ │ │ │ │ ├── DateIntervalEnum.java │ │ │ │ │ ├── DocumentEnum.java │ │ │ │ │ ├── OrderInfoEnum.java │ │ │ │ │ ├── OrderTypeEnum.java │ │ │ │ │ ├── PayIdEnum.java │ │ │ │ │ ├── ShopCommonEnum.java │ │ │ │ │ ├── TerminalEnum.java │ │ │ │ │ ├── UserTypeEnum.java │ │ │ │ │ └── WebFilterOrderEnum.java │ │ │ │ ├── exception/ │ │ │ │ │ ├── ErrorCode.java │ │ │ │ │ ├── ServerException.java │ │ │ │ │ ├── ServiceException.java │ │ │ │ │ ├── enums/ │ │ │ │ │ │ ├── GlobalErrorCodeConstants.java │ │ │ │ │ │ └── ServiceErrorCodeRange.java │ │ │ │ │ └── util/ │ │ │ │ │ └── ServiceExceptionUtil.java │ │ │ │ ├── params/ │ │ │ │ │ └── QueryParam.java │ │ │ │ ├── pojo/ │ │ │ │ │ ├── CommonResult.java │ │ │ │ │ ├── PageParam.java │ │ │ │ │ ├── PageResult.java │ │ │ │ │ ├── SortablePageParam.java │ │ │ │ │ └── SortingField.java │ │ │ │ ├── serializer/ │ │ │ │ │ ├── BigDecimalSerializer.java │ │ │ │ │ └── DoubleSerializer.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 │ │ │ │ │ ├── monitor/ │ │ │ │ │ │ └── TracerUtils.java │ │ │ │ │ ├── number/ │ │ │ │ │ │ ├── MoneyUtils.java │ │ │ │ │ │ └── NumberUtils.java │ │ │ │ │ ├── object/ │ │ │ │ │ │ ├── BeanUtils.java │ │ │ │ │ │ ├── ObjectUtils.java │ │ │ │ │ │ └── PageUtils.java │ │ │ │ │ ├── servlet/ │ │ │ │ │ │ └── ServletUtils.java │ │ │ │ │ ├── spring/ │ │ │ │ │ │ ├── SpringExpressionUtils.java │ │ │ │ │ │ └── SpringUtils.java │ │ │ │ │ ├── string/ │ │ │ │ │ │ └── StrUtils.java │ │ │ │ │ ├── validation/ │ │ │ │ │ │ └── ValidationUtils.java │ │ │ │ │ └── yshop/ │ │ │ │ │ └── LocationUtils.java │ │ │ │ └── validation/ │ │ │ │ ├── InEnum.java │ │ │ │ ├── InEnumCollectionValidator.java │ │ │ │ ├── InEnumValidator.java │ │ │ │ ├── Mobile.java │ │ │ │ ├── MobileValidator.java │ │ │ │ ├── Telephone.java │ │ │ │ ├── TelephoneValidator.java │ │ │ │ └── package-info.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── framework/ │ │ │ └── common/ │ │ │ └── util/ │ │ │ └── collection/ │ │ │ └── CollectionUtilsTest.java │ │ ├── yshop-spring-boot-starter-biz-data-permission/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── co/ │ │ │ │ │ └── yixiang/ │ │ │ │ │ └── yshop/ │ │ │ │ │ └── framework/ │ │ │ │ │ └── datapermission/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── YshopDataPermissionAutoConfiguration.java │ │ │ │ │ │ └── YshopDeptDataPermissionAutoConfiguration.java │ │ │ │ │ └── core/ │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ └── DataPermission.java │ │ │ │ │ ├── aop/ │ │ │ │ │ │ ├── DataPermissionAnnotationAdvisor.java │ │ │ │ │ │ ├── DataPermissionAnnotationInterceptor.java │ │ │ │ │ │ └── DataPermissionContextHolder.java │ │ │ │ │ ├── db/ │ │ │ │ │ │ └── DataPermissionDatabaseInterceptor.java │ │ │ │ │ ├── rule/ │ │ │ │ │ │ ├── DataPermissionRule.java │ │ │ │ │ │ ├── DataPermissionRuleFactory.java │ │ │ │ │ │ ├── DataPermissionRuleFactoryImpl.java │ │ │ │ │ │ └── dept/ │ │ │ │ │ │ ├── DeptDataPermissionRule.java │ │ │ │ │ │ ├── DeptDataPermissionRuleCustomizer.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── util/ │ │ │ │ │ └── DataPermissionUtils.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── framework/ │ │ │ └── datapermission/ │ │ │ └── core/ │ │ │ ├── aop/ │ │ │ │ ├── DataPermissionAnnotationInterceptorTest.java │ │ │ │ └── DataPermissionContextHolderTest.java │ │ │ ├── db/ │ │ │ │ ├── DataPermissionDatabaseInterceptorTest.java │ │ │ │ └── DataPermissionDatabaseInterceptorTest2.java │ │ │ ├── rule/ │ │ │ │ ├── DataPermissionRuleFactoryImplTest.java │ │ │ │ └── dept/ │ │ │ │ └── DeptDataPermissionRuleTest.java │ │ │ └── util/ │ │ │ └── DataPermissionUtilsTest.java │ │ ├── yshop-spring-boot-starter-biz-ip/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── co/ │ │ │ │ │ └── yixiang/ │ │ │ │ │ └── yshop/ │ │ │ │ │ └── framework/ │ │ │ │ │ └── ip/ │ │ │ │ │ └── core/ │ │ │ │ │ ├── Area.java │ │ │ │ │ ├── enums/ │ │ │ │ │ │ └── AreaTypeEnum.java │ │ │ │ │ └── utils/ │ │ │ │ │ ├── AreaUtils.java │ │ │ │ │ └── IPUtils.java │ │ │ │ └── resources/ │ │ │ │ ├── area.csv │ │ │ │ └── ip2region.xdb │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── framework/ │ │ │ └── ip/ │ │ │ └── core/ │ │ │ └── utils/ │ │ │ ├── AreaUtilsTest.java │ │ │ └── IPUtilsTest.java │ │ ├── yshop-spring-boot-starter-biz-tenant/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ ├── co/ │ │ │ │ │ └── yixiang/ │ │ │ │ │ └── yshop/ │ │ │ │ │ └── framework/ │ │ │ │ │ └── tenant/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── TenantProperties.java │ │ │ │ │ │ └── YshopTenantAutoConfiguration.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 │ │ │ │ │ ├── security/ │ │ │ │ │ │ └── TenantSecurityWebFilter.java │ │ │ │ │ ├── service/ │ │ │ │ │ │ ├── TenantFrameworkService.java │ │ │ │ │ │ └── TenantFrameworkServiceImpl.java │ │ │ │ │ ├── util/ │ │ │ │ │ │ └── TenantUtils.java │ │ │ │ │ └── web/ │ │ │ │ │ └── TenantContextWebFilter.java │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── messaging/ │ │ │ │ └── handler/ │ │ │ │ └── invocation/ │ │ │ │ └── InvocableHandlerMethod.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── spring.factories │ │ ├── yshop-spring-boot-starter-excel/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── co/ │ │ │ │ │ └── yixiang/ │ │ │ │ │ └── yshop/ │ │ │ │ │ └── framework/ │ │ │ │ │ ├── dict/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── YshopDictAutoConfiguration.java │ │ │ │ │ │ └── core/ │ │ │ │ │ │ └── DictFrameworkUtils.java │ │ │ │ │ └── excel/ │ │ │ │ │ └── core/ │ │ │ │ │ ├── annotations/ │ │ │ │ │ │ ├── DictFormat.java │ │ │ │ │ │ └── ExcelColumnSelect.java │ │ │ │ │ ├── convert/ │ │ │ │ │ │ ├── AreaConvert.java │ │ │ │ │ │ ├── DictConvert.java │ │ │ │ │ │ ├── JsonConvert.java │ │ │ │ │ │ └── MoneyConvert.java │ │ │ │ │ ├── function/ │ │ │ │ │ │ └── ExcelColumnSelectFunction.java │ │ │ │ │ ├── handler/ │ │ │ │ │ │ └── SelectSheetWriteHandler.java │ │ │ │ │ └── util/ │ │ │ │ │ └── ExcelUtils.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── framework/ │ │ │ └── dict/ │ │ │ └── core/ │ │ │ └── util/ │ │ │ └── DictFrameworkUtilsTest.java │ │ ├── yshop-spring-boot-starter-job/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── co/ │ │ │ │ └── yixiang/ │ │ │ │ └── yshop/ │ │ │ │ └── framework/ │ │ │ │ └── quartz/ │ │ │ │ ├── config/ │ │ │ │ │ ├── YshopAsyncAutoConfiguration.java │ │ │ │ │ └── YshopQuartzAutoConfiguration.java │ │ │ │ └── core/ │ │ │ │ ├── enums/ │ │ │ │ │ └── JobDataKeyEnum.java │ │ │ │ ├── handler/ │ │ │ │ │ ├── JobHandler.java │ │ │ │ │ └── JobHandlerInvoker.java │ │ │ │ ├── scheduler/ │ │ │ │ │ └── SchedulerManager.java │ │ │ │ ├── service/ │ │ │ │ │ └── JobLogFrameworkService.java │ │ │ │ └── util/ │ │ │ │ └── CronUtils.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── yshop-spring-boot-starter-monitor/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── co/ │ │ │ │ └── yixiang/ │ │ │ │ └── yshop/ │ │ │ │ └── framework/ │ │ │ │ └── tracer/ │ │ │ │ ├── config/ │ │ │ │ │ ├── TracerProperties.java │ │ │ │ │ ├── YshopMetricsAutoConfiguration.java │ │ │ │ │ └── YshopTracerAutoConfiguration.java │ │ │ │ └── core/ │ │ │ │ ├── annotation/ │ │ │ │ │ └── BizTrace.java │ │ │ │ ├── aop/ │ │ │ │ │ └── BizTraceAspect.java │ │ │ │ ├── filter/ │ │ │ │ │ └── TraceFilter.java │ │ │ │ └── util/ │ │ │ │ └── TracerFrameworkUtils.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── yshop-spring-boot-starter-mq/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── co/ │ │ │ │ └── yixiang/ │ │ │ │ └── yshop/ │ │ │ │ └── framework/ │ │ │ │ └── mq/ │ │ │ │ ├── rabbitmq/ │ │ │ │ │ └── config/ │ │ │ │ │ └── YshopRabbitMQAutoConfiguration.java │ │ │ │ └── redis/ │ │ │ │ ├── config/ │ │ │ │ │ ├── YshopRedisMQConsumerAutoConfiguration.java │ │ │ │ │ └── YshopRedisMQProducerAutoConfiguration.java │ │ │ │ └── core/ │ │ │ │ ├── RedisMQTemplate.java │ │ │ │ ├── interceptor/ │ │ │ │ │ └── RedisMessageInterceptor.java │ │ │ │ ├── job/ │ │ │ │ │ └── RedisPendingMessageResendJob.java │ │ │ │ ├── message/ │ │ │ │ │ └── AbstractRedisMessage.java │ │ │ │ ├── pubsub/ │ │ │ │ │ ├── AbstractRedisChannelMessage.java │ │ │ │ │ └── AbstractRedisChannelMessageListener.java │ │ │ │ └── stream/ │ │ │ │ ├── AbstractRedisStreamMessage.java │ │ │ │ └── AbstractRedisStreamMessageListener.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── yshop-spring-boot-starter-mybatis/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── co/ │ │ │ │ └── yixiang/ │ │ │ │ └── yshop/ │ │ │ │ └── framework/ │ │ │ │ ├── datasource/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── YshopDataSourceAutoConfiguration.java │ │ │ │ │ └── core/ │ │ │ │ │ ├── enums/ │ │ │ │ │ │ └── DataSourceEnum.java │ │ │ │ │ └── filter/ │ │ │ │ │ └── DruidAdRemoveFilter.java │ │ │ │ ├── mybatis/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── IdTypeEnvironmentPostProcessor.java │ │ │ │ │ │ └── YshopMybatisAutoConfiguration.java │ │ │ │ │ └── core/ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ └── BaseDO.java │ │ │ │ │ ├── enums/ │ │ │ │ │ │ └── SqlConstants.java │ │ │ │ │ ├── handler/ │ │ │ │ │ │ └── DefaultDBFieldHandler.java │ │ │ │ │ ├── mapper/ │ │ │ │ │ │ └── BaseMapperX.java │ │ │ │ │ ├── query/ │ │ │ │ │ │ ├── LambdaQueryWrapperX.java │ │ │ │ │ │ ├── MPJLambdaWrapperX.java │ │ │ │ │ │ └── QueryWrapperX.java │ │ │ │ │ ├── type/ │ │ │ │ │ │ ├── EncryptTypeHandler.java │ │ │ │ │ │ ├── IntegerListTypeHandler.java │ │ │ │ │ │ ├── JsonLongSetTypeHandler.java │ │ │ │ │ │ ├── LongListTypeHandler.java │ │ │ │ │ │ └── StringListTypeHandler.java │ │ │ │ │ └── util/ │ │ │ │ │ ├── JdbcUtils.java │ │ │ │ │ └── MyBatisUtils.java │ │ │ │ └── translate/ │ │ │ │ ├── config/ │ │ │ │ │ └── YshopTranslateAutoConfiguration.java │ │ │ │ └── core/ │ │ │ │ └── TranslateUtils.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ ├── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── spring.factories │ │ ├── yshop-spring-boot-starter-protection/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── co/ │ │ │ │ └── yixiang/ │ │ │ │ └── yshop/ │ │ │ │ └── framework/ │ │ │ │ ├── idempotent/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── YshopIdempotentConfiguration.java │ │ │ │ │ └── core/ │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ └── Idempotent.java │ │ │ │ │ ├── aop/ │ │ │ │ │ │ └── IdempotentAspect.java │ │ │ │ │ ├── keyresolver/ │ │ │ │ │ │ ├── IdempotentKeyResolver.java │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ ├── DefaultIdempotentKeyResolver.java │ │ │ │ │ │ ├── ExpressionIdempotentKeyResolver.java │ │ │ │ │ │ └── UserIdempotentKeyResolver.java │ │ │ │ │ └── redis/ │ │ │ │ │ └── IdempotentRedisDAO.java │ │ │ │ ├── lock4j/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── YshopLock4jConfiguration.java │ │ │ │ │ └── core/ │ │ │ │ │ ├── DefaultLockFailureStrategy.java │ │ │ │ │ └── Lock4jRedisKeyConstants.java │ │ │ │ └── ratelimiter/ │ │ │ │ ├── config/ │ │ │ │ │ └── YshopRateLimiterConfiguration.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 │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── yshop-spring-boot-starter-redis/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── co/ │ │ │ │ └── yixiang/ │ │ │ │ └── yshop/ │ │ │ │ └── framework/ │ │ │ │ └── redis/ │ │ │ │ ├── config/ │ │ │ │ │ ├── RedissonConfig.java │ │ │ │ │ ├── YshopCacheAutoConfiguration.java │ │ │ │ │ ├── YshopCacheProperties.java │ │ │ │ │ └── YshopRedisAutoConfiguration.java │ │ │ │ ├── core/ │ │ │ │ │ ├── RedisKeyDefine.java │ │ │ │ │ ├── RedisKeyRegistry.java │ │ │ │ │ └── TimeoutRedisCacheManager.java │ │ │ │ └── util/ │ │ │ │ └── redis/ │ │ │ │ └── RedisUtil.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── yshop-spring-boot-starter-security/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── co/ │ │ │ │ └── yixiang/ │ │ │ │ └── yshop/ │ │ │ │ └── framework/ │ │ │ │ ├── operatelog/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── YshopOperateLogConfiguration.java │ │ │ │ │ └── core/ │ │ │ │ │ └── service/ │ │ │ │ │ └── LogRecordServiceImpl.java │ │ │ │ └── security/ │ │ │ │ ├── config/ │ │ │ │ │ ├── AuthorizeRequestsCustomizer.java │ │ │ │ │ ├── SecurityProperties.java │ │ │ │ │ ├── YshopSecurityAutoConfiguration.java │ │ │ │ │ └── YshopWebSecurityConfigurerAdapter.java │ │ │ │ └── core/ │ │ │ │ ├── LoginUser.java │ │ │ │ ├── annotations/ │ │ │ │ │ └── PreAuthenticated.java │ │ │ │ ├── aop/ │ │ │ │ │ └── PreAuthenticatedAspect.java │ │ │ │ ├── context/ │ │ │ │ │ └── TransmittableThreadLocalSecurityContextHolderStrategy.java │ │ │ │ ├── filter/ │ │ │ │ │ └── TokenAuthenticationFilter.java │ │ │ │ ├── handler/ │ │ │ │ │ ├── AccessDeniedHandlerImpl.java │ │ │ │ │ └── AuthenticationEntryPointImpl.java │ │ │ │ ├── service/ │ │ │ │ │ ├── SecurityFrameworkService.java │ │ │ │ │ └── SecurityFrameworkServiceImpl.java │ │ │ │ └── util/ │ │ │ │ └── SecurityFrameworkUtils.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ ├── yshop-spring-boot-starter-test/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── framework/ │ │ │ └── test/ │ │ │ ├── config/ │ │ │ │ ├── RedisTestConfiguration.java │ │ │ │ └── SqlInitializationTestConfiguration.java │ │ │ └── core/ │ │ │ ├── ut/ │ │ │ │ ├── BaseDbAndRedisUnitTest.java │ │ │ │ ├── BaseDbUnitTest.java │ │ │ │ ├── BaseMockitoUnitTest.java │ │ │ │ └── BaseRedisUnitTest.java │ │ │ └── util/ │ │ │ ├── AssertUtils.java │ │ │ └── RandomUtils.java │ │ ├── yshop-spring-boot-starter-web/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── co/ │ │ │ │ │ └── yixiang/ │ │ │ │ │ └── yshop/ │ │ │ │ │ └── framework/ │ │ │ │ │ ├── apilog/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── YshopApiLogAutoConfiguration.java │ │ │ │ │ │ └── core/ │ │ │ │ │ │ ├── annotation/ │ │ │ │ │ │ │ └── ApiAccessLog.java │ │ │ │ │ │ ├── enums/ │ │ │ │ │ │ │ └── OperateTypeEnum.java │ │ │ │ │ │ ├── filter/ │ │ │ │ │ │ │ └── ApiAccessLogFilter.java │ │ │ │ │ │ ├── interceptor/ │ │ │ │ │ │ │ └── ApiAccessLogInterceptor.java │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── ApiAccessLogFrameworkService.java │ │ │ │ │ │ ├── ApiAccessLogFrameworkServiceImpl.java │ │ │ │ │ │ ├── ApiErrorLogFrameworkService.java │ │ │ │ │ │ └── ApiErrorLogFrameworkServiceImpl.java │ │ │ │ │ ├── banner/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── YshopBannerAutoConfiguration.java │ │ │ │ │ │ └── core/ │ │ │ │ │ │ └── BannerApplicationRunner.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 │ │ │ │ │ ├── jackson/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── YshopJacksonAutoConfiguration.java │ │ │ │ │ │ └── core/ │ │ │ │ │ │ └── databind/ │ │ │ │ │ │ ├── NumberSerializer.java │ │ │ │ │ │ ├── TimestampLocalDateTimeDeserializer.java │ │ │ │ │ │ └── TimestampLocalDateTimeSerializer.java │ │ │ │ │ ├── swagger/ │ │ │ │ │ │ └── config/ │ │ │ │ │ │ ├── SwaggerProperties.java │ │ │ │ │ │ └── YshopSwaggerAutoConfiguration.java │ │ │ │ │ ├── web/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── WebProperties.java │ │ │ │ │ │ │ └── YshopWebAutoConfiguration.java │ │ │ │ │ │ └── core/ │ │ │ │ │ │ ├── filter/ │ │ │ │ │ │ │ ├── ApiRequestFilter.java │ │ │ │ │ │ │ ├── CacheRequestBodyFilter.java │ │ │ │ │ │ │ ├── CacheRequestBodyWrapper.java │ │ │ │ │ │ │ └── DemoFilter.java │ │ │ │ │ │ ├── handler/ │ │ │ │ │ │ │ ├── GlobalExceptionHandler.java │ │ │ │ │ │ │ └── GlobalResponseBodyHandler.java │ │ │ │ │ │ └── util/ │ │ │ │ │ │ └── WebFrameworkUtils.java │ │ │ │ │ └── xss/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── XssProperties.java │ │ │ │ │ │ └── YshopXssAutoConfiguration.java │ │ │ │ │ └── core/ │ │ │ │ │ ├── clean/ │ │ │ │ │ │ ├── JsoupXssCleaner.java │ │ │ │ │ │ └── XssCleaner.java │ │ │ │ │ ├── filter/ │ │ │ │ │ │ ├── XssFilter.java │ │ │ │ │ │ └── XssRequestWrapper.java │ │ │ │ │ └── json/ │ │ │ │ │ └── XssStringJsonDeserializer.java │ │ │ │ └── resources/ │ │ │ │ ├── META-INF/ │ │ │ │ │ └── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ └── banner.txt │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── framework/ │ │ │ └── desensitize/ │ │ │ └── core/ │ │ │ ├── DesensitizeTest.java │ │ │ ├── annotation/ │ │ │ │ └── Address.java │ │ │ └── handler/ │ │ │ └── AddressHandler.java │ │ └── yshop-spring-boot-starter-websocket/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── framework/ │ │ │ └── websocket/ │ │ │ ├── config/ │ │ │ │ ├── WebSocketProperties.java │ │ │ │ └── YshopWebSocketAutoConfiguration.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 │ │ └── resources/ │ │ └── META-INF/ │ │ └── spring/ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ ├── yshop-module-express/ │ │ ├── pom.xml │ │ ├── yshop-module-express-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── express/ │ │ │ ├── enums/ │ │ │ │ └── ErrorCodeConstants.java │ │ │ └── kdniao/ │ │ │ ├── enums/ │ │ │ │ ├── KdniaoLogisticsCodeEnum.java │ │ │ │ └── KdniaoLogisticsStatusEnum.java │ │ │ ├── model/ │ │ │ │ ├── dto/ │ │ │ │ │ ├── KdniaoApiBaseDTO.java │ │ │ │ │ ├── KdniaoApiDTO.java │ │ │ │ │ ├── KdniaoElectronicsOrderDTO.java │ │ │ │ │ └── KdniaoElectronicsOrderGoodsDTO.java │ │ │ │ └── vo/ │ │ │ │ ├── KdniaoApiVO.java │ │ │ │ ├── KdniaoLogisticsVO.java │ │ │ │ └── KdniaoOrderVO.java │ │ │ └── util/ │ │ │ └── KdniaoUtil.java │ │ └── yshop-module-express-biz/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── co/ │ │ └── yixiang/ │ │ └── yshop/ │ │ └── module/ │ │ └── express/ │ │ ├── controller/ │ │ │ ├── admin/ │ │ │ │ └── express/ │ │ │ │ ├── ExpressController.java │ │ │ │ └── vo/ │ │ │ │ ├── ExpressBaseVO.java │ │ │ │ ├── ExpressCreateReqVO.java │ │ │ │ ├── ExpressExcelVO.java │ │ │ │ ├── ExpressExportReqVO.java │ │ │ │ ├── ExpressPageReqVO.java │ │ │ │ ├── ExpressRespVO.java │ │ │ │ └── ExpressUpdateReqVO.java │ │ │ └── app/ │ │ │ └── express/ │ │ │ └── AppExpressController.java │ │ ├── convert/ │ │ │ └── express/ │ │ │ └── ExpressConvert.java │ │ ├── dal/ │ │ │ ├── dataobject/ │ │ │ │ └── express/ │ │ │ │ └── ExpressDO.java │ │ │ ├── mysql/ │ │ │ │ └── express/ │ │ │ │ └── ExpressMapper.java │ │ │ └── redis/ │ │ │ ├── RedisKeyConstants.java │ │ │ └── express/ │ │ │ └── ExpressRedisDAO.java │ │ └── service/ │ │ └── express/ │ │ ├── ExpressService.java │ │ └── ExpressServiceImpl.java │ ├── yshop-module-infra/ │ │ ├── pom.xml │ │ ├── yshop-module-infra-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── infra/ │ │ │ ├── api/ │ │ │ │ ├── file/ │ │ │ │ │ └── FileApi.java │ │ │ │ ├── logger/ │ │ │ │ │ ├── ApiAccessLogApi.java │ │ │ │ │ ├── ApiErrorLogApi.java │ │ │ │ │ └── dto/ │ │ │ │ │ ├── ApiAccessLogCreateReqDTO.java │ │ │ │ │ └── ApiErrorLogCreateReqDTO.java │ │ │ │ └── websocket/ │ │ │ │ └── WebSocketSenderApi.java │ │ │ └── enums/ │ │ │ ├── DictTypeConstants.java │ │ │ └── ErrorCodeConstants.java │ │ └── yshop-module-infra-biz/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── infra/ │ │ │ ├── api/ │ │ │ │ ├── file/ │ │ │ │ │ └── FileApiImpl.java │ │ │ │ ├── logger/ │ │ │ │ │ ├── ApiAccessLogApiImpl.java │ │ │ │ │ └── ApiErrorLogApiImpl.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/ │ │ │ │ │ │ ├── Demo03StudentController.java │ │ │ │ │ │ ├── package-info.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── Demo03StudentPageReqVO.java │ │ │ │ │ │ ├── Demo03StudentRespVO.java │ │ │ │ │ │ └── Demo03StudentSaveReqVO.java │ │ │ │ │ ├── file/ │ │ │ │ │ │ ├── FileConfigController.java │ │ │ │ │ │ ├── FileController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ ├── FileConfigPageReqVO.java │ │ │ │ │ │ │ ├── FileConfigRespVO.java │ │ │ │ │ │ │ └── FileConfigSaveReqVO.java │ │ │ │ │ │ └── file/ │ │ │ │ │ │ ├── FileCreateReqVO.java │ │ │ │ │ │ ├── FilePageReqVO.java │ │ │ │ │ │ ├── FilePresignedUrlRespVO.java │ │ │ │ │ │ ├── FileRespVO.java │ │ │ │ │ │ └── FileUploadReqVO.java │ │ │ │ │ ├── job/ │ │ │ │ │ │ ├── JobController.http │ │ │ │ │ │ ├── JobController.java │ │ │ │ │ │ ├── JobLogController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── job/ │ │ │ │ │ │ │ ├── JobPageReqVO.java │ │ │ │ │ │ │ ├── JobRespVO.java │ │ │ │ │ │ │ └── JobSaveReqVO.java │ │ │ │ │ │ └── log/ │ │ │ │ │ │ ├── JobLogPageReqVO.java │ │ │ │ │ │ └── JobLogRespVO.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 │ │ │ ├── convert/ │ │ │ │ ├── codegen/ │ │ │ │ │ └── CodegenConvert.java │ │ │ │ ├── config/ │ │ │ │ │ └── ConfigConvert.java │ │ │ │ ├── file/ │ │ │ │ │ └── FileConfigConvert.java │ │ │ │ └── redis/ │ │ │ │ └── RedisConvert.java │ │ │ ├── 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 │ │ │ │ │ ├── job/ │ │ │ │ │ │ ├── JobDO.java │ │ │ │ │ │ └── JobLogDO.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/ │ │ │ │ │ ├── Demo03CourseMapper.java │ │ │ │ │ ├── Demo03GradeMapper.java │ │ │ │ │ └── Demo03StudentMapper.java │ │ │ │ ├── file/ │ │ │ │ │ ├── FileConfigMapper.java │ │ │ │ │ ├── FileContentMapper.java │ │ │ │ │ └── FileMapper.java │ │ │ │ ├── job/ │ │ │ │ │ ├── JobLogMapper.java │ │ │ │ │ └── JobMapper.java │ │ │ │ └── logger/ │ │ │ │ ├── ApiAccessLogMapper.java │ │ │ │ └── ApiErrorLogMapper.java │ │ │ ├── enums/ │ │ │ │ ├── codegen/ │ │ │ │ │ ├── CodegenColumnHtmlTypeEnum.java │ │ │ │ │ ├── CodegenColumnListConditionEnum.java │ │ │ │ │ ├── CodegenFrontTypeEnum.java │ │ │ │ │ ├── CodegenSceneEnum.java │ │ │ │ │ └── CodegenTemplateTypeEnum.java │ │ │ │ ├── config/ │ │ │ │ │ └── ConfigTypeEnum.java │ │ │ │ ├── job/ │ │ │ │ │ ├── JobLogStatusEnum.java │ │ │ │ │ └── JobStatusEnum.java │ │ │ │ └── logger/ │ │ │ │ └── ApiErrorLogProcessStatusEnum.java │ │ │ ├── framework/ │ │ │ │ ├── codegen/ │ │ │ │ │ └── config/ │ │ │ │ │ ├── CodegenConfiguration.java │ │ │ │ │ └── CodegenProperties.java │ │ │ │ ├── file/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── YshopFileAutoConfiguration.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/ │ │ │ │ │ │ │ ├── FilePresignedUrlRespDTO.java │ │ │ │ │ │ │ ├── S3FileClient.java │ │ │ │ │ │ │ └── S3FileClientConfig.java │ │ │ │ │ │ └── sftp/ │ │ │ │ │ │ ├── SftpFileClient.java │ │ │ │ │ │ └── SftpFileClientConfig.java │ │ │ │ │ ├── enums/ │ │ │ │ │ │ └── FileStorageEnum.java │ │ │ │ │ └── utils/ │ │ │ │ │ └── FileTypeUtils.java │ │ │ │ ├── monitor/ │ │ │ │ │ └── config/ │ │ │ │ │ └── AdminServerConfiguration.java │ │ │ │ ├── security/ │ │ │ │ │ └── config/ │ │ │ │ │ └── SecurityConfiguration.java │ │ │ │ └── web/ │ │ │ │ └── config/ │ │ │ │ └── InfraWebConfiguration.java │ │ │ ├── job/ │ │ │ │ ├── job/ │ │ │ │ │ └── JobLogCleanJob.java │ │ │ │ └── logger/ │ │ │ │ ├── AccessLogCleanJob.java │ │ │ │ └── ErrorLogCleanJob.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/ │ │ │ │ │ ├── Demo03StudentService.java │ │ │ │ │ └── Demo03StudentServiceImpl.java │ │ │ │ ├── file/ │ │ │ │ │ ├── FileConfigService.java │ │ │ │ │ ├── FileConfigServiceImpl.java │ │ │ │ │ ├── FileService.java │ │ │ │ │ └── FileServiceImpl.java │ │ │ │ ├── job/ │ │ │ │ │ ├── JobLogService.java │ │ │ │ │ ├── JobLogServiceImpl.java │ │ │ │ │ ├── JobService.java │ │ │ │ │ └── JobServiceImpl.java │ │ │ │ └── logger/ │ │ │ │ ├── ApiAccessLogService.java │ │ │ │ ├── ApiAccessLogServiceImpl.java │ │ │ │ ├── ApiErrorLogService.java │ │ │ │ └── ApiErrorLogServiceImpl.java │ │ │ └── websocket/ │ │ │ ├── DemoWebSocketMessageListener.java │ │ │ └── message/ │ │ │ ├── DemoReceiveMessage.java │ │ │ └── DemoSendMessage.java │ │ └── resources/ │ │ └── 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_schema/ │ │ │ ├── api/ │ │ │ │ └── api.ts.vm │ │ │ └── views/ │ │ │ ├── data.ts.vm │ │ │ ├── form.vue.vm │ │ │ └── index.vue.vm │ │ └── vue3_vben/ │ │ ├── api/ │ │ │ └── api.ts.vm │ │ └── views/ │ │ ├── data.ts.vm │ │ ├── form.vue.vm │ │ └── index.vue.vm │ ├── yshop-module-mall/ │ │ ├── pom.xml │ │ ├── yshop-module-order-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── order/ │ │ │ └── enums/ │ │ │ ├── AdminAfterOrderStatusEnum.java │ │ │ ├── AdminOrderStatusEnum.java │ │ │ ├── AfterChangeTypeEnum.java │ │ │ ├── AfterSalesStatusEnum.java │ │ │ ├── AfterStatusEnum.java │ │ │ ├── AfterTypeEnum.java │ │ │ ├── AppFromEnum.java │ │ │ ├── ErrorCodeConstants.java │ │ │ ├── OrderLogEnum.java │ │ │ ├── OrderStatusEnum.java │ │ │ ├── PayTypeEnum.java │ │ │ ├── ShippingTempEnum.java │ │ │ └── UpdateOrderEnum.java │ │ ├── yshop-module-order-biz/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── co/ │ │ │ │ └── yixiang/ │ │ │ │ └── yshop/ │ │ │ │ └── module/ │ │ │ │ └── order/ │ │ │ │ ├── controller/ │ │ │ │ │ ├── admin/ │ │ │ │ │ │ └── storeorder/ │ │ │ │ │ │ ├── StoreOrderController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── ShoperOrderTimeDataVo.java │ │ │ │ │ │ ├── StoreOrderBaseVO.java │ │ │ │ │ │ ├── StoreOrderCreateReqVO.java │ │ │ │ │ │ ├── StoreOrderExcelVO.java │ │ │ │ │ │ ├── StoreOrderExportReqVO.java │ │ │ │ │ │ ├── StoreOrderPageReqVO.java │ │ │ │ │ │ ├── StoreOrderRefundVO.java │ │ │ │ │ │ ├── StoreOrderRespVO.java │ │ │ │ │ │ └── StoreOrderUpdateReqVO.java │ │ │ │ │ └── app/ │ │ │ │ │ └── order/ │ │ │ │ │ ├── AppOrderController.java │ │ │ │ │ ├── param/ │ │ │ │ │ │ ├── AppComputeOrderParam.java │ │ │ │ │ │ ├── AppConfirmOrderParam.java │ │ │ │ │ │ ├── AppDoOrderParam.java │ │ │ │ │ │ ├── AppExpressParam.java │ │ │ │ │ │ ├── AppHandleOrderParam.java │ │ │ │ │ │ ├── AppOrderParam.java │ │ │ │ │ │ ├── AppPayParam.java │ │ │ │ │ │ ├── AppProductReplyParam.java │ │ │ │ │ │ └── AppRefundParam.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── AppComputeVo.java │ │ │ │ │ ├── AppConfirmOrderVo.java │ │ │ │ │ └── AppStoreOrderQueryVo.java │ │ │ │ ├── convert/ │ │ │ │ │ ├── storeorder/ │ │ │ │ │ │ └── StoreOrderConvert.java │ │ │ │ │ ├── storeordercartinfo/ │ │ │ │ │ │ └── StoreOrderCartInfoConvert.java │ │ │ │ │ └── storeorderstatus/ │ │ │ │ │ └── StoreOrderStatusConvert.java │ │ │ │ ├── dal/ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ ├── ordernumber/ │ │ │ │ │ │ │ └── OrderNumberDO.java │ │ │ │ │ │ ├── storeorder/ │ │ │ │ │ │ │ └── StoreOrderDO.java │ │ │ │ │ │ ├── storeordercartinfo/ │ │ │ │ │ │ │ └── StoreOrderCartInfoDO.java │ │ │ │ │ │ └── storeorderstatus/ │ │ │ │ │ │ └── StoreOrderStatusDO.java │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ ├── ordernumber/ │ │ │ │ │ │ │ └── OrderNumberMapper.java │ │ │ │ │ │ ├── storeorder/ │ │ │ │ │ │ │ └── StoreOrderMapper.java │ │ │ │ │ │ ├── storeordercartinfo/ │ │ │ │ │ │ │ └── StoreOrderCartInfoMapper.java │ │ │ │ │ │ └── storeorderstatus/ │ │ │ │ │ │ └── StoreOrderStatusMapper.java │ │ │ │ │ └── redis/ │ │ │ │ │ ├── RedisKeyConstants.java │ │ │ │ │ ├── ofterorder/ │ │ │ │ │ │ └── AfterOrderRedisDAO.java │ │ │ │ │ └── order/ │ │ │ │ │ ├── AsyncCountRedisDAO.java │ │ │ │ │ ├── AsyncOrderRedisDAO.java │ │ │ │ │ ├── OrderRedisDAO.java │ │ │ │ │ └── PrintMechinRedisDAO.java │ │ │ │ ├── handle/ │ │ │ │ │ ├── OrderAutoConfirmListener.java │ │ │ │ │ ├── OrderUnPayListener.java │ │ │ │ │ └── RedisDelayHandle.java │ │ │ │ ├── mq/ │ │ │ │ │ └── consumer/ │ │ │ │ │ └── PayNoticeConsumer.java │ │ │ │ └── service/ │ │ │ │ ├── storeorder/ │ │ │ │ │ ├── AppStoreOrderService.java │ │ │ │ │ ├── AppStoreOrderServiceImpl.java │ │ │ │ │ ├── AsynStoreOrderServiceImpl.java │ │ │ │ │ ├── AsyncStoreOrderService.java │ │ │ │ │ ├── StoreOrderService.java │ │ │ │ │ ├── StoreOrderServiceImpl.java │ │ │ │ │ └── dto/ │ │ │ │ │ ├── CacheDto.java │ │ │ │ │ ├── ChartDataDto.java │ │ │ │ │ ├── CountDto.java │ │ │ │ │ ├── OrderCountDto.java │ │ │ │ │ ├── OrderExtendDto.java │ │ │ │ │ ├── OrderTimeDataDto.java │ │ │ │ │ ├── OtherDto.java │ │ │ │ │ ├── PriceGroupDto.java │ │ │ │ │ ├── ProductAttrDto.java │ │ │ │ │ ├── ProductDto.java │ │ │ │ │ ├── StatusDto.java │ │ │ │ │ ├── StoreOrderCartInfoDto.java │ │ │ │ │ ├── TemplateDto.java │ │ │ │ │ ├── YxExpressDto.java │ │ │ │ │ ├── YxOrderNowOrderStatusDto.java │ │ │ │ │ ├── YxStoreOrderCartInfoDto.java │ │ │ │ │ └── YxStoreOrderStatusDto.java │ │ │ │ ├── storeordercartinfo/ │ │ │ │ │ ├── StoreOrderCartInfoService.java │ │ │ │ │ └── StoreOrderCartInfoServiceImpl.java │ │ │ │ └── storeorderstatus/ │ │ │ │ ├── StoreOrderStatusService.java │ │ │ │ └── StoreOrderStatusServiceImpl.java │ │ │ └── resources/ │ │ │ └── mapper/ │ │ │ ├── express/ │ │ │ │ └── ExpressMapper.xml │ │ │ ├── storeorder/ │ │ │ │ └── StoreOrderMapper.xml │ │ │ ├── storeordercartinfo/ │ │ │ │ └── StoreOrderCartInfoMapper.xml │ │ │ └── storeorderstatus/ │ │ │ └── StoreOrderStatusMapper.xml │ │ ├── yshop-module-product-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── product/ │ │ │ ├── api/ │ │ │ │ ├── package-info.java │ │ │ │ ├── product/ │ │ │ │ │ └── ProductApi.java │ │ │ │ └── property/ │ │ │ │ ├── ProductPropertyValueApi.java │ │ │ │ └── dto/ │ │ │ │ └── ProductPropertyValueDetailRespDTO.java │ │ │ └── enums/ │ │ │ ├── ErrorCodeConstants.java │ │ │ ├── ProductConstants.java │ │ │ ├── comment/ │ │ │ │ └── ProductCommentAuditStatusEnum.java │ │ │ ├── delivery/ │ │ │ │ └── DeliveryTypeEnum.java │ │ │ ├── group/ │ │ │ │ └── ProductGroupStyleEnum.java │ │ │ ├── product/ │ │ │ │ ├── DefaultEnum.java │ │ │ │ ├── ProductEnum.java │ │ │ │ ├── ProductTypeEnum.java │ │ │ │ ├── RelationCateEnum.java │ │ │ │ ├── RelationEnum.java │ │ │ │ ├── ScoreEnum.java │ │ │ │ └── SpecTypeEnum.java │ │ │ └── spu/ │ │ │ ├── ProductSpuSpecTypeEnum.java │ │ │ └── ProductSpuStatusEnum.java │ │ ├── yshop-module-product-biz/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── java/ │ │ │ │ └── co/ │ │ │ │ └── yixiang/ │ │ │ │ └── yshop/ │ │ │ │ └── module/ │ │ │ │ └── product/ │ │ │ │ ├── api/ │ │ │ │ │ ├── package-info.java │ │ │ │ │ └── product/ │ │ │ │ │ └── ProductApiImpl.java │ │ │ │ ├── controller/ │ │ │ │ │ ├── admin/ │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ ├── ProductCategoryController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── ProductCategoryBaseVO.java │ │ │ │ │ │ │ ├── ProductCategoryCreateReqVO.java │ │ │ │ │ │ │ ├── ProductCategoryListReqVO.java │ │ │ │ │ │ │ ├── ProductCategoryRespVO.java │ │ │ │ │ │ │ └── ProductCategoryUpdateReqVO.java │ │ │ │ │ │ ├── storeproduct/ │ │ │ │ │ │ │ ├── StoreProductController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── StoreProductBaseVO.java │ │ │ │ │ │ │ ├── StoreProductCreateReqVO.java │ │ │ │ │ │ │ ├── StoreProductExcelVO.java │ │ │ │ │ │ │ ├── StoreProductExportReqVO.java │ │ │ │ │ │ │ ├── StoreProductPageReqVO.java │ │ │ │ │ │ │ ├── StoreProductRespVO.java │ │ │ │ │ │ │ └── StoreProductUpdateReqVO.java │ │ │ │ │ │ ├── storeproductreply/ │ │ │ │ │ │ │ ├── StoreProductReplyController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── StoreProductReplyBaseVO.java │ │ │ │ │ │ │ ├── StoreProductReplyPageReqVO.java │ │ │ │ │ │ │ ├── StoreProductReplyRespVO.java │ │ │ │ │ │ │ └── StoreProductReplyUpdateReqVO.java │ │ │ │ │ │ └── storeproductrule/ │ │ │ │ │ │ ├── StoreProductRuleController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── StoreProductRuleBaseVO.java │ │ │ │ │ │ ├── StoreProductRuleCreateReqVO.java │ │ │ │ │ │ ├── StoreProductRuleExcelVO.java │ │ │ │ │ │ ├── StoreProductRuleExportReqVO.java │ │ │ │ │ │ ├── StoreProductRulePageReqVO.java │ │ │ │ │ │ ├── StoreProductRuleRespVO.java │ │ │ │ │ │ └── StoreProductRuleUpdateReqVO.java │ │ │ │ │ └── app/ │ │ │ │ │ ├── cart/ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ └── AppStoreCartQueryVo.java │ │ │ │ │ ├── category/ │ │ │ │ │ │ ├── AppCategoryController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ └── AppCategoryRespVO.java │ │ │ │ │ └── product/ │ │ │ │ │ ├── AppStoreProductController.java │ │ │ │ │ ├── param/ │ │ │ │ │ │ └── AppStoreProductQueryParam.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── AppIndexVo.java │ │ │ │ │ ├── AppProductVo.java │ │ │ │ │ ├── AppReplyCountVo.java │ │ │ │ │ ├── AppStoreProductAttrQueryVo.java │ │ │ │ │ ├── AppStoreProductReplyQueryVo.java │ │ │ │ │ └── AppStoreProductRespVo.java │ │ │ │ ├── convert/ │ │ │ │ │ ├── category/ │ │ │ │ │ │ └── ProductCategoryConvert.java │ │ │ │ │ ├── storeproduct/ │ │ │ │ │ │ └── StoreProductConvert.java │ │ │ │ │ ├── storeproductattr/ │ │ │ │ │ │ └── StoreProductAttrConvert.java │ │ │ │ │ ├── storeproductattrresult/ │ │ │ │ │ │ └── StoreProductAttrResultConvert.java │ │ │ │ │ ├── storeproductattrvalue/ │ │ │ │ │ │ └── StoreProductAttrValueConvert.java │ │ │ │ │ ├── storeproductreply/ │ │ │ │ │ │ └── StoreProductReplyConvert.java │ │ │ │ │ └── storeproductrule/ │ │ │ │ │ └── StoreProductRuleConvert.java │ │ │ │ ├── dal/ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ └── ProductCategoryDO.java │ │ │ │ │ │ ├── storeproduct/ │ │ │ │ │ │ │ └── StoreProductDO.java │ │ │ │ │ │ ├── storeproductattr/ │ │ │ │ │ │ │ └── StoreProductAttrDO.java │ │ │ │ │ │ ├── storeproductattrresult/ │ │ │ │ │ │ │ └── StoreProductAttrResultDO.java │ │ │ │ │ │ ├── storeproductattrvalue/ │ │ │ │ │ │ │ └── StoreProductAttrValueDO.java │ │ │ │ │ │ ├── storeproductreply/ │ │ │ │ │ │ │ └── StoreProductReplyDO.java │ │ │ │ │ │ └── storeproductrule/ │ │ │ │ │ │ └── StoreProductRuleDO.java │ │ │ │ │ └── mysql/ │ │ │ │ │ ├── category/ │ │ │ │ │ │ └── ProductCategoryMapper.java │ │ │ │ │ ├── storeproduct/ │ │ │ │ │ │ └── StoreProductMapper.java │ │ │ │ │ ├── storeproductattr/ │ │ │ │ │ │ └── StoreProductAttrMapper.java │ │ │ │ │ ├── storeproductattrresult/ │ │ │ │ │ │ └── StoreProductAttrResultMapper.java │ │ │ │ │ ├── storeproductattrvalue/ │ │ │ │ │ │ └── StoreProductAttrValueMapper.java │ │ │ │ │ ├── storeproductreply/ │ │ │ │ │ │ └── StoreProductReplyMapper.java │ │ │ │ │ └── storeproductrule/ │ │ │ │ │ └── StoreProductRuleMapper.java │ │ │ │ ├── framework/ │ │ │ │ │ ├── package-info.java │ │ │ │ │ └── web/ │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── ProductWebConfiguration.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── package-info.java │ │ │ │ └── service/ │ │ │ │ ├── category/ │ │ │ │ │ ├── ProductCategoryService.java │ │ │ │ │ └── ProductCategoryServiceImpl.java │ │ │ │ ├── storeproduct/ │ │ │ │ │ ├── AppStoreProductService.java │ │ │ │ │ ├── AppStoreProductServiceImpl.java │ │ │ │ │ ├── StoreProductService.java │ │ │ │ │ ├── StoreProductServiceImpl.java │ │ │ │ │ └── dto/ │ │ │ │ │ ├── AttrValueDto.java │ │ │ │ │ ├── DetailDto.java │ │ │ │ │ ├── FromatDetailDto.java │ │ │ │ │ ├── ProductDto.java │ │ │ │ │ ├── ProductFormatDto.java │ │ │ │ │ ├── ProductResultDto.java │ │ │ │ │ ├── StoreProductDto.java │ │ │ │ │ ├── YxStoreProductDto.java │ │ │ │ │ ├── YxStoreProductRelationDto.java │ │ │ │ │ ├── YxStoreProductReplyDto.java │ │ │ │ │ ├── YxStoreProductRuleDto.java │ │ │ │ │ └── YxStoreProductSmallDto.java │ │ │ │ ├── storeproductattr/ │ │ │ │ │ ├── AppStoreProductAttrService.java │ │ │ │ │ ├── AppStoreProductAttrServiceImpl.java │ │ │ │ │ ├── StoreProductAttrService.java │ │ │ │ │ └── StoreProductAttrServiceImpl.java │ │ │ │ ├── storeproductattrresult/ │ │ │ │ │ ├── StoreProductAttrResultService.java │ │ │ │ │ └── StoreProductAttrResultServiceImpl.java │ │ │ │ ├── storeproductattrvalue/ │ │ │ │ │ ├── StoreProductAttrValueService.java │ │ │ │ │ └── StoreProductAttrValueServiceImpl.java │ │ │ │ ├── storeproductreply/ │ │ │ │ │ ├── AppStoreProductReplyService.java │ │ │ │ │ ├── AppStoreProductReplyServiceImpl.java │ │ │ │ │ ├── StoreProductReplyService.java │ │ │ │ │ └── StoreProductReplyServiceImpl.java │ │ │ │ └── storeproductrule/ │ │ │ │ ├── StoreProductRuleService.java │ │ │ │ └── StoreProductRuleServiceImpl.java │ │ │ └── resources/ │ │ │ └── mapper/ │ │ │ ├── shippingtemplates/ │ │ │ │ └── ShippingTemplatesMapper.xml │ │ │ ├── shippingtemplatesfree/ │ │ │ │ └── ShippingTemplatesFreeMapper.xml │ │ │ ├── shippingtemplatesregion/ │ │ │ │ └── ShippingTemplatesRegionMapper.xml │ │ │ ├── storeproduct/ │ │ │ │ └── StoreProductMapper.xml │ │ │ ├── storeproductattr/ │ │ │ │ └── StoreProductAttrMapper.xml │ │ │ ├── storeproductattrresult/ │ │ │ │ └── StoreProductAttrResultMapper.xml │ │ │ ├── storeproductattrvalue/ │ │ │ │ └── StoreProductAttrValueMapper.xml │ │ │ ├── storeproductrelation/ │ │ │ │ └── StoreProductRelationMapper.xml │ │ │ ├── storeproductreply/ │ │ │ │ └── StoreProductReplyMapper.xml │ │ │ └── storeproductrule/ │ │ │ └── StoreProductRuleMapper.xml │ │ ├── yshop-module-shop-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── shop/ │ │ │ └── enums/ │ │ │ └── ErrorCodeConstants.java │ │ ├── yshop-module-shop-biz/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── co/ │ │ │ │ │ └── yixiang/ │ │ │ │ │ └── yshop/ │ │ │ │ │ └── module/ │ │ │ │ │ └── shop/ │ │ │ │ │ ├── controller/ │ │ │ │ │ │ ├── admin/ │ │ │ │ │ │ │ ├── material/ │ │ │ │ │ │ │ │ ├── MaterialController.java │ │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ │ ├── MaterialBaseVO.java │ │ │ │ │ │ │ │ ├── MaterialCreateReqVO.java │ │ │ │ │ │ │ │ ├── MaterialExcelVO.java │ │ │ │ │ │ │ │ ├── MaterialExportReqVO.java │ │ │ │ │ │ │ │ ├── MaterialPageReqVO.java │ │ │ │ │ │ │ │ ├── MaterialRespVO.java │ │ │ │ │ │ │ │ └── MaterialUpdateReqVO.java │ │ │ │ │ │ │ ├── materialgroup/ │ │ │ │ │ │ │ │ ├── MaterialGroupController.java │ │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ │ ├── MaterialGroupBaseVO.java │ │ │ │ │ │ │ │ ├── MaterialGroupCreateReqVO.java │ │ │ │ │ │ │ │ ├── MaterialGroupExcelVO.java │ │ │ │ │ │ │ │ ├── MaterialGroupExportReqVO.java │ │ │ │ │ │ │ │ ├── MaterialGroupPageReqVO.java │ │ │ │ │ │ │ │ ├── MaterialGroupRespVO.java │ │ │ │ │ │ │ │ └── MaterialGroupUpdateReqVO.java │ │ │ │ │ │ │ ├── service/ │ │ │ │ │ │ │ │ ├── ServiceController.java │ │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ │ ├── ServiceBaseVO.java │ │ │ │ │ │ │ │ ├── ServiceCreateReqVO.java │ │ │ │ │ │ │ │ ├── ServiceExcelVO.java │ │ │ │ │ │ │ │ ├── ServiceExportReqVO.java │ │ │ │ │ │ │ │ ├── ServicePageReqVO.java │ │ │ │ │ │ │ │ ├── ServiceRespVO.java │ │ │ │ │ │ │ │ └── ServiceUpdateReqVO.java │ │ │ │ │ │ │ └── shopads/ │ │ │ │ │ │ │ ├── ShopAdsController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── ShopAdsBaseVO.java │ │ │ │ │ │ │ ├── ShopAdsCreateReqVO.java │ │ │ │ │ │ │ ├── ShopAdsExcelVO.java │ │ │ │ │ │ │ ├── ShopAdsExportReqVO.java │ │ │ │ │ │ │ ├── ShopAdsPageReqVO.java │ │ │ │ │ │ │ ├── ShopAdsRespVO.java │ │ │ │ │ │ │ └── ShopAdsUpdateReqVO.java │ │ │ │ │ │ └── app/ │ │ │ │ │ │ ├── ad/ │ │ │ │ │ │ │ ├── AppAdController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ └── AppShopAdsVO.java │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── AppServiceController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ └── AppServiceVO.java │ │ │ │ │ ├── convert/ │ │ │ │ │ │ ├── material/ │ │ │ │ │ │ │ └── MaterialConvert.java │ │ │ │ │ │ ├── materialgroup/ │ │ │ │ │ │ │ └── MaterialGroupConvert.java │ │ │ │ │ │ ├── service/ │ │ │ │ │ │ │ └── ServiceConvert.java │ │ │ │ │ │ └── shopads/ │ │ │ │ │ │ └── ShopAdsConvert.java │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ │ ├── material/ │ │ │ │ │ │ │ │ └── MaterialDO.java │ │ │ │ │ │ │ ├── materialgroup/ │ │ │ │ │ │ │ │ └── MaterialGroupDO.java │ │ │ │ │ │ │ ├── service/ │ │ │ │ │ │ │ │ └── ServiceDO.java │ │ │ │ │ │ │ └── shopads/ │ │ │ │ │ │ │ └── ShopAdsDO.java │ │ │ │ │ │ └── mysql/ │ │ │ │ │ │ ├── material/ │ │ │ │ │ │ │ └── MaterialMapper.java │ │ │ │ │ │ ├── materialgroup/ │ │ │ │ │ │ │ └── MaterialGroupMapper.java │ │ │ │ │ │ ├── service/ │ │ │ │ │ │ │ └── ServiceMapper.java │ │ │ │ │ │ └── shopads/ │ │ │ │ │ │ └── ShopAdsMapper.java │ │ │ │ │ ├── framework/ │ │ │ │ │ │ ├── package-info.java │ │ │ │ │ │ └── web/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── ShopWebConfiguration.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── service/ │ │ │ │ │ ├── material/ │ │ │ │ │ │ ├── MaterialService.java │ │ │ │ │ │ └── MaterialServiceImpl.java │ │ │ │ │ ├── materialgroup/ │ │ │ │ │ │ ├── MaterialGroupService.java │ │ │ │ │ │ └── MaterialGroupServiceImpl.java │ │ │ │ │ ├── service/ │ │ │ │ │ │ ├── AppServiceService.java │ │ │ │ │ │ ├── AppServiceServiceImpl.java │ │ │ │ │ │ ├── ServiceService.java │ │ │ │ │ │ └── ServiceServiceImpl.java │ │ │ │ │ └── shopads/ │ │ │ │ │ ├── AppShopAdsService.java │ │ │ │ │ ├── AppShopAdsServiceImpl.java │ │ │ │ │ ├── ShopAdsService.java │ │ │ │ │ └── ShopAdsServiceImpl.java │ │ │ │ └── resources/ │ │ │ │ └── mapper/ │ │ │ │ ├── material/ │ │ │ │ │ └── MaterialMapper.xml │ │ │ │ └── materialgroup/ │ │ │ │ └── MaterialGroupMapper.xml │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── shop/ │ │ │ └── service/ │ │ │ └── material/ │ │ │ └── MaterialServiceImplTest.java │ │ ├── yshop-module-store-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── store/ │ │ │ └── enums/ │ │ │ ├── ErrorCodeConstants.java │ │ │ └── WithdrawalStatusEnum.java │ │ └── yshop-module-store-biz/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── store/ │ │ │ ├── controller/ │ │ │ │ ├── admin/ │ │ │ │ │ └── storeshop/ │ │ │ │ │ ├── StoreShopController.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── StoreShopBaseVO.java │ │ │ │ │ ├── StoreShopCreateReqVO.java │ │ │ │ │ ├── StoreShopExcelVO.java │ │ │ │ │ ├── StoreShopExportReqVO.java │ │ │ │ │ ├── StoreShopPageReqVO.java │ │ │ │ │ ├── StoreShopRespVO.java │ │ │ │ │ └── StoreShopUpdateReqVO.java │ │ │ │ └── app/ │ │ │ │ └── storeshop/ │ │ │ │ ├── AppStoreController.java │ │ │ │ └── vo/ │ │ │ │ └── AppStoreShopVO.java │ │ │ ├── convert/ │ │ │ │ └── storeshop/ │ │ │ │ └── StoreShopConvert.java │ │ │ ├── dal/ │ │ │ │ ├── dataobject/ │ │ │ │ │ └── storeshop/ │ │ │ │ │ └── StoreShopDO.java │ │ │ │ ├── mysql/ │ │ │ │ │ └── storeshop/ │ │ │ │ │ └── StoreShopMapper.java │ │ │ │ └── redis/ │ │ │ │ ├── PrintTokenRedisDAO.java │ │ │ │ └── RedisKeyConstants.java │ │ │ └── service/ │ │ │ └── storeshop/ │ │ │ ├── AppStoreShopService.java │ │ │ ├── AppStoreShopServiceImpl.java │ │ │ ├── StoreShopService.java │ │ │ └── StoreShopServiceImpl.java │ │ └── resources/ │ │ └── mapper/ │ │ └── storeshop/ │ │ └── StoreShopMapper.xml │ ├── yshop-module-marketing/ │ │ ├── pom.xml │ │ ├── yshop-module-coupon-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── coupon/ │ │ │ └── enums/ │ │ │ ├── CouponStatusEnum.java │ │ │ └── ErrorCodeConstants.java │ │ └── yshop-module-coupon-biz/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── coupon/ │ │ │ ├── controller/ │ │ │ │ ├── admin/ │ │ │ │ │ ├── coupon/ │ │ │ │ │ │ ├── CouponController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── CouponBaseVO.java │ │ │ │ │ │ ├── CouponCreateReqVO.java │ │ │ │ │ │ ├── CouponExcelVO.java │ │ │ │ │ │ ├── CouponExportReqVO.java │ │ │ │ │ │ ├── CouponPageReqVO.java │ │ │ │ │ │ ├── CouponRespVO.java │ │ │ │ │ │ └── CouponUpdateReqVO.java │ │ │ │ │ └── couponuser/ │ │ │ │ │ ├── CouponUserController.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── CouponUserBaseVO.java │ │ │ │ │ ├── CouponUserCreateReqVO.java │ │ │ │ │ ├── CouponUserExcelVO.java │ │ │ │ │ ├── CouponUserExportReqVO.java │ │ │ │ │ ├── CouponUserPageReqVO.java │ │ │ │ │ ├── CouponUserRespVO.java │ │ │ │ │ └── CouponUserUpdateReqVO.java │ │ │ │ └── app/ │ │ │ │ └── coupon/ │ │ │ │ ├── AppCouponController.java │ │ │ │ └── vo/ │ │ │ │ ├── AppCouponVO.java │ │ │ │ ├── AppMyCouponVO.java │ │ │ │ └── AppReceVO.java │ │ │ ├── convert/ │ │ │ │ ├── coupon/ │ │ │ │ │ └── CouponConvert.java │ │ │ │ └── couponuser/ │ │ │ │ └── CouponUserConvert.java │ │ │ ├── dal/ │ │ │ │ ├── dataobject/ │ │ │ │ │ ├── coupon/ │ │ │ │ │ │ └── CouponDO.java │ │ │ │ │ └── couponuser/ │ │ │ │ │ └── CouponUserDO.java │ │ │ │ └── mysql/ │ │ │ │ ├── coupon/ │ │ │ │ │ └── CouponMapper.java │ │ │ │ └── couponuser/ │ │ │ │ └── CouponUserMapper.java │ │ │ └── service/ │ │ │ ├── coupon/ │ │ │ │ ├── AppCouponService.java │ │ │ │ ├── AppCouponServiceImpl.java │ │ │ │ ├── CouponService.java │ │ │ │ └── CouponServiceImpl.java │ │ │ └── couponuser/ │ │ │ ├── AppCouponUserService.java │ │ │ ├── AppCouponUserServiceImpl.java │ │ │ ├── CouponUserService.java │ │ │ └── CouponUserServiceImpl.java │ │ └── resources/ │ │ └── mapper/ │ │ └── coupon/ │ │ └── CouponMapper.xml │ ├── yshop-module-member/ │ │ ├── pom.xml │ │ ├── yshop-module-member-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── member/ │ │ │ ├── api/ │ │ │ │ ├── package-info.java │ │ │ │ └── user/ │ │ │ │ ├── MemberUserApi.java │ │ │ │ └── dto/ │ │ │ │ ├── MemberUserRespDTO.java │ │ │ │ └── WechatUserDto.java │ │ │ └── enums/ │ │ │ ├── BillDetailEnum.java │ │ │ ├── BillEnum.java │ │ │ ├── ErrorCodeConstants.java │ │ │ └── LoginTypeEnum.java │ │ └── yshop-module-member-biz/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── member/ │ │ │ ├── api/ │ │ │ │ ├── package-info.java │ │ │ │ └── user/ │ │ │ │ └── MemberUserApiImpl.java │ │ │ ├── controller/ │ │ │ │ ├── admin/ │ │ │ │ │ ├── user/ │ │ │ │ │ │ ├── MemberUserController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── UserBaseVO.java │ │ │ │ │ │ ├── UserCreateReqVO.java │ │ │ │ │ │ ├── UserExportReqVO.java │ │ │ │ │ │ ├── UserPageReqVO.java │ │ │ │ │ │ ├── UserRespVO.java │ │ │ │ │ │ ├── UserUpdateMoneyReqVO.java │ │ │ │ │ │ └── UserUpdateReqVO.java │ │ │ │ │ ├── useraddress/ │ │ │ │ │ │ ├── UserAddressController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── UserAddressBaseVO.java │ │ │ │ │ │ ├── UserAddressCreateReqVO.java │ │ │ │ │ │ ├── UserAddressExportReqVO.java │ │ │ │ │ │ ├── UserAddressPageReqVO.java │ │ │ │ │ │ ├── UserAddressRespVO.java │ │ │ │ │ │ └── UserAddressUpdateReqVO.java │ │ │ │ │ └── userbill/ │ │ │ │ │ ├── UserBillController.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── UserBillBaseVO.java │ │ │ │ │ ├── UserBillCreateReqVO.java │ │ │ │ │ ├── UserBillExportReqVO.java │ │ │ │ │ ├── UserBillPageReqVO.java │ │ │ │ │ ├── UserBillRespVO.java │ │ │ │ │ └── UserBillUpdateReqVO.java │ │ │ │ └── app/ │ │ │ │ ├── address/ │ │ │ │ │ ├── AppUserAddressController.java │ │ │ │ │ ├── param/ │ │ │ │ │ │ ├── AddressDetailParam.java │ │ │ │ │ │ └── AppAddressParam.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── AppUserAddressLocationVo.java │ │ │ │ │ ├── AppUserAddressQueryVo.java │ │ │ │ │ └── AreaNodeRespVO.java │ │ │ │ ├── auth/ │ │ │ │ │ ├── AppAuthController.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── AppAuthCheckCodeReqVO.java │ │ │ │ │ ├── AppAuthLoginReqVO.java │ │ │ │ │ ├── AppAuthLoginRespVO.java │ │ │ │ │ ├── AppAuthResetPasswordReqVO.java │ │ │ │ │ ├── AppAuthSmsLoginReqVO.java │ │ │ │ │ ├── AppAuthSmsSendReqVO.java │ │ │ │ │ ├── AppAuthSocialLoginReqVO.java │ │ │ │ │ ├── AppAuthUpdatePasswordReqVO.java │ │ │ │ │ ├── AppAuthWeixinMiniAppLoginReqVO.java │ │ │ │ │ ├── AppWeixinMiniLoginVO.java │ │ │ │ │ └── AppWxMiniLoginVO.java │ │ │ │ ├── social/ │ │ │ │ │ ├── AppSocialUserController.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── AppSocialUserBindReqVO.java │ │ │ │ │ └── AppSocialUserUnbindReqVO.java │ │ │ │ ├── user/ │ │ │ │ │ ├── AppUserController.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── AppUserBillVO.java │ │ │ │ │ ├── AppUserInfoRespVO.java │ │ │ │ │ ├── AppUserNickVO.java │ │ │ │ │ ├── AppUserOrderCountVo.java │ │ │ │ │ ├── AppUserQueryVo.java │ │ │ │ │ ├── AppUserRechargeVO.java │ │ │ │ │ └── AppUserUpdateMobileReqVO.java │ │ │ │ └── weixin/ │ │ │ │ └── AppWxMpController.java │ │ │ ├── convert/ │ │ │ │ ├── auth/ │ │ │ │ │ └── AuthConvert.java │ │ │ │ ├── package-info.java │ │ │ │ ├── social/ │ │ │ │ │ └── SocialUserConvert.java │ │ │ │ ├── user/ │ │ │ │ │ └── UserConvert.java │ │ │ │ ├── useraddress/ │ │ │ │ │ ├── AreaConvert.java │ │ │ │ │ └── UserAddressConvert.java │ │ │ │ └── userbill/ │ │ │ │ └── UserBillConvert.java │ │ │ ├── dal/ │ │ │ │ ├── dataobject/ │ │ │ │ │ ├── user/ │ │ │ │ │ │ └── MemberUserDO.java │ │ │ │ │ ├── useraddress/ │ │ │ │ │ │ └── UserAddressDO.java │ │ │ │ │ └── userbill/ │ │ │ │ │ └── UserBillDO.java │ │ │ │ ├── mysql/ │ │ │ │ │ ├── user/ │ │ │ │ │ │ └── MemberUserMapper.java │ │ │ │ │ ├── useraddress/ │ │ │ │ │ │ └── UserAddressMapper.java │ │ │ │ │ └── userbill/ │ │ │ │ │ └── UserBillMapper.java │ │ │ │ └── redis/ │ │ │ │ ├── RedisKeyConstants.java │ │ │ │ └── order/ │ │ │ │ └── MiniRedisDAO.java │ │ │ ├── framework/ │ │ │ │ ├── package-info.java │ │ │ │ └── web/ │ │ │ │ ├── config/ │ │ │ │ │ └── MemberWebConfiguration.java │ │ │ │ └── package-info.java │ │ │ └── service/ │ │ │ ├── auth/ │ │ │ │ ├── MemberAuthService.java │ │ │ │ └── MemberAuthServiceImpl.java │ │ │ ├── user/ │ │ │ │ ├── MemberUserService.java │ │ │ │ ├── MemberUserServiceImpl.java │ │ │ │ ├── UserService.java │ │ │ │ ├── UserServiceImpl.java │ │ │ │ └── dto/ │ │ │ │ └── WechatUserDto.java │ │ │ ├── useraddress/ │ │ │ │ ├── AppUserAddressService.java │ │ │ │ ├── AppUserAddressServiceImpl.java │ │ │ │ ├── UserAddressService.java │ │ │ │ └── UserAddressServiceImpl.java │ │ │ └── userbill/ │ │ │ ├── UserBillService.java │ │ │ └── UserBillServiceImpl.java │ │ └── test/ │ │ ├── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── member/ │ │ │ └── service/ │ │ │ └── auth/ │ │ │ └── MemberAuthServiceTest.java │ │ └── resources/ │ │ ├── application-unit-test.yaml │ │ ├── logback.xml │ │ └── sql/ │ │ ├── clean.sql │ │ └── create_tables.sql │ ├── yshop-module-message/ │ │ ├── pom.xml │ │ ├── yshop-module-message-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── message/ │ │ │ └── enums/ │ │ │ ├── ErrorCodeConstants.java │ │ │ └── WechatTempateEnum.java │ │ └── yshop-module-message-biz/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── message/ │ │ │ ├── controller/ │ │ │ │ └── admin/ │ │ │ │ └── wechattemplate/ │ │ │ │ ├── WechatTemplateController.java │ │ │ │ └── vo/ │ │ │ │ ├── WechatTemplateBaseVO.java │ │ │ │ ├── WechatTemplateCreateReqVO.java │ │ │ │ ├── WechatTemplateExcelVO.java │ │ │ │ ├── WechatTemplateExportReqVO.java │ │ │ │ ├── WechatTemplatePageReqVO.java │ │ │ │ ├── WechatTemplateRespVO.java │ │ │ │ └── WechatTemplateUpdateReqVO.java │ │ │ ├── convert/ │ │ │ │ └── wechattemplate/ │ │ │ │ └── WechatTemplateConvert.java │ │ │ ├── dal/ │ │ │ │ ├── dataobject/ │ │ │ │ │ └── wechattemplate/ │ │ │ │ │ └── WechatTemplateDO.java │ │ │ │ └── mysql/ │ │ │ │ └── wechattemplate/ │ │ │ │ └── WechatTemplateMapper.java │ │ │ ├── mq/ │ │ │ │ ├── consumer/ │ │ │ │ │ └── WeixinNoticeConsumer.java │ │ │ │ ├── message/ │ │ │ │ │ └── WeixinNoticeMessage.java │ │ │ │ └── producer/ │ │ │ │ └── WeixinNoticeProducer.java │ │ │ ├── redismq/ │ │ │ │ ├── DelayedQueueListener.java │ │ │ │ ├── DelayedQueueListenerConfigurer.java │ │ │ │ ├── DelayedQueuePollTask.java │ │ │ │ └── msg/ │ │ │ │ └── OrderMsg.java │ │ │ ├── service/ │ │ │ │ └── wechattemplate/ │ │ │ │ ├── WechatTemplateService.java │ │ │ │ └── WechatTemplateServiceImpl.java │ │ │ └── supply/ │ │ │ ├── WeiXinSubscribeService.java │ │ │ └── WeixinTemplateService.java │ │ └── resources/ │ │ └── mapper/ │ │ └── wechattemplate/ │ │ └── WechatTemplateMapper.xml │ ├── yshop-module-mp/ │ │ ├── pom.xml │ │ ├── yshop-module-mp-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── mp/ │ │ │ └── enums/ │ │ │ ├── ErrorCodeConstants.java │ │ │ ├── MpAccountEnum.java │ │ │ └── message/ │ │ │ ├── MpAutoReplyMatchEnum.java │ │ │ ├── MpAutoReplyTypeEnum.java │ │ │ └── MpMessageSendFromEnum.java │ │ └── yshop-module-mp-biz/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── co/ │ │ └── yixiang/ │ │ └── yshop/ │ │ └── module/ │ │ └── mp/ │ │ ├── controller/ │ │ │ └── admin/ │ │ │ ├── account/ │ │ │ │ ├── MaAccountController.java │ │ │ │ ├── MpAccountController.java │ │ │ │ └── vo/ │ │ │ │ ├── MpAccountBaseVO.java │ │ │ │ ├── MpAccountCreateReqVO.java │ │ │ │ ├── MpAccountPageReqVO.java │ │ │ │ ├── MpAccountRespVO.java │ │ │ │ ├── MpAccountSimpleRespVO.java │ │ │ │ └── MpAccountUpdateReqVO.java │ │ │ ├── material/ │ │ │ │ ├── MpMaterialController.java │ │ │ │ └── vo/ │ │ │ │ ├── MpMaterialPageReqVO.java │ │ │ │ ├── MpMaterialRespVO.java │ │ │ │ ├── MpMaterialUploadNewsImageReqVO.java │ │ │ │ ├── MpMaterialUploadPermanentReqVO.java │ │ │ │ ├── MpMaterialUploadRespVO.java │ │ │ │ └── MpMaterialUploadTemporaryReqVO.java │ │ │ ├── menu/ │ │ │ │ ├── MpMenuController.java │ │ │ │ └── vo/ │ │ │ │ ├── MpMenuBaseVO.java │ │ │ │ ├── MpMenuRespVO.java │ │ │ │ └── MpMenuSaveReqVO.java │ │ │ ├── message/ │ │ │ │ ├── MpAutoReplyController.java │ │ │ │ ├── MpMessageController.java │ │ │ │ └── vo/ │ │ │ │ ├── autoreply/ │ │ │ │ │ ├── MpAutoReplyBaseVO.java │ │ │ │ │ ├── MpAutoReplyCreateReqVO.java │ │ │ │ │ ├── MpAutoReplyPageReqVO.java │ │ │ │ │ ├── MpAutoReplyRespVO.java │ │ │ │ │ └── MpAutoReplyUpdateReqVO.java │ │ │ │ └── message/ │ │ │ │ ├── MpMessagePageReqVO.java │ │ │ │ ├── MpMessageRespVO.java │ │ │ │ └── MpMessageSendReqVO.java │ │ │ ├── news/ │ │ │ │ ├── MpDraftController.java │ │ │ │ ├── MpFreePublishController.java │ │ │ │ └── vo/ │ │ │ │ ├── MpDraftPageReqVO.java │ │ │ │ └── MpFreePublishPageReqVO.java │ │ │ ├── open/ │ │ │ │ ├── MpOpenController.java │ │ │ │ └── vo/ │ │ │ │ ├── MpOpenCheckSignatureReqVO.java │ │ │ │ └── MpOpenHandleMessageReqVO.java │ │ │ ├── statistics/ │ │ │ │ ├── MpStatisticsController.java │ │ │ │ └── vo/ │ │ │ │ ├── MpStatisticsGetReqVO.java │ │ │ │ ├── MpStatisticsInterfaceSummaryRespVO.java │ │ │ │ ├── MpStatisticsUpstreamMessageRespVO.java │ │ │ │ ├── MpStatisticsUserCumulateRespVO.java │ │ │ │ └── MpStatisticsUserSummaryRespVO.java │ │ │ ├── tag/ │ │ │ │ ├── MpTagController.java │ │ │ │ └── vo/ │ │ │ │ ├── MpTagBaseVO.java │ │ │ │ ├── MpTagCreateReqVO.java │ │ │ │ ├── MpTagPageReqVO.java │ │ │ │ ├── MpTagRespVO.java │ │ │ │ ├── MpTagSimpleRespVO.java │ │ │ │ └── MpTagUpdateReqVO.java │ │ │ └── user/ │ │ │ ├── MpUserController.java │ │ │ └── vo/ │ │ │ ├── MpUserPageReqVO.java │ │ │ ├── MpUserRespVO.java │ │ │ └── MpUserUpdateReqVO.java │ │ ├── convert/ │ │ │ ├── account/ │ │ │ │ └── MpAccountConvert.java │ │ │ ├── material/ │ │ │ │ └── MpMaterialConvert.java │ │ │ ├── menu/ │ │ │ │ └── MpMenuConvert.java │ │ │ ├── message/ │ │ │ │ ├── MpAutoReplyConvert.java │ │ │ │ └── MpMessageConvert.java │ │ │ ├── statistics/ │ │ │ │ └── MpStatisticsConvert.java │ │ │ ├── tag/ │ │ │ │ └── MpTagConvert.java │ │ │ └── user/ │ │ │ └── MpUserConvert.java │ │ ├── dal/ │ │ │ ├── dataobject/ │ │ │ │ ├── account/ │ │ │ │ │ └── MpAccountDO.java │ │ │ │ ├── material/ │ │ │ │ │ └── MpMaterialDO.java │ │ │ │ ├── menu/ │ │ │ │ │ └── MpMenuDO.java │ │ │ │ ├── message/ │ │ │ │ │ ├── MpAutoReplyDO.java │ │ │ │ │ └── MpMessageDO.java │ │ │ │ ├── tag/ │ │ │ │ │ └── MpTagDO.java │ │ │ │ └── user/ │ │ │ │ └── MpUserDO.java │ │ │ └── mysql/ │ │ │ ├── account/ │ │ │ │ └── MpAccountMapper.java │ │ │ ├── material/ │ │ │ │ └── MpMaterialMapper.java │ │ │ ├── menu/ │ │ │ │ └── MpMenuMapper.java │ │ │ ├── message/ │ │ │ │ ├── MpAutoReplyMapper.java │ │ │ │ └── MpMessageMapper.java │ │ │ ├── tag/ │ │ │ │ └── MpTagMapper.java │ │ │ └── user/ │ │ │ └── MpUserMapper.java │ │ ├── framework/ │ │ │ ├── mp/ │ │ │ │ ├── config/ │ │ │ │ │ └── MpConfiguration.java │ │ │ │ └── core/ │ │ │ │ ├── DefaultMpServiceFactory.java │ │ │ │ ├── MpServiceFactory.java │ │ │ │ ├── context/ │ │ │ │ │ └── MpContextHolder.java │ │ │ │ └── util/ │ │ │ │ └── MpUtils.java │ │ │ └── web/ │ │ │ └── config/ │ │ │ └── MpWebConfiguration.java │ │ └── service/ │ │ ├── account/ │ │ │ ├── MpAccountService.java │ │ │ └── MpAccountServiceImpl.java │ │ ├── handler/ │ │ │ ├── menu/ │ │ │ │ └── MenuHandler.java │ │ │ ├── message/ │ │ │ │ ├── MessageAutoReplyHandler.java │ │ │ │ └── MessageReceiveHandler.java │ │ │ ├── other/ │ │ │ │ ├── KfSessionHandler.java │ │ │ │ ├── NullHandler.java │ │ │ │ ├── ScanHandler.java │ │ │ │ ├── StoreCheckNotifyHandler.java │ │ │ │ └── package-info.java │ │ │ └── user/ │ │ │ ├── LocationHandler.java │ │ │ ├── SubscribeHandler.java │ │ │ └── UnsubscribeHandler.java │ │ ├── material/ │ │ │ ├── MpMaterialService.java │ │ │ └── MpMaterialServiceImpl.java │ │ ├── menu/ │ │ │ ├── MpMenuService.java │ │ │ └── MpMenuServiceImpl.java │ │ ├── message/ │ │ │ ├── MpAutoReplyService.java │ │ │ ├── MpAutoReplyServiceImpl.java │ │ │ ├── MpMessageService.java │ │ │ ├── MpMessageServiceImpl.java │ │ │ └── bo/ │ │ │ └── MpMessageSendOutReqBO.java │ │ ├── statistics/ │ │ │ ├── MpStatisticsService.java │ │ │ └── MpStatisticsServiceImpl.java │ │ ├── tag/ │ │ │ ├── MpTagService.java │ │ │ └── MpTagServiceImpl.java │ │ └── user/ │ │ ├── MpUserService.java │ │ └── MpUserServiceImpl.java │ ├── yshop-module-pay/ │ │ ├── pom.xml │ │ ├── yshop-module-pay-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── pay/ │ │ │ ├── config/ │ │ │ │ ├── MerchantPayServiceConfigurer.java │ │ │ │ ├── PayAutoConfiguration.java │ │ │ │ ├── handlers/ │ │ │ │ │ ├── AliPayMessageHandler.java │ │ │ │ │ └── WxPayMessageHandler.java │ │ │ │ └── interceptor/ │ │ │ │ ├── AliPayMessageInterceptor.java │ │ │ │ └── WxPayMessageInterceptor.java │ │ │ ├── enums/ │ │ │ │ └── ErrorCodeConstants.java │ │ │ └── mq/ │ │ │ ├── message/ │ │ │ │ └── PayNoticeMessage.java │ │ │ └── producer/ │ │ │ └── PayNoticeProducer.java │ │ └── yshop-module-pay-biz/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── pay/ │ │ │ ├── controller/ │ │ │ │ └── admin/ │ │ │ │ └── merchantdetails/ │ │ │ │ ├── MerchantDetailsController.java │ │ │ │ └── vo/ │ │ │ │ ├── MerchantDetailsBaseVO.java │ │ │ │ ├── MerchantDetailsCreateReqVO.java │ │ │ │ ├── MerchantDetailsExcelVO.java │ │ │ │ ├── MerchantDetailsExportReqVO.java │ │ │ │ ├── MerchantDetailsPageReqVO.java │ │ │ │ ├── MerchantDetailsRespVO.java │ │ │ │ └── MerchantDetailsUpdateReqVO.java │ │ │ ├── convert/ │ │ │ │ └── merchantdetails/ │ │ │ │ └── MerchantDetailsConvert.java │ │ │ ├── dal/ │ │ │ │ ├── dataobject/ │ │ │ │ │ └── merchantdetails/ │ │ │ │ │ └── MerchantDetailsDO.java │ │ │ │ └── mysql/ │ │ │ │ └── merchantdetails/ │ │ │ │ └── MerchantDetailsMapper.java │ │ │ ├── http/ │ │ │ │ └── HttpRequestNoticeNewParams.java │ │ │ └── service/ │ │ │ └── merchantdetails/ │ │ │ ├── MerchantDetailsService.java │ │ │ └── MerchantDetailsServiceImpl.java │ │ └── resources/ │ │ └── mapper/ │ │ └── merchantdetails/ │ │ └── MerchantDetailsMapper.xml │ ├── yshop-module-score/ │ │ ├── pom.xml │ │ ├── yshop-module-score-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── score/ │ │ │ └── enums/ │ │ │ ├── ErrorCodeConstants.java │ │ │ └── OrderStatusEnum.java │ │ └── yshop-module-score-biz/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── score/ │ │ │ ├── controller/ │ │ │ │ ├── admin/ │ │ │ │ │ ├── scoreorder/ │ │ │ │ │ │ ├── ScoreOrderController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── ScoreOrderBaseVO.java │ │ │ │ │ │ ├── ScoreOrderCreateReqVO.java │ │ │ │ │ │ ├── ScoreOrderExcelVO.java │ │ │ │ │ │ ├── ScoreOrderExportReqVO.java │ │ │ │ │ │ ├── ScoreOrderPageReqVO.java │ │ │ │ │ │ ├── ScoreOrderRespVO.java │ │ │ │ │ │ └── ScoreOrderUpdateReqVO.java │ │ │ │ │ └── scoreproduct/ │ │ │ │ │ ├── ScoreProductController.java │ │ │ │ │ └── vo/ │ │ │ │ │ ├── ScoreProductBaseVO.java │ │ │ │ │ ├── ScoreProductCreateReqVO.java │ │ │ │ │ ├── ScoreProductExcelVO.java │ │ │ │ │ ├── ScoreProductExportReqVO.java │ │ │ │ │ ├── ScoreProductPageReqVO.java │ │ │ │ │ ├── ScoreProductRespVO.java │ │ │ │ │ └── ScoreProductUpdateReqVO.java │ │ │ │ └── app/ │ │ │ │ ├── order/ │ │ │ │ │ ├── AppScoreOrderController.java │ │ │ │ │ ├── param/ │ │ │ │ │ │ └── AppScoreOrderParam.java │ │ │ │ │ └── vo/ │ │ │ │ │ └── AppScoreOrderVO.java │ │ │ │ └── product/ │ │ │ │ ├── AppScoreProductController.java │ │ │ │ ├── param/ │ │ │ │ │ └── AppScoreProductQueryParam.java │ │ │ │ └── vo/ │ │ │ │ └── AppScoreProductVO.java │ │ │ ├── convert/ │ │ │ │ ├── scoreorder/ │ │ │ │ │ └── ScoreOrderConvert.java │ │ │ │ └── scoreproduct/ │ │ │ │ └── ScoreProductConvert.java │ │ │ ├── dal/ │ │ │ │ ├── dataobject/ │ │ │ │ │ ├── scoreorder/ │ │ │ │ │ │ └── ScoreOrderDO.java │ │ │ │ │ └── scoreproduct/ │ │ │ │ │ └── ScoreProductDO.java │ │ │ │ └── mysql/ │ │ │ │ ├── scoreorder/ │ │ │ │ │ └── ScoreOrderMapper.java │ │ │ │ └── scoreproduct/ │ │ │ │ └── ScoreProductMapper.java │ │ │ └── service/ │ │ │ ├── scoreorder/ │ │ │ │ ├── AppScoreOrderService.java │ │ │ │ ├── AppScoreOrderServiceImpl.java │ │ │ │ ├── ScoreOrderService.java │ │ │ │ └── ScoreOrderServiceImpl.java │ │ │ └── scoreproduct/ │ │ │ ├── AppScoreProductService.java │ │ │ ├── AppScoreProductServiceImpl.java │ │ │ ├── ScoreProductService.java │ │ │ └── ScoreProductServiceImpl.java │ │ └── resources/ │ │ └── mapper/ │ │ └── scoreorder/ │ │ └── ScoreOrderMapper.xml │ ├── yshop-module-system/ │ │ ├── pom.xml │ │ ├── yshop-module-system-api/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── co/ │ │ │ └── yixiang/ │ │ │ └── yshop/ │ │ │ └── module/ │ │ │ └── system/ │ │ │ ├── api/ │ │ │ │ ├── dept/ │ │ │ │ │ ├── DeptApi.java │ │ │ │ │ ├── PostApi.java │ │ │ │ │ └── dto/ │ │ │ │ │ ├── DeptRespDTO.java │ │ │ │ │ └── PostRespDTO.java │ │ │ │ ├── dict/ │ │ │ │ │ ├── DictDataApi.java │ │ │ │ │ └── dto/ │ │ │ │ │ └── DictDataRespDTO.java │ │ │ │ ├── logger/ │ │ │ │ │ ├── LoginLogApi.java │ │ │ │ │ ├── OperateLogApi.java │ │ │ │ │ └── dto/ │ │ │ │ │ ├── LoginLogCreateReqDTO.java │ │ │ │ │ ├── OperateLogCreateReqDTO.java │ │ │ │ │ ├── OperateLogPageReqDTO.java │ │ │ │ │ └── OperateLogRespDTO.java │ │ │ │ ├── mail/ │ │ │ │ │ ├── MailSendApi.java │ │ │ │ │ └── dto/ │ │ │ │ │ └── MailSendSingleToUserReqDTO.java │ │ │ │ ├── notify/ │ │ │ │ │ ├── NotifyMessageSendApi.java │ │ │ │ │ └── dto/ │ │ │ │ │ ├── NotifySendSingleToUserReqDTO.java │ │ │ │ │ └── NotifyTemplateReqDTO.java │ │ │ │ ├── oauth2/ │ │ │ │ │ ├── OAuth2TokenApi.java │ │ │ │ │ └── dto/ │ │ │ │ │ ├── OAuth2AccessTokenCheckRespDTO.java │ │ │ │ │ ├── OAuth2AccessTokenCreateReqDTO.java │ │ │ │ │ └── OAuth2AccessTokenRespDTO.java │ │ │ │ ├── permission/ │ │ │ │ │ ├── PermissionApi.java │ │ │ │ │ ├── RoleApi.java │ │ │ │ │ └── dto/ │ │ │ │ │ └── DeptDataPermissionRespDTO.java │ │ │ │ ├── sms/ │ │ │ │ │ ├── SmsCodeApi.java │ │ │ │ │ ├── SmsSendApi.java │ │ │ │ │ └── dto/ │ │ │ │ │ ├── code/ │ │ │ │ │ │ ├── SmsCodeSendReqDTO.java │ │ │ │ │ │ ├── SmsCodeUseReqDTO.java │ │ │ │ │ │ └── SmsCodeValidateReqDTO.java │ │ │ │ │ └── send/ │ │ │ │ │ └── SmsSendSingleToUserReqDTO.java │ │ │ │ ├── social/ │ │ │ │ │ ├── SocialClientApi.java │ │ │ │ │ ├── SocialUserApi.java │ │ │ │ │ └── dto/ │ │ │ │ │ ├── SocialUserBindReqDTO.java │ │ │ │ │ ├── SocialUserRespDTO.java │ │ │ │ │ ├── SocialUserUnbindReqDTO.java │ │ │ │ │ ├── SocialWxJsapiSignatureRespDTO.java │ │ │ │ │ └── SocialWxPhoneNumberInfoRespDTO.java │ │ │ │ ├── tenant/ │ │ │ │ │ └── TenantApi.java │ │ │ │ └── user/ │ │ │ │ ├── AdminUserApi.java │ │ │ │ └── dto/ │ │ │ │ └── AdminUserRespDTO.java │ │ │ └── enums/ │ │ │ ├── DictTypeConstants.java │ │ │ ├── ErrorCodeConstants.java │ │ │ ├── LogRecordConstants.java │ │ │ ├── common/ │ │ │ │ └── SexEnum.java │ │ │ ├── logger/ │ │ │ │ ├── LoginLogTypeEnum.java │ │ │ │ └── LoginResultEnum.java │ │ │ ├── mail/ │ │ │ │ └── MailSendStatusEnum.java │ │ │ ├── notice/ │ │ │ │ └── NoticeTypeEnum.java │ │ │ ├── notify/ │ │ │ │ └── NotifyTemplateTypeEnum.java │ │ │ ├── oauth2/ │ │ │ │ ├── OAuth2ClientConstants.java │ │ │ │ └── OAuth2GrantTypeEnum.java │ │ │ ├── permission/ │ │ │ │ ├── DataScopeEnum.java │ │ │ │ ├── MenuTypeEnum.java │ │ │ │ ├── RoleCodeEnum.java │ │ │ │ └── RoleTypeEnum.java │ │ │ ├── sms/ │ │ │ │ ├── SmsReceiveStatusEnum.java │ │ │ │ ├── SmsSceneEnum.java │ │ │ │ ├── SmsSendStatusEnum.java │ │ │ │ └── SmsTemplateTypeEnum.java │ │ │ └── social/ │ │ │ └── SocialTypeEnum.java │ │ └── yshop-module-system-biz/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── co/ │ │ │ │ └── yixiang/ │ │ │ │ └── yshop/ │ │ │ │ └── module/ │ │ │ │ └── system/ │ │ │ │ ├── api/ │ │ │ │ │ ├── dept/ │ │ │ │ │ │ ├── DeptApiImpl.java │ │ │ │ │ │ └── PostApiImpl.java │ │ │ │ │ ├── dict/ │ │ │ │ │ │ └── DictDataApiImpl.java │ │ │ │ │ ├── logger/ │ │ │ │ │ │ ├── LoginLogApiImpl.java │ │ │ │ │ │ └── OperateLogApiImpl.java │ │ │ │ │ ├── mail/ │ │ │ │ │ │ └── MailSendApiImpl.java │ │ │ │ │ ├── notify/ │ │ │ │ │ │ └── NotifyMessageSendApiImpl.java │ │ │ │ │ ├── oauth2/ │ │ │ │ │ │ └── OAuth2TokenApiImpl.java │ │ │ │ │ ├── permission/ │ │ │ │ │ │ ├── PermissionApiImpl.java │ │ │ │ │ │ └── RoleApiImpl.java │ │ │ │ │ ├── sms/ │ │ │ │ │ │ ├── SmsCodeApiImpl.java │ │ │ │ │ │ └── SmsSendApiImpl.java │ │ │ │ │ ├── social/ │ │ │ │ │ │ ├── SocialClientApiImpl.java │ │ │ │ │ │ └── SocialUserApiImpl.java │ │ │ │ │ ├── tenant/ │ │ │ │ │ │ └── TenantApiImpl.java │ │ │ │ │ └── user/ │ │ │ │ │ └── AdminUserApiImpl.java │ │ │ │ ├── controller/ │ │ │ │ │ ├── admin/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── AuthController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── AuthLoginReqVO.java │ │ │ │ │ │ │ ├── AuthLoginRespVO.java │ │ │ │ │ │ │ ├── AuthMenuRespVO.java │ │ │ │ │ │ │ ├── AuthPermissionInfoRespVO.java │ │ │ │ │ │ │ ├── AuthSmsLoginReqVO.java │ │ │ │ │ │ │ ├── AuthSmsSendReqVO.java │ │ │ │ │ │ │ └── AuthSocialLoginReqVO.java │ │ │ │ │ │ ├── captcha/ │ │ │ │ │ │ │ └── CaptchaController.java │ │ │ │ │ │ ├── dept/ │ │ │ │ │ │ │ ├── DeptController.java │ │ │ │ │ │ │ ├── PostController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── dept/ │ │ │ │ │ │ │ │ ├── DeptListReqVO.java │ │ │ │ │ │ │ │ ├── DeptRespVO.java │ │ │ │ │ │ │ │ ├── DeptSaveReqVO.java │ │ │ │ │ │ │ │ └── DeptSimpleRespVO.java │ │ │ │ │ │ │ └── post/ │ │ │ │ │ │ │ ├── PostPageReqVO.java │ │ │ │ │ │ │ ├── PostRespVO.java │ │ │ │ │ │ │ ├── PostSaveReqVO.java │ │ │ │ │ │ │ └── PostSimpleRespVO.java │ │ │ │ │ │ ├── dict/ │ │ │ │ │ │ │ ├── DictDataController.java │ │ │ │ │ │ │ ├── DictTypeController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── data/ │ │ │ │ │ │ │ │ ├── DictDataPageReqVO.java │ │ │ │ │ │ │ │ ├── DictDataRespVO.java │ │ │ │ │ │ │ │ ├── DictDataSaveReqVO.java │ │ │ │ │ │ │ │ └── DictDataSimpleRespVO.java │ │ │ │ │ │ │ └── type/ │ │ │ │ │ │ │ ├── DictTypePageReqVO.java │ │ │ │ │ │ │ ├── DictTypeRespVO.java │ │ │ │ │ │ │ ├── DictTypeSaveReqVO.java │ │ │ │ │ │ │ └── DictTypeSimpleRespVO.java │ │ │ │ │ │ ├── ip/ │ │ │ │ │ │ │ ├── AreaController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ └── AreaNodeRespVO.java │ │ │ │ │ │ ├── logger/ │ │ │ │ │ │ │ ├── LoginLogController.java │ │ │ │ │ │ │ ├── OperateLogController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── loginlog/ │ │ │ │ │ │ │ │ ├── LoginLogPageReqVO.java │ │ │ │ │ │ │ │ └── LoginLogRespVO.java │ │ │ │ │ │ │ └── operatelog/ │ │ │ │ │ │ │ ├── OperateLogPageReqVO.java │ │ │ │ │ │ │ └── OperateLogRespVO.java │ │ │ │ │ │ ├── mail/ │ │ │ │ │ │ │ ├── MailAccountController.java │ │ │ │ │ │ │ ├── MailLogController.java │ │ │ │ │ │ │ ├── MailTemplateController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── account/ │ │ │ │ │ │ │ │ ├── MailAccountPageReqVO.java │ │ │ │ │ │ │ │ ├── MailAccountRespVO.java │ │ │ │ │ │ │ │ ├── MailAccountSaveReqVO.java │ │ │ │ │ │ │ │ └── MailAccountSimpleRespVO.java │ │ │ │ │ │ │ ├── log/ │ │ │ │ │ │ │ │ ├── MailLogPageReqVO.java │ │ │ │ │ │ │ │ └── MailLogRespVO.java │ │ │ │ │ │ │ └── template/ │ │ │ │ │ │ │ ├── MailTemplatePageReqVO.java │ │ │ │ │ │ │ ├── MailTemplateRespVO.java │ │ │ │ │ │ │ ├── MailTemplateSaveReqVO.java │ │ │ │ │ │ │ ├── MailTemplateSendReqVO.java │ │ │ │ │ │ │ └── MailTemplateSimpleRespVO.java │ │ │ │ │ │ ├── notice/ │ │ │ │ │ │ │ ├── NoticeController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── NoticePageReqVO.java │ │ │ │ │ │ │ ├── NoticeRespVO.java │ │ │ │ │ │ │ └── NoticeSaveReqVO.java │ │ │ │ │ │ ├── notify/ │ │ │ │ │ │ │ ├── NotifyMessageController.java │ │ │ │ │ │ │ ├── NotifyTemplateController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── message/ │ │ │ │ │ │ │ │ ├── NotifyMessageMyPageReqVO.java │ │ │ │ │ │ │ │ ├── NotifyMessagePageReqVO.java │ │ │ │ │ │ │ │ └── NotifyMessageRespVO.java │ │ │ │ │ │ │ └── template/ │ │ │ │ │ │ │ ├── NotifyTemplatePageReqVO.java │ │ │ │ │ │ │ ├── NotifyTemplateRespVO.java │ │ │ │ │ │ │ ├── NotifyTemplateSaveReqVO.java │ │ │ │ │ │ │ └── NotifyTemplateSendReqVO.java │ │ │ │ │ │ ├── oauth2/ │ │ │ │ │ │ │ ├── OAuth2ClientController.java │ │ │ │ │ │ │ ├── OAuth2OpenController.java │ │ │ │ │ │ │ ├── OAuth2TokenController.java │ │ │ │ │ │ │ ├── OAuth2UserController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── client/ │ │ │ │ │ │ │ │ ├── OAuth2ClientPageReqVO.java │ │ │ │ │ │ │ │ ├── OAuth2ClientRespVO.java │ │ │ │ │ │ │ │ └── OAuth2ClientSaveReqVO.java │ │ │ │ │ │ │ ├── open/ │ │ │ │ │ │ │ │ ├── OAuth2OpenAccessTokenRespVO.java │ │ │ │ │ │ │ │ ├── OAuth2OpenAuthorizeInfoRespVO.java │ │ │ │ │ │ │ │ └── OAuth2OpenCheckTokenRespVO.java │ │ │ │ │ │ │ ├── token/ │ │ │ │ │ │ │ │ ├── OAuth2AccessTokenPageReqVO.java │ │ │ │ │ │ │ │ └── OAuth2AccessTokenRespVO.java │ │ │ │ │ │ │ └── user/ │ │ │ │ │ │ │ ├── OAuth2UserInfoRespVO.java │ │ │ │ │ │ │ └── OAuth2UserUpdateReqVO.java │ │ │ │ │ │ ├── permission/ │ │ │ │ │ │ │ ├── MenuController.java │ │ │ │ │ │ │ ├── PermissionController.java │ │ │ │ │ │ │ ├── RoleController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── menu/ │ │ │ │ │ │ │ │ ├── MenuListReqVO.java │ │ │ │ │ │ │ │ ├── MenuRespVO.java │ │ │ │ │ │ │ │ ├── MenuSaveVO.java │ │ │ │ │ │ │ │ └── MenuSimpleRespVO.java │ │ │ │ │ │ │ ├── permission/ │ │ │ │ │ │ │ │ ├── PermissionAssignRoleDataScopeReqVO.java │ │ │ │ │ │ │ │ ├── PermissionAssignRoleMenuReqVO.java │ │ │ │ │ │ │ │ └── PermissionAssignUserRoleReqVO.java │ │ │ │ │ │ │ └── role/ │ │ │ │ │ │ │ ├── RolePageReqVO.java │ │ │ │ │ │ │ ├── RoleRespVO.java │ │ │ │ │ │ │ ├── RoleSaveReqVO.java │ │ │ │ │ │ │ └── RoleSimpleRespVO.java │ │ │ │ │ │ ├── sms/ │ │ │ │ │ │ │ ├── SmsCallbackController.java │ │ │ │ │ │ │ ├── SmsChannelController.java │ │ │ │ │ │ │ ├── SmsLogController.java │ │ │ │ │ │ │ ├── SmsTemplateController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── channel/ │ │ │ │ │ │ │ │ ├── SmsChannelPageReqVO.java │ │ │ │ │ │ │ │ ├── SmsChannelRespVO.java │ │ │ │ │ │ │ │ ├── SmsChannelSaveReqVO.java │ │ │ │ │ │ │ │ └── SmsChannelSimpleRespVO.java │ │ │ │ │ │ │ ├── log/ │ │ │ │ │ │ │ │ ├── SmsLogPageReqVO.java │ │ │ │ │ │ │ │ └── SmsLogRespVO.java │ │ │ │ │ │ │ └── template/ │ │ │ │ │ │ │ ├── SmsTemplatePageReqVO.java │ │ │ │ │ │ │ ├── SmsTemplateRespVO.java │ │ │ │ │ │ │ ├── SmsTemplateSaveReqVO.java │ │ │ │ │ │ │ └── SmsTemplateSendReqVO.java │ │ │ │ │ │ ├── socail/ │ │ │ │ │ │ │ ├── SocialClientController.java │ │ │ │ │ │ │ ├── SocialUserController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── client/ │ │ │ │ │ │ │ │ ├── SocialClientPageReqVO.java │ │ │ │ │ │ │ │ ├── SocialClientRespVO.java │ │ │ │ │ │ │ │ └── SocialClientSaveReqVO.java │ │ │ │ │ │ │ └── user/ │ │ │ │ │ │ │ ├── SocialUserBindReqVO.java │ │ │ │ │ │ │ ├── SocialUserPageReqVO.java │ │ │ │ │ │ │ ├── SocialUserRespVO.java │ │ │ │ │ │ │ └── SocialUserUnbindReqVO.java │ │ │ │ │ │ ├── tenant/ │ │ │ │ │ │ │ ├── TenantController.java │ │ │ │ │ │ │ ├── TenantPackageController.java │ │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ │ ├── packages/ │ │ │ │ │ │ │ │ ├── TenantPackagePageReqVO.java │ │ │ │ │ │ │ │ ├── TenantPackageRespVO.java │ │ │ │ │ │ │ │ ├── TenantPackageSaveReqVO.java │ │ │ │ │ │ │ │ └── TenantPackageSimpleRespVO.java │ │ │ │ │ │ │ └── tenant/ │ │ │ │ │ │ │ ├── TenantPageReqVO.java │ │ │ │ │ │ │ ├── TenantRespVO.java │ │ │ │ │ │ │ ├── TenantSaveReqVO.java │ │ │ │ │ │ │ └── TenantSimpleRespVO.java │ │ │ │ │ │ └── user/ │ │ │ │ │ │ ├── UserController.java │ │ │ │ │ │ ├── UserProfileController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── profile/ │ │ │ │ │ │ │ ├── UserProfileRespVO.java │ │ │ │ │ │ │ ├── UserProfileUpdatePasswordReqVO.java │ │ │ │ │ │ │ └── UserProfileUpdateReqVO.java │ │ │ │ │ │ └── user/ │ │ │ │ │ │ ├── UserImportExcelVO.java │ │ │ │ │ │ ├── UserImportRespVO.java │ │ │ │ │ │ ├── UserPageReqVO.java │ │ │ │ │ │ ├── UserRespVO.java │ │ │ │ │ │ ├── UserSaveReqVO.java │ │ │ │ │ │ ├── UserSimpleRespVO.java │ │ │ │ │ │ ├── UserUpdatePasswordReqVO.java │ │ │ │ │ │ └── UserUpdateStatusReqVO.java │ │ │ │ │ └── app/ │ │ │ │ │ ├── dict/ │ │ │ │ │ │ ├── AppDictDataController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ └── AppDictDataRespVO.java │ │ │ │ │ ├── ip/ │ │ │ │ │ │ ├── AppAreaController.java │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ └── AppAreaNodeRespVO.java │ │ │ │ │ └── notice/ │ │ │ │ │ └── AppNoticeController.java │ │ │ │ ├── convert/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ └── AuthConvert.java │ │ │ │ │ ├── oauth2/ │ │ │ │ │ │ └── OAuth2OpenConvert.java │ │ │ │ │ ├── social/ │ │ │ │ │ │ └── SocialUserConvert.java │ │ │ │ │ ├── tenant/ │ │ │ │ │ │ └── TenantConvert.java │ │ │ │ │ └── user/ │ │ │ │ │ └── UserConvert.java │ │ │ │ ├── dal/ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ ├── dept/ │ │ │ │ │ │ │ ├── DeptDO.java │ │ │ │ │ │ │ ├── PostDO.java │ │ │ │ │ │ │ └── UserPostDO.java │ │ │ │ │ │ ├── dict/ │ │ │ │ │ │ │ ├── DictDataDO.java │ │ │ │ │ │ │ └── DictTypeDO.java │ │ │ │ │ │ ├── logger/ │ │ │ │ │ │ │ ├── LoginLogDO.java │ │ │ │ │ │ │ └── OperateLogDO.java │ │ │ │ │ │ ├── mail/ │ │ │ │ │ │ │ ├── MailAccountDO.java │ │ │ │ │ │ │ ├── MailLogDO.java │ │ │ │ │ │ │ └── MailTemplateDO.java │ │ │ │ │ │ ├── notice/ │ │ │ │ │ │ │ └── NoticeDO.java │ │ │ │ │ │ ├── notify/ │ │ │ │ │ │ │ ├── NotifyMessageDO.java │ │ │ │ │ │ │ └── NotifyTemplateDO.java │ │ │ │ │ │ ├── oauth2/ │ │ │ │ │ │ │ ├── OAuth2AccessTokenDO.java │ │ │ │ │ │ │ ├── OAuth2ApproveDO.java │ │ │ │ │ │ │ ├── OAuth2ClientDO.java │ │ │ │ │ │ │ ├── OAuth2CodeDO.java │ │ │ │ │ │ │ └── OAuth2RefreshTokenDO.java │ │ │ │ │ │ ├── permission/ │ │ │ │ │ │ │ ├── MenuDO.java │ │ │ │ │ │ │ ├── RoleDO.java │ │ │ │ │ │ │ ├── RoleMenuDO.java │ │ │ │ │ │ │ └── UserRoleDO.java │ │ │ │ │ │ ├── sms/ │ │ │ │ │ │ │ ├── SmsChannelDO.java │ │ │ │ │ │ │ ├── SmsCodeDO.java │ │ │ │ │ │ │ ├── SmsLogDO.java │ │ │ │ │ │ │ └── SmsTemplateDO.java │ │ │ │ │ │ ├── social/ │ │ │ │ │ │ │ ├── SocialClientDO.java │ │ │ │ │ │ │ ├── SocialUserBindDO.java │ │ │ │ │ │ │ └── SocialUserDO.java │ │ │ │ │ │ ├── tenant/ │ │ │ │ │ │ │ ├── TenantDO.java │ │ │ │ │ │ │ └── TenantPackageDO.java │ │ │ │ │ │ └── user/ │ │ │ │ │ │ └── AdminUserDO.java │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ ├── dept/ │ │ │ │ │ │ │ ├── DeptMapper.java │ │ │ │ │ │ │ ├── PostMapper.java │ │ │ │ │ │ │ └── UserPostMapper.java │ │ │ │ │ │ ├── dict/ │ │ │ │ │ │ │ ├── DictDataMapper.java │ │ │ │ │ │ │ └── DictTypeMapper.java │ │ │ │ │ │ ├── logger/ │ │ │ │ │ │ │ ├── LoginLogMapper.java │ │ │ │ │ │ │ └── OperateLogMapper.java │ │ │ │ │ │ ├── mail/ │ │ │ │ │ │ │ ├── MailAccountMapper.java │ │ │ │ │ │ │ ├── MailLogMapper.java │ │ │ │ │ │ │ └── MailTemplateMapper.java │ │ │ │ │ │ ├── notice/ │ │ │ │ │ │ │ └── NoticeMapper.java │ │ │ │ │ │ ├── notify/ │ │ │ │ │ │ │ ├── NotifyMessageMapper.java │ │ │ │ │ │ │ └── NotifyTemplateMapper.java │ │ │ │ │ │ ├── oauth2/ │ │ │ │ │ │ │ ├── OAuth2AccessTokenMapper.java │ │ │ │ │ │ │ ├── OAuth2ApproveMapper.java │ │ │ │ │ │ │ ├── OAuth2ClientMapper.java │ │ │ │ │ │ │ ├── OAuth2CodeMapper.java │ │ │ │ │ │ │ └── OAuth2RefreshTokenMapper.java │ │ │ │ │ │ ├── permission/ │ │ │ │ │ │ │ ├── MenuMapper.java │ │ │ │ │ │ │ ├── RoleMapper.java │ │ │ │ │ │ │ ├── RoleMenuMapper.java │ │ │ │ │ │ │ └── UserRoleMapper.java │ │ │ │ │ │ ├── sms/ │ │ │ │ │ │ │ ├── SmsChannelMapper.java │ │ │ │ │ │ │ ├── SmsCodeMapper.java │ │ │ │ │ │ │ ├── SmsLogMapper.java │ │ │ │ │ │ │ └── SmsTemplateMapper.java │ │ │ │ │ │ ├── social/ │ │ │ │ │ │ │ ├── SocialClientMapper.java │ │ │ │ │ │ │ ├── SocialUserBindMapper.java │ │ │ │ │ │ │ └── SocialUserMapper.java │ │ │ │ │ │ ├── tenant/ │ │ │ │ │ │ │ ├── TenantMapper.java │ │ │ │ │ │ │ └── TenantPackageMapper.java │ │ │ │ │ │ └── user/ │ │ │ │ │ │ └── AdminUserMapper.java │ │ │ │ │ └── redis/ │ │ │ │ │ ├── RedisKeyConstants.java │ │ │ │ │ └── oauth2/ │ │ │ │ │ └── OAuth2AccessTokenRedisDAO.java │ │ │ │ ├── framework/ │ │ │ │ │ ├── captcha/ │ │ │ │ │ │ ├── config/ │ │ │ │ │ │ │ └── YshopCaptchaConfiguration.java │ │ │ │ │ │ └── core/ │ │ │ │ │ │ └── RedisCaptchaServiceImpl.java │ │ │ │
Showing preview only (899K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (8761 symbols across 1842 files)
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/constant/ShopConstants.java
type ShopConstants (line 13) | public interface ShopConstants {
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/constant/SystemConfigConstants.java
class SystemConfigConstants (line 3) | public class SystemConfigConstants {
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/core/IntArrayValuable.java
type IntArrayValuable (line 8) | public interface IntArrayValuable {
method array (line 13) | int[] array();
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/core/KeyValue.java
class KeyValue (line 14) | @Data
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/DateIntervalEnum.java
type DateIntervalEnum (line 15) | @Getter
method array (line 37) | @Override
method valueOf (line 42) | public static DateIntervalEnum valueOf(Integer interval) {
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/DocumentEnum.java
type DocumentEnum (line 11) | @Getter
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/OrderInfoEnum.java
type OrderInfoEnum (line 17) | @Getter
method toType (line 67) | public static OrderInfoEnum toType(int value) {
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/OrderTypeEnum.java
type OrderTypeEnum (line 11) | @Getter
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/PayIdEnum.java
type PayIdEnum (line 11) | @Getter
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/ShopCommonEnum.java
type ShopCommonEnum (line 10) | @Getter
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/TerminalEnum.java
type TerminalEnum (line 14) | @RequiredArgsConstructor
method array (line 36) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/WebFilterOrderEnum.java
type WebFilterOrderEnum (line 10) | public interface WebFilterOrderEnum {
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/exception/ErrorCode.java
class ErrorCode (line 15) | @Data
method ErrorCode (line 27) | public ErrorCode(Integer code, String message) {
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/exception/enums/GlobalErrorCodeConstants.java
type GlobalErrorCodeConstants (line 15) | public interface GlobalErrorCodeConstants {
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/exception/enums/ServiceErrorCodeRange.java
class ServiceErrorCodeRange (line 30) | public class ServiceErrorCodeRange {
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/params/QueryParam.java
class QueryParam (line 14) | @Data
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/pojo/CommonResult.java
class CommonResult (line 18) | @Data
method error (line 47) | public static <T> CommonResult<T> error(CommonResult<?> result) {
method error (line 51) | public static <T> CommonResult<T> error(Integer code, String message) {
method error (line 59) | public static <T> CommonResult<T> error(ErrorCode errorCode) {
method success (line 63) | public static <T> CommonResult<T> success(T data) {
method isSuccess (line 71) | public static boolean isSuccess(Integer code) {
method isSuccess (line 75) | @JsonIgnore // 避免 jackson 序列化
method isError (line 80) | @JsonIgnore // 避免 jackson 序列化
method checkError (line 90) | public void checkError() throws ServiceException {
method getCheckedData (line 102) | @JsonIgnore // 避免 jackson 序列化
method error (line 108) | public static <T> CommonResult<T> error(ServiceException serviceExcept...
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/pojo/PageParam.java
class PageParam (line 11) | @Schema(description="分页参数")
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/pojo/SortablePageParam.java
class SortablePageParam (line 10) | @Schema(description = "可排序的分页参数")
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/pojo/SortingField.java
class SortingField (line 14) | @Data
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/serializer/BigDecimalSerializer.java
class BigDecimalSerializer (line 18) | public class BigDecimalSerializer extends JsonSerializer<BigDecimal> {
method serialize (line 19) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/serializer/DoubleSerializer.java
class DoubleSerializer (line 17) | public class DoubleSerializer extends JsonSerializer<Double> {
method serialize (line 18) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/cache/CacheUtils.java
class CacheUtils (line 15) | public class CacheUtils {
method buildAsyncReloadingCache (line 30) | public static <K, V> LoadingCache<K, V> buildAsyncReloadingCache(Durat...
method buildCache (line 45) | public static <K, V> LoadingCache<K, V> buildCache(Duration duration, ...
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/collection/CollectionUtils.java
class CollectionUtils (line 20) | public class CollectionUtils {
method containsAny (line 22) | public static boolean containsAny(Object source, Object... targets) {
method isAnyEmpty (line 26) | public static boolean isAnyEmpty(Collection<?>... collections) {
method anyMatch (line 30) | public static <T> boolean anyMatch(Collection<T> from, Predicate<T> pr...
method filterList (line 34) | public static <T> List<T> filterList(Collection<T> from, Predicate<T> ...
method distinct (line 41) | public static <T, R> List<T> distinct(Collection<T> from, Function<T, ...
method distinct (line 48) | public static <T, R> List<T> distinct(Collection<T> from, Function<T, ...
method convertList (line 55) | public static <T, U> List<U> convertList(T[] from, Function<T, U> func) {
method convertList (line 62) | public static <T, U> List<U> convertList(Collection<T> from, Function<...
method convertList (line 69) | public static <T, U> List<U> convertList(Collection<T> from, Function<...
method convertListByFlatMap (line 76) | public static <T, U> List<U> convertListByFlatMap(Collection<T> from,
method convertListByFlatMap (line 84) | public static <T, U, R> List<R> convertListByFlatMap(Collection<T> from,
method mergeValuesFromMap (line 93) | public static <K, V> List<V> mergeValuesFromMap(Map<K, List<V>> map) {
method convertSet (line 100) | public static <T> Set<T> convertSet(Collection<T> from) {
method convertSet (line 104) | public static <T, U> Set<U> convertSet(Collection<T> from, Function<T,...
method convertSet (line 111) | public static <T, U> Set<U> convertSet(Collection<T> from, Function<T,...
method convertMapByFilter (line 118) | public static <T, K> Map<K, T> convertMapByFilter(Collection<T> from, ...
method convertSetByFlatMap (line 125) | public static <T, U> Set<U> convertSetByFlatMap(Collection<T> from,
method convertSetByFlatMap (line 133) | public static <T, U, R> Set<R> convertSetByFlatMap(Collection<T> from,
method convertMap (line 142) | public static <T, K> Map<K, T> convertMap(Collection<T> from, Function...
method convertMap (line 149) | public static <T, K> Map<K, T> convertMap(Collection<T> from, Function...
method convertMap (line 156) | public static <T, K, V> Map<K, V> convertMap(Collection<T> from, Funct...
method convertMap (line 163) | public static <T, K, V> Map<K, V> convertMap(Collection<T> from, Funct...
method convertMap (line 170) | public static <T, K, V> Map<K, V> convertMap(Collection<T> from, Funct...
method convertMap (line 177) | public static <T, K, V> Map<K, V> convertMap(Collection<T> from, Funct...
method convertMultiMap (line 184) | public static <T, K> Map<K, List<T>> convertMultiMap(Collection<T> fro...
method convertMultiMap (line 191) | public static <T, K, V> Map<K, List<V>> convertMultiMap(Collection<T> ...
method convertMultiMap2 (line 200) | public static <T, K, V> Map<K, Set<V>> convertMultiMap2(Collection<T> ...
method convertImmutableMap (line 207) | public static <T, K> Map<K, T> convertImmutableMap(Collection<T> from,...
method diffList (line 225) | public static <T> List<List<T>> diffList(Collection<T> oldList, Collec...
method containsAny (line 256) | public static boolean containsAny(Collection<?> source, Collection<?> ...
method getFirst (line 260) | public static <T> T getFirst(List<T> from) {
method findFirst (line 264) | public static <T> T findFirst(Collection<T> from, Predicate<T> predica...
method findFirst (line 268) | public static <T, U> U findFirst(Collection<T> from, Predicate<T> pred...
method getMaxValue (line 275) | public static <T, V extends Comparable<? super V>> V getMaxValue(Colle...
method getMinValue (line 284) | public static <T, V extends Comparable<? super V>> V getMinValue(List<...
method getSumValue (line 293) | public static <T, V extends Comparable<? super V>> V getSumValue(List<...
method getSumValue (line 298) | public static <T, V extends Comparable<? super V>> V getSumValue(Colle...
method addIfNotNull (line 307) | public static <T> void addIfNotNull(Collection<T> coll, T item) {
method singleton (line 314) | public static <T> Collection<T> singleton(T obj) {
method newArrayList (line 318) | public static <T> List<T> newArrayList(List<List<T>> list) {
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/collection/MapUtils.java
class MapUtils (line 21) | public class MapUtils {
method getList (line 30) | public static <K, V> List<V> getList(Multimap<K, V> multimap, Collecti...
method findAndThen (line 51) | public static <K, V> void findAndThen(Map<K, V> map, K key, Consumer<V...
method convertMap (line 62) | public static <K, V> Map<K, V> convertMap(List<KeyValue<K, V>> keyValu...
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/collection/SetUtils.java
class SetUtils (line 12) | public class SetUtils {
method asSet (line 14) | @SafeVarargs
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/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 mouth, int day) {
method buildTime (line 96) | public static Date buildTime(int year, int mouth, 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: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/date/LocalDateTimeUtils.java
class LocalDateTimeUtils (line 22) | public class LocalDateTimeUtils {
method parse (line 37) | public static LocalDateTime parse(String time) {
method addTime (line 45) | public static LocalDateTime addTime(Duration duration) {
method minusTime (line 49) | public static LocalDateTime minusTime(Duration duration) {
method beforeNow (line 53) | public static boolean beforeNow(LocalDateTime date) {
method afterNow (line 57) | public static boolean afterNow(LocalDateTime date) {
method buildTime (line 69) | public static LocalDateTime buildTime(int year, int mouth, int day) {
method buildBetweenTime (line 73) | public static LocalDateTime[] buildBetweenTime(int year1, int mouth1, ...
method isBetween (line 86) | public static boolean isBetween(LocalDateTime startTime, LocalDateTime...
method isBetween (line 100) | public static boolean isBetween(LocalDateTime startTime, LocalDateTime...
method isBetween (line 114) | public static boolean isBetween(String startTime, String endTime) {
method isOverlap (line 133) | public static boolean isOverlap(LocalTime startTime1, LocalTime endTim...
method beginOfMonth (line 146) | public static LocalDateTime beginOfMonth(LocalDateTime date) {
method endOfMonth (line 157) | public static LocalDateTime endOfMonth(LocalDateTime date) {
method getQuarterOfYear (line 167) | public static int getQuarterOfYear(LocalDateTime date) {
method between (line 177) | public static Long between(LocalDateTime dateTime) {
method getToday (line 186) | public static LocalDateTime getToday() {
method getYesterday (line 195) | public static LocalDateTime getYesterday() {
method getMonth (line 204) | public static LocalDateTime getMonth() {
method getYear (line 213) | public static LocalDateTime getYear() {
method getDateRangeList (line 217) | public static List<LocalDateTime[]> getDateRangeList(LocalDateTime sta...
method formatDateRange (line 286) | public static String formatDateRange(LocalDateTime startTime, LocalDat...
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/http/HttpUtils.java
class HttpUtils (line 22) | public class HttpUtils {
method replaceUrlQuery (line 24) | @SuppressWarnings("unchecked")
method append (line 36) | private String append(String base, Map<String, ?> query, boolean fragm...
method append (line 51) | public static String append(String base, Map<String, ?> query, Map<Str...
method obtainBasicAuthorization (line 102) | public static String[] obtainBasicAuthorization(HttpServletRequest req...
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/io/FileUtils.java
class FileUtils (line 19) | public class FileUtils {
method createTempFile (line 28) | @SneakyThrows
method createTempFile (line 43) | @SneakyThrows
method createTempFile (line 57) | @SneakyThrows
method generatePath (line 73) | public static String generatePath(byte[] content, String originalName) {
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/json/JsonUtils.java
class JsonUtils (line 26) | @Slf4j
method init (line 45) | public static void init(ObjectMapper objectMapper) {
method toJsonString (line 49) | @SneakyThrows
method toJsonByte (line 54) | @SneakyThrows
method toJsonPrettyString (line 59) | @SneakyThrows
method parseObject (line 64) | public static <T> T parseObject(String text, Class<T> clazz) {
method parseObject (line 76) | public static <T> T parseObject(String text, String path, Class<T> cla...
method parseObject (line 90) | public static <T> T parseObject(String text, Type type) {
method parseObject2 (line 111) | public static <T> T parseObject2(String text, Class<T> clazz) {
method parseObject (line 118) | public static <T> T parseObject(byte[] bytes, Class<T> clazz) {
method parseObject (line 130) | public static <T> T parseObject(String text, TypeReference<T> typeRefe...
method parseObjectQuietly (line 146) | public static <T> T parseObjectQuietly(String text, TypeReference<T> t...
method parseArray (line 154) | public static <T> List<T> parseArray(String text, Class<T> clazz) {
method parseArray (line 166) | public static <T> List<T> parseArray(String text, String path, Class<T...
method parseTree (line 180) | public static JsonNode parseTree(String text) {
method parseTree (line 189) | public static JsonNode parseTree(byte[] text) {
method isJson (line 198) | public static boolean isJson(String text) {
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/number/NumberUtils.java
class NumberUtils (line 13) | public class NumberUtils {
method parseLong (line 15) | public static Long parseLong(String str) {
method parseInt (line 19) | public static Integer parseInt(String str) {
method getDistance (line 34) | public static double getDistance(double lat1, double lng1, double lat2...
method mul (line 55) | public static BigDecimal mul(BigDecimal... values) {
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/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<...
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/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
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/servlet/ServletUtils.java
class ServletUtils (line 24) | public class ServletUtils {
method writeJSON (line 32) | @SuppressWarnings("deprecation") // 必须使用 APPLICATION_JSON_UTF8_VALUE,否...
method getUserAgent (line 42) | public static String getUserAgent(HttpServletRequest request) {
method getRequest (line 52) | public static HttpServletRequest getRequest() {
method getUserAgent (line 60) | public static String getUserAgent() {
method getClientIP (line 68) | public static String getClientIP() {
method isJsonRequest (line 76) | public static boolean isJsonRequest(ServletRequest request) {
method getBody (line 80) | public static String getBody(HttpServletRequest request) {
method getBodyBytes (line 88) | public static byte[] getBodyBytes(HttpServletRequest request) {
method getClientIP (line 96) | public static String getClientIP(HttpServletRequest request) {
method getParamMap (line 100) | public static Map<String, String> getParamMap(HttpServletRequest reque...
method getRequstHost (line 104) | public static String getRequstHost(HttpServletRequest request){
method writeAttachment (line 119) | public static void writeAttachment(HttpServletResponse response, Strin...
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/spring/SpringExpressionUtils.java
class SpringExpressionUtils (line 25) | public class SpringExpressionUtils {
method SpringExpressionUtils (line 36) | private SpringExpressionUtils() {
method parseExpression (line 46) | public static Object parseExpression(JoinPoint joinPoint, String expre...
method parseExpressions (line 58) | public static Map<String, Object> parseExpressions(JoinPoint joinPoint...
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/spring/SpringUtils.java
class SpringUtils (line 12) | public class SpringUtils extends SpringUtil {
method isProd (line 19) | public static boolean isProd() {
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/string/StrUtils.java
class StrUtils (line 17) | public class StrUtils {
method maxLength (line 19) | public static String maxLength(CharSequence str, int maxLength) {
method startWithAny (line 31) | public static boolean startWithAny(String str, Collection<String> pref...
method splitToLong (line 44) | public static List<Long> splitToLong(String value, CharSequence separa...
method splitToLongSet (line 49) | public static Set<Long> splitToLongSet(String value) {
method splitToLongSet (line 53) | public static Set<Long> splitToLongSet(String value, CharSequence sepa...
method splitToInteger (line 58) | public static List<Integer> splitToInteger(String value, CharSequence ...
method removeLineContains (line 70) | public static String removeLineContains(String content, String sequenc...
method compareTo (line 82) | public static List<String> compareTo(List<String> stringList) {
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/yshop/LocationUtils.java
class LocationUtils (line 10) | public class LocationUtils {
method rad (line 14) | private static double rad(double d) {
method getDistance (line 29) | public static double getDistance(double lat1, double lng1, double lat2,
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/validation/InEnumCollectionValidator.java
class InEnumCollectionValidator (line 14) | public class InEnumCollectionValidator implements ConstraintValidator<In...
method initialize (line 18) | @Override
method isValid (line 28) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/validation/InEnumValidator.java
class InEnumValidator (line 12) | public class InEnumValidator implements ConstraintValidator<InEnum, Inte...
method initialize (line 16) | @Override
method isValid (line 26) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-common/src/test/java/co/yixiang/yshop/framework/common/util/collection/CollectionUtilsTest.java
class CollectionUtilsTest (line 17) | public class CollectionUtilsTest {
class Dog (line 19) | @Data
method testDiffList (line 29) | @Test
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/config/YshopDataPermissionAutoConfiguration.java
class YshopDataPermissionAutoConfiguration (line 20) | @AutoConfiguration
method dataPermissionRuleFactory (line 23) | @Bean
method dataPermissionDatabaseInterceptor (line 28) | @Bean
method dataPermissionAnnotationAdvisor (line 39) | @Bean
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/config/YshopDeptDataPermissionAutoConfiguration.java
class YshopDeptDataPermissionAutoConfiguration (line 19) | @AutoConfiguration
method deptDataPermissionRule (line 24) | @Bean
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/core/db/DataPermissionDatabaseInterceptor.java
class DataPermissionDatabaseInterceptor (line 45) | @RequiredArgsConstructor
method beforeQuery (line 53) | @Override // SELECT 场景
method beforePrepare (line 75) | @Override // 只处理 UPDATE / DELETE 场景,不处理 INSERT 场景(因为 INSERT 不需要数据权限)
method processSelect (line 102) | @Override
method processUpdate (line 114) | @Override
method processDelete (line 123) | @Override
method processSelectBody (line 130) | protected void processSelectBody(SelectBody selectBody) {
method processPlainSelect (line 151) | protected void processPlainSelect(PlainSelect plainSelect) {
method processFromItem (line 179) | private List<Table> processFromItem(FromItem fromItem) {
method processWhereSubSelect (line 221) | protected void processWhereSubSelect(Expression where) {
method processSelectItem (line 258) | protected void processSelectItem(SelectItem selectItem) {
method processFunction (line 276) | protected void processFunction(Function function) {
method processOtherFromItem (line 292) | protected void processOtherFromItem(FromItem fromItem) {
method processSubJoin (line 322) | private List<Table> processSubJoin(SubJoin subJoin) {
method processJoins (line 339) | private List<Table> processJoins(List<Table> mainTables, List<Join> jo...
method builderExpression (line 444) | protected Expression builderExpression(Expression currentExpression, T...
method builderExpression (line 454) | protected Expression builderExpression(Expression currentExpression, L...
method buildDataPermissionExpression (line 494) | private Expression buildDataPermissionExpression(Table table) {
method addMappedStatementCache (line 526) | private void addMappedStatementCache(MappedStatement ms) {
class ContextHolder (line 539) | static final class ContextHolder {
method init (line 550) | public static void init(List<DataPermissionRule> rules) {
method clear (line 555) | public static void clear() {
method getRewrite (line 560) | public static boolean getRewrite() {
method setRewrite (line 564) | public static void setRewrite(boolean rewrite) {
method getRules (line 568) | public static List<DataPermissionRule> getRules() {
class MappedStatementCache (line 581) | static final class MappedStatementCache {
method noRewritable (line 599) | public boolean noRewritable(MappedStatement ms, List<DataPermissionR...
method addNoRewritable (line 620) | public void addNoRewritable(MappedStatement ms, List<DataPermissionR...
method clear (line 635) | public void clear() {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/core/rule/DataPermissionRuleFactoryImpl.java
class DataPermissionRuleFactoryImpl (line 19) | @RequiredArgsConstructor
method getDataPermissionRules (line 27) | @Override
method getDataPermissionRule (line 32) | @Override // mappedStatementId 参数,暂时没有用。以后,可以基于 mappedStatementId + Da...
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/core/rule/dept/DeptDataPermissionRule.java
class DeptDataPermissionRule (line 47) | @AllArgsConstructor
method getTableNames (line 84) | @Override
method getExpression (line 89) | @Override
method buildDeptExpression (line 147) | 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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/core/rule/dept/DeptDataPermissionRuleCustomizer.java
type DeptDataPermissionRuleCustomizer (line 8) | @FunctionalInterface
method customize (line 18) | void customize(DeptDataPermissionRule rule);
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/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 51) | @SneakyThrows
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/test/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/test/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/test/java/co/yixiang/yshop/framework/datapermission/core/db/DataPermissionDatabaseInterceptorTest.java
class DataPermissionDatabaseInterceptorTest (line 39) | public class DataPermissionDatabaseInterceptorTest extends BaseMockitoUn...
method setUp (line 47) | @BeforeEach
method testBeforeQuery_withoutRule (line 55) | @Test // 不存在规则,且不匹配
method testBeforeQuery_withMatchRule (line 69) | @Test // 存在规则,且不匹配
method testBeforeQuery_withoutMatchRule (line 96) | @Test // 存在规则,但不匹配
method testAddNoRewritable (line 123) | @Test
method testNoRewritable (line 140) | @Test
class DeptDataPermissionRule (line 158) | private static class DeptDataPermissionRule implements DataPermissionR...
method getTableNames (line 162) | @Override
method getExpression (line 167) | @Override
class EmptyDataPermissionRule (line 176) | private static class EmptyDataPermissionRule implements DataPermission...
method getTableNames (line 178) | @Override
method getExpression (line 183) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/test/java/co/yixiang/yshop/framework/datapermission/core/db/DataPermissionDatabaseInterceptorTest2.java
class DataPermissionDatabaseInterceptorTest2 (line 32) | public class DataPermissionDatabaseInterceptorTest2 extends BaseMockitoU...
method setUp (line 40) | @BeforeEach
method delete (line 84) | @Test
method update (line 90) | @Test
method selectSingle (line 96) | @Test
method selectSubSelectIn (line 113) | @Test
method selectSubSelectEq (line 135) | @Test
method selectSubSelectInnerNotEq (line 142) | @Test
method selectSubSelectExists (line 152) | @Test
method selectSubSelect (line 164) | @Test
method selectFromSelect (line 181) | @Test
method selectBodySubSelect (line 187) | @Test
method selectLeftJoin (line 193) | @Test
method selectRightJoin (line 219) | @Test
method selectMixJoin (line 250) | @Test
method selectJoinSubSelect (line 277) | @Test
method selectSubJoin (line 293) | @Test
method selectLeftJoinMultipleTrailingOn (line 344) | @Test
method selectInnerJoin (line 370) | @Test
method selectWithAs (line 433) | @Test
method selectIgnoreTable (line 440) | @Test
method assertSql (line 446) | private void assertSql(String sql, String targetSql) {
method testSelectSingle (line 453) | @Test
method testSelectLeftJoin (line 470) | @Test
method testSelectRightJoin (line 489) | @Test
method testSelectInnerJoin (line 508) | @Test
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/test/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/test/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/test/java/co/yixiang/yshop/framework/datapermission/core/util/DataPermissionUtilsTest.java
class DataPermissionUtilsTest (line 8) | public class DataPermissionUtilsTest {
method testExecuteIgnore (line 10) | @Test
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-ip/src/main/java/co/yixiang/yshop/framework/ip/core/Area.java
class Area (line 17) | @Data
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-ip/src/main/java/co/yixiang/yshop/framework/ip/core/enums/AreaTypeEnum.java
type AreaTypeEnum (line 14) | @AllArgsConstructor
method array (line 35) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-ip/src/main/java/co/yixiang/yshop/framework/ip/core/utils/AreaUtils.java
class AreaUtils (line 27) | @Slf4j
method AreaUtils (line 41) | private AreaUtils() {
method getArea (line 74) | public static Area getArea(Integer id) {
method parseArea (line 84) | public static Area parseArea(String pathStr) {
method getAreaNodePathList (line 103) | public static List<String> getAreaNodePathList(List<Area> areas) {
method getAreaNodePathList (line 116) | private static void getAreaNodePathList(Area node, String path, List<S...
method format (line 135) | public static String format(Integer id) {
method format (line 153) | public static String format(Integer id, String separator) {
method getByType (line 183) | public static <T> List<T> getByType(AreaTypeEnum type, Function<Area, ...
method getParentIdByType (line 194) | public static Integer getParentIdByType(Integer id, @NonNull AreaTypeE...
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-ip/src/main/java/co/yixiang/yshop/framework/ip/core/utils/IPUtils.java
class IPUtils (line 18) | @Slf4j
method IPUtils (line 35) | private IPUtils() {
method getAreaId (line 52) | @SneakyThrows
method getAreaId (line 63) | @SneakyThrows
method getArea (line 74) | public static Area getArea(String ip) {
method getArea (line 84) | public static Area getArea(long ip) {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-ip/src/test/java/co/yixiang/yshop/framework/ip/core/utils/AreaUtilsTest.java
class AreaUtilsTest (line 15) | public class AreaUtilsTest {
method testGetArea (line 17) | @Test
method testFormat (line 29) | @Test
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-ip/src/test/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/config/TenantProperties.java
class TenantProperties (line 14) | @ConfigurationProperties(prefix = "yshop.tenant")
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/config/YshopTenantAutoConfiguration.java
class YshopTenantAutoConfiguration (line 38) | @AutoConfiguration
method tenantFrameworkService (line 43) | @Bean
method tenantIgnoreAspect (line 50) | @Bean
method tenantLineInnerInterceptor (line 57) | @Bean
method tenantContextWebFilter (line 69) | @Bean
method tenantSecurityWebFilter (line 79) | @Bean
method tenantRedisMessageInterceptor (line 93) | @Bean
method tenantRabbitMQInitializer (line 98) | @Bean
method tenantRocketMQInitializer (line 104) | @Bean
method tenantJobAspect (line 112) | @Bean
method tenantRedisCacheManager (line 119) | @Bean
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/aop/TenantIgnoreAspect.java
class TenantIgnoreAspect (line 19) | @Aspect
method around (line 23) | @Around("@annotation(tenantIgnore)")
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/context/TenantContextHolder.java
class TenantContextHolder (line 11) | public class TenantContextHolder {
method getTenantId (line 28) | public static Long getTenantId() {
method getRequiredTenantId (line 37) | public static Long getRequiredTenantId() {
method setTenantId (line 46) | public static void setTenantId(Long tenantId) {
method setIgnore (line 50) | public static void setIgnore(Boolean ignore) {
method isIgnore (line 59) | public static boolean isIgnore() {
method clear (line 63) | public static void clear() {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/db/TenantBaseDO.java
class TenantBaseDO (line 12) | @Data
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/db/TenantDatabaseInterceptor.java
class TenantDatabaseInterceptor (line 18) | public class TenantDatabaseInterceptor implements TenantLineHandler {
method TenantDatabaseInterceptor (line 22) | public TenantDatabaseInterceptor(TenantProperties properties) {
method getTenantId (line 32) | @Override
method ignoreTable (line 37) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/job/TenantJobAspect.java
class TenantJobAspect (line 26) | @Aspect
method around (line 33) | @Around("@annotation(tenantJob)")
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/mq/kafka/TenantKafkaEnvironmentPostProcessor.java
class TenantKafkaEnvironmentPostProcessor (line 16) | @Slf4j
method postProcessEnvironment (line 21) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/mq/rabbitmq/TenantRabbitMQInitializer.java
class TenantRabbitMQInitializer (line 12) | public class TenantRabbitMQInitializer implements BeanPostProcessor {
method postProcessAfterInitialization (line 14) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/mq/rabbitmq/TenantRabbitMQMessagePostProcessor.java
class TenantRabbitMQMessagePostProcessor (line 20) | public class TenantRabbitMQMessagePostProcessor implements MessagePostPr...
method postProcessMessage (line 22) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/mq/rocketmq/TenantRocketMQInitializer.java
class TenantRocketMQInitializer (line 17) | public class TenantRocketMQInitializer implements BeanPostProcessor {
method postProcessAfterInitialization (line 19) | @Override
method initTenantProducer (line 31) | private void initTenantProducer(DefaultMQProducer producer) {
method initTenantConsumer (line 42) | private void initTenantConsumer(DefaultMQPushConsumer consumer) {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/redis/TenantRedisCacheManager.java
class TenantRedisCacheManager (line 18) | @Slf4j
method TenantRedisCacheManager (line 21) | public TenantRedisCacheManager(RedisCacheWriter cacheWriter,
method getCache (line 26) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/security/TenantSecurityWebFilter.java
class TenantSecurityWebFilter (line 33) | @Slf4j
method TenantSecurityWebFilter (line 43) | public TenantSecurityWebFilter(TenantProperties tenantProperties,
method doFilterInternal (line 54) | @Override
method isIgnoreUrl (line 103) | private boolean isIgnoreUrl(HttpServletRequest request) {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/service/TenantFrameworkServiceImpl.java
class TenantFrameworkServiceImpl (line 19) | @RequiredArgsConstructor
method load (line 33) | @Override
method load (line 47) | @Override
method getTenantIds (line 59) | @Override
method validTenant (line 65) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/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 49) | public static <V> V execute(Long tenantId, Callable<V> callable) {
method executeIgnore (line 70) | public static void executeIgnore(Runnable runnable) {
method addTenantHeader (line 87) | public static void addTenantHeader(Map<String, String> headers, Long t...
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/web/TenantContextWebFilter.java
class TenantContextWebFilter (line 19) | public class TenantContextWebFilter extends OncePerRequestFilter {
method doFilterInternal (line 21) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-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 62) | public InvocableHandlerMethod(HandlerMethod handlerMethod) {
method InvocableHandlerMethod (line 69) | public InvocableHandlerMethod(Object bean, Method method) {
method InvocableHandlerMethod (line 80) | public InvocableHandlerMethod(Object bean, String methodName, Class<?>...
method setMessageMethodArgumentResolvers (line 90) | public void setMessageMethodArgumentResolvers(HandlerMethodArgumentRes...
method setParameterNameDiscoverer (line 99) | public void setParameterNameDiscoverer(ParameterNameDiscoverer paramet...
method invoke (line 120) | @Nullable
method parseTenantId (line 136) | private Long parseTenantId(Message<?> message) {
method getMethodArgumentValues (line 162) | protected Object[] getMethodArgumentValues(Message<?> message, Object....
method doInvoke (line 200) | @Nullable
method getAsyncReturnValueType (line 229) | MethodParameter getAsyncReturnValueType(@Nullable Object returnValue) {
class AsyncResultMethodParameter (line 234) | private class AsyncResultMethodParameter extends AnnotatedMethodParame...
method AsyncResultMethodParameter (line 241) | public AsyncResultMethodParameter(@Nullable Object returnValue) {
method AsyncResultMethodParameter (line 247) | protected AsyncResultMethodParameter(AsyncResultMethodParameter orig...
method getParameterType (line 253) | @Override
method getGenericParameterType (line 264) | @Override
method clone (line 269) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/src/main/java/co/yixiang/yshop/framework/dict/config/YshopDictAutoConfiguration.java
class YshopDictAutoConfiguration (line 8) | @AutoConfiguration
method dictUtils (line 11) | @Bean
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/src/main/java/co/yixiang/yshop/framework/dict/core/DictFrameworkUtils.java
class DictFrameworkUtils (line 21) | @Slf4j
method load (line 36) | @Override
method load (line 50) | @Override
method load (line 64) | @Override
method init (line 71) | public static void init(DictDataApi dictDataApi) {
method getDictDataLabel (line 76) | @SneakyThrows
method getDictDataLabel (line 81) | @SneakyThrows
method getDictDataLabelList (line 86) | @SneakyThrows
method parseDictDataValue (line 91) | @SneakyThrows
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/src/main/java/co/yixiang/yshop/framework/excel/core/handler/SelectSheetWriteHandler.java
class SelectSheetWriteHandler (line 36) | @Slf4j
method SelectSheetWriteHandler (line 57) | public SelectSheetWriteHandler(Class<?> head) {
method getSelectDataList (line 84) | private void getSelectDataList(int colIndex, Field field) {
method afterSheetCreate (line 104) | @Override
method setColumnSelect (line 136) | private static void setColumnSelect(WriteSheetHolder writeSheetHolder,...
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/src/test/java/co/yixiang/yshop/framework/dict/core/util/DictFrameworkUtilsTest.java
class DictFrameworkUtilsTest (line 19) | public class DictFrameworkUtilsTest extends BaseMockitoUnitTest {
method setUp (line 24) | @BeforeEach
method testGetDictDataLabel (line 29) | @Test
method testParseDictDataValue (line 40) | @Test
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-job/src/main/java/co/yixiang/yshop/framework/quartz/config/YshopAsyncAutoConfiguration.java
class YshopAsyncAutoConfiguration (line 14) | @AutoConfiguration
method threadPoolTaskExecutorBeanPostProcessor (line 18) | @Bean
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-job/src/main/java/co/yixiang/yshop/framework/quartz/config/YshopQuartzAutoConfiguration.java
class YshopQuartzAutoConfiguration (line 15) | @AutoConfiguration
method schedulerManager (line 20) | @Bean
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-job/src/main/java/co/yixiang/yshop/framework/quartz/core/enums/JobDataKeyEnum.java
type JobDataKeyEnum (line 6) | public enum JobDataKeyEnum {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-job/src/main/java/co/yixiang/yshop/framework/quartz/core/handler/JobHandler.java
type JobHandler (line 8) | public interface JobHandler {
method execute (line 17) | String execute(String param) throws Exception;
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-job/src/main/java/co/yixiang/yshop/framework/quartz/core/handler/JobHandlerInvoker.java
class JobHandlerInvoker (line 26) | @DisallowConcurrentExecution
method executeInternal (line 37) | @Override
method executeInternal (line 68) | private String executeInternal(String jobHandlerName, String jobHandle...
method updateJobLogResultAsync (line 76) | private void updateJobLogResultAsync(Long jobLogId, LocalDateTime star...
method handleException (line 93) | private void handleException(Throwable exception,
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-job/src/main/java/co/yixiang/yshop/framework/quartz/core/scheduler/SchedulerManager.java
class SchedulerManager (line 21) | public class SchedulerManager {
method SchedulerManager (line 25) | public SchedulerManager(Scheduler scheduler) {
method addJob (line 40) | public void addJob(Long jobId, String jobHandlerName, String jobHandle...
method updateJob (line 65) | public void updateJob(String jobHandlerName, String jobHandlerParam, S...
method deleteJob (line 81) | public void deleteJob(String jobHandlerName) throws SchedulerException {
method pauseJob (line 96) | public void pauseJob(String jobHandlerName) throws SchedulerException {
method resumeJob (line 107) | public void resumeJob(String jobHandlerName) throws SchedulerException {
method triggerJob (line 121) | public void triggerJob(Long jobId, String jobHandlerName, String jobHa...
method buildTrigger (line 132) | private Trigger buildTrigger(String jobHandlerName, String jobHandlerP...
method validateScheduler (line 143) | private void validateScheduler() {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-job/src/main/java/co/yixiang/yshop/framework/quartz/core/service/JobLogFrameworkService.java
type JobLogFrameworkService (line 12) | public interface JobLogFrameworkService {
method createJobLog (line 24) | Long createJobLog(@NotNull(message = "任务编号不能为空") Long jobId,
method updateJobLogResultAsync (line 39) | void updateJobLogResultAsync(@NotNull(message = "日志编号不能为空") Long logId,
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-job/src/main/java/co/yixiang/yshop/framework/quartz/core/util/CronUtils.java
class CronUtils (line 17) | public class CronUtils {
method isValid (line 25) | public static boolean isValid(String cronExpression) {
method getNextTimes (line 36) | public static List<LocalDateTime> getNextTimes(String cronExpression, ...
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-monitor/src/main/java/co/yixiang/yshop/framework/tracer/config/TracerProperties.java
class TracerProperties (line 11) | @ConfigurationProperties("yshop.tracer")
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-monitor/src/main/java/co/yixiang/yshop/framework/tracer/config/YshopMetricsAutoConfiguration.java
class YshopMetricsAutoConfiguration (line 16) | @AutoConfiguration
method metricsCommonTags (line 21) | @Bean
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-monitor/src/main/java/co/yixiang/yshop/framework/tracer/config/YshopTracerAutoConfiguration.java
class YshopTracerAutoConfiguration (line 18) | @AutoConfiguration
method traceFilter (line 47) | @Bean
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-monitor/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-monitor/src/main/java/co/yixiang/yshop/framework/tracer/core/filter/TraceFilter.java
class TraceFilter (line 17) | public class TraceFilter extends OncePerRequestFilter {
method doFilterInternal (line 24) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-monitor/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/src/main/java/co/yixiang/yshop/framework/mq/rabbitmq/config/YshopRabbitMQAutoConfiguration.java
class YshopRabbitMQAutoConfiguration (line 15) | @AutoConfiguration
method createMessageConverter (line 23) | @Bean
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/src/main/java/co/yixiang/yshop/framework/mq/redis/config/YshopRedisMQConsumerAutoConfiguration.java
class YshopRedisMQConsumerAutoConfiguration (line 38) | @Slf4j
method redisMessageListenerContainer (line 46) | @Bean
method redisPendingMessageResendJob (line 67) | @Bean
method redisStreamMessageListenerContainer (line 81) | @Bean(initMethod = "start", destroyMethod = "stop")
method buildConsumerName (line 132) | private static String buildConsumerName() {
method checkRedisVersion (line 139) | private static void checkRedisVersion(RedisTemplate<String, ?> redisTe...
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/src/main/java/co/yixiang/yshop/framework/mq/redis/config/YshopRedisMQProducerAutoConfiguration.java
class YshopRedisMQProducerAutoConfiguration (line 18) | @Slf4j
method redisMQTemplate (line 22) | @Bean
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/src/main/java/co/yixiang/yshop/framework/mq/redis/core/job/RedisPendingMessageResendJob.java
class RedisPendingMessageResendJob (line 22) | @Slf4j
method messageResend (line 44) | @Scheduled(cron = "35 * * * * ?")
method execute (line 63) | private void execute() {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/src/main/java/co/yixiang/yshop/framework/mq/redis/core/stream/AbstractRedisStreamMessage.java
class AbstractRedisStreamMessage (line 11) | public abstract class AbstractRedisStreamMessage extends AbstractRedisMe...
method getStreamKey (line 18) | @JsonIgnore // 避免序列化
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/src/main/java/co/yixiang/yshop/framework/mq/redis/core/stream/AbstractRedisStreamMessageListener.java
class AbstractRedisStreamMessageListener (line 25) | public abstract class AbstractRedisStreamMessageListener<T extends Abstr...
method AbstractRedisStreamMessageListener (line 50) | @SneakyThrows
method onMessage (line 56) | @Override
method onMessage (line 81) | public abstract void onMessage(T message);
method getMessageClass (line 88) | @SuppressWarnings("unchecked")
method consumeMessageBefore (line 97) | private void consumeMessageBefore(AbstractRedisMessage message) {
method consumeMessageAfter (line 104) | private void consumeMessageAfter(AbstractRedisMessage message) {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/datasource/config/YshopDataSourceAutoConfiguration.java
class YshopDataSourceAutoConfiguration (line 17) | @AutoConfiguration
method druidAdRemoveFilterFilter (line 25) | @Bean
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/datasource/core/enums/DataSourceEnum.java
type DataSourceEnum (line 11) | public interface DataSourceEnum {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/datasource/core/filter/DruidAdRemoveFilter.java
class DruidAdRemoveFilter (line 17) | public class DruidAdRemoveFilter extends OncePerRequestFilter {
method doFilterInternal (line 24) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/config/IdTypeEnvironmentPostProcessor.java
class IdTypeEnvironmentPostProcessor (line 21) | @Slf4j
method postProcessEnvironment (line 33) | @Override
method getIdType (line 62) | public IdType getIdType(ConfigurableEnvironment environment) {
method setIdType (line 66) | public void setIdType(ConfigurableEnvironment environment, IdType idTy...
method setJobStoreDriverIfPresent (line 71) | public void setJobStoreDriverIfPresent(ConfigurableEnvironment environ...
method getDbType (line 96) | public static DbType getDbType(ConfigurableEnvironment environment) {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/config/YshopMybatisAutoConfiguration.java
class YshopMybatisAutoConfiguration (line 24) | @AutoConfiguration(before = MybatisPlusAutoConfiguration.class) // 目的:先于...
method mybatisPlusInterceptor (line 29) | @Bean
method defaultMetaObjectHandler (line 36) | @Bean
method keyGenerator (line 41) | @Bean
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/core/dataobject/BaseDO.java
class BaseDO (line 22) | @Data
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/core/enums/SqlConstants.java
class SqlConstants (line 10) | public class SqlConstants {
method init (line 17) | public static void init(DbType dbType) {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/core/handler/DefaultDBFieldHandler.java
class DefaultDBFieldHandler (line 18) | public class DefaultDBFieldHandler implements MetaObjectHandler {
method insertFill (line 20) | @Override
method updateFill (line 47) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/core/mapper/BaseMapperX.java
type BaseMapperX (line 33) | public interface BaseMapperX<T> extends MPJBaseMapper<T> {
method selectPage (line 35) | default PageResult<T> selectPage(SortablePageParam pageParam, @Param("...
method selectPage (line 39) | default PageResult<T> selectPage(PageParam pageParam, @Param("ew") Wra...
method selectPage (line 43) | default PageResult<T> selectPage(PageParam pageParam, Collection<Sorti...
method selectJoinPage (line 57) | default <D> PageResult<D> selectJoinPage(PageParam pageParam, Class<D>...
method selectJoinPage (line 71) | default <DTO> PageResult<DTO> selectJoinPage(PageParam pageParam, Clas...
method selectOne (line 78) | default T selectOne(String field, Object value) {
method selectOne (line 82) | default T selectOne(SFunction<T, ?> field, Object value) {
method selectOne (line 86) | default T selectOne(String field1, Object value1, String field2, Objec...
method selectOne (line 90) | default T selectOne(SFunction<T, ?> field1, Object value1, SFunction<T...
method selectOne (line 94) | default T selectOne(SFunction<T, ?> field1, Object value1, SFunction<T...
method selectCount (line 100) | default Long selectCount() {
method selectCount (line 104) | default Long selectCount(String field, Object value) {
method selectCount (line 108) | default Long selectCount(SFunction<T, ?> field, Object value) {
method selectList (line 112) | default List<T> selectList() {
method selectList (line 116) | default List<T> selectList(String field, Object value) {
method selectList (line 120) | default List<T> selectList(SFunction<T, ?> field, Object value) {
method selectList (line 124) | default List<T> selectList(String field, Collection<?> values) {
method selectList (line 131) | default List<T> selectList(SFunction<T, ?> field, Collection<?> values) {
method selectList (line 138) | @Deprecated
method selectList (line 143) | default List<T> selectList(SFunction<T, ?> field1, Object value1, SFun...
method insertBatch (line 152) | default Boolean insertBatch(Collection<T> entities) {
method insertBatch (line 167) | default Boolean insertBatch(Collection<T> entities, int size) {
method updateBatch (line 176) | default int updateBatch(T update) {
method updateBatch (line 180) | default Boolean updateBatch(Collection<T> entities) {
method updateBatch (line 184) | default Boolean updateBatch(Collection<T> entities, int size) {
method insertOrUpdate (line 188) | default Boolean insertOrUpdate(T entity) {
method insertOrUpdateBatch (line 192) | default Boolean insertOrUpdateBatch(Collection<T> collection) {
method delete (line 196) | default int delete(String field, String value) {
method delete (line 200) | default int delete(SFunction<T, ?> field, Object value) {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/core/query/MPJLambdaWrapperX.java
class MPJLambdaWrapperX (line 21) | public class MPJLambdaWrapperX<T> extends MPJLambdaWrapper<T> {
method likeIfPresent (line 23) | public MPJLambdaWrapperX<T> likeIfPresent(SFunction<T, ?> column, Stri...
method inIfPresent (line 31) | public MPJLambdaWrapperX<T> inIfPresent(SFunction<T, ?> column, Collec...
method inIfPresent (line 38) | public MPJLambdaWrapperX<T> inIfPresent(SFunction<T, ?> column, Object...
method eqIfPresent (line 45) | public MPJLambdaWrapperX<T> eqIfPresent(SFunction<T, ?> column, Object...
method neIfPresent (line 52) | public MPJLambdaWrapperX<T> neIfPresent(SFunction<T, ?> column, Object...
method gtIfPresent (line 59) | public MPJLambdaWrapperX<T> gtIfPresent(SFunction<T, ?> column, Object...
method geIfPresent (line 66) | public MPJLambdaWrapperX<T> geIfPresent(SFunction<T, ?> column, Object...
method ltIfPresent (line 73) | public MPJLambdaWrapperX<T> ltIfPresent(SFunction<T, ?> column, Object...
method leIfPresent (line 80) | public MPJLambdaWrapperX<T> leIfPresent(SFunction<T, ?> column, Object...
method betweenIfPresent (line 87) | public MPJLambdaWrapperX<T> betweenIfPresent(SFunction<T, ?> column, O...
method betweenIfPresent (line 100) | public MPJLambdaWrapperX<T> betweenIfPresent(SFunction<T, ?> column, O...
method eq (line 108) | @Override
method eq (line 114) | @Override
method orderByDesc (line 120) | @Override
method last (line 127) | @Override
method in (line 133) | @Override
method selectAll (line 139) | @Override
method selectAll (line 145) | @Override
method selectAs (line 151) | @Override
method selectAs (line 157) | @Override
method selectAs (line 163) | @Override
method selectAs (line 169) | @Override
method selectAsClass (line 175) | @Override
method selectSub (line 181) | @Override
method selectSub (line 187) | @Override
method selectCount (line 193) | @Override
method selectCount (line 199) | @Override
method selectCount (line 205) | @Override
method selectCount (line 211) | @Override
method selectCount (line 217) | @Override
method selectSum (line 223) | @Override
method selectSum (line 229) | @Override
method selectSum (line 235) | @Override
method selectMax (line 241) | @Override
method selectMax (line 247) | @Override
method selectMax (line 253) | @Override
method selectMin (line 259) | @Override
method selectMin (line 265) | @Override
method selectMin (line 271) | @Override
method selectAvg (line 277) | @Override
method selectAvg (line 283) | @Override
method selectAvg (line 289) | @Override
method selectLen (line 295) | @Override
method selectLen (line 301) | @Override
method selectLen (line 307) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/core/type/JsonLongSetTypeHandler.java
class JsonLongSetTypeHandler (line 17) | public class JsonLongSetTypeHandler extends AbstractJsonTypeHandler<Obje...
method parse (line 21) | @Override
method toJson (line 26) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/core/util/JdbcUtils.java
class JdbcUtils (line 13) | public class JdbcUtils {
method isConnectionOK (line 23) | public static boolean isConnectionOK(String url, String username, Stri...
method getDbType (line 37) | public static DbType getDbType(String url) {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/core/util/MyBatisUtils.java
class MyBatisUtils (line 23) | public class MyBatisUtils {
method buildPage (line 27) | public static <T> Page<T> buildPage(PageParam pageParam) {
method buildPage (line 31) | public static <T> Page<T> buildPage(PageParam pageParam, Collection<So...
method addInterceptor (line 51) | public static void addInterceptor(MybatisPlusInterceptor interceptor, ...
method getTableName (line 65) | public static String getTableName(Table table) {
method buildColumn (line 81) | public static Column buildColumn(String tableName, Alias tableAlias, S...
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/translate/config/YshopTranslateAutoConfiguration.java
class YshopTranslateAutoConfiguration (line 8) | @AutoConfiguration
method translateUtils (line 11) | @Bean
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-protection/src/main/java/co/yixiang/yshop/framework/idempotent/config/YshopIdempotentConfiguration.java
class YshopIdempotentConfiguration (line 16) | @AutoConfiguration(after = YshopRedisAutoConfiguration.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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-protection/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-protection/src/main/java/co/yixiang/yshop/framework/idempotent/core/keyresolver/IdempotentKeyResolver.java
type IdempotentKeyResolver (line 11) | public interface IdempotentKeyResolver {
method resolver (line 20) | String resolver(JoinPoint joinPoint, Idempotent idempotent);
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-protection/src/main/java/co/yixiang/yshop/framework/idempotent/core/keyresolver/impl/DefaultIdempotentKeyResolver.java
class DefaultIdempotentKeyResolver (line 16) | public class DefaultIdempotentKeyResolver implements IdempotentKeyResolv...
method resolver (line 18) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-protection/src/main/java/co/yixiang/yshop/framework/idempotent/core/keyresolver/impl/ExpressionIdempotentKeyResolver.java
class ExpressionIdempotentKeyResolver (line 22) | public class ExpressionIdempotentKeyResolver implements IdempotentKeyRes...
method resolver (line 28) | @Override
method getMethod (line 47) | private static Method getMethod(JoinPoint point) {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-protection/src/main/java/co/yixiang/yshop/framework/idempotent/core/keyresolver/impl/UserIdempotentKeyResolver.java
class UserIdempotentKeyResolver (line 17) | public class UserIdempotentKeyResolver implements IdempotentKeyResolver {
method resolver (line 19) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-protection/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-protection/src/main/java/co/yixiang/yshop/framework/lock4j/config/YshopLock4jConfiguration.java
class YshopLock4jConfiguration (line 9) | @AutoConfiguration(before = LockAutoConfiguration.class)
method lockFailureStrategy (line 13) | @Bean
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-protection/src/main/java/co/yixiang/yshop/framework/lock4j/core/DefaultLockFailureStrategy.java
class DefaultLockFailureStrategy (line 13) | @Slf4j
method onLockFailure (line 16) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-protection/src/main/java/co/yixiang/yshop/framework/lock4j/core/Lock4jRedisKeyConstants.java
type Lock4jRedisKeyConstants (line 8) | public interface Lock4jRedisKeyConstants {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-protection/src/main/java/co/yixiang/yshop/framework/ratelimiter/config/YshopRateLimiterConfiguration.java
class YshopRateLimiterConfiguration (line 14) | @AutoConfiguration(after = YshopRedisAutoConfiguration.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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-protection/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-protection/src/main/java/co/yixiang/yshop/framework/ratelimiter/core/keyresolver/RateLimiterKeyResolver.java
type RateLimiterKeyResolver (line 11) | public interface RateLimiterKeyResolver {
method resolver (line 20) | String resolver(JoinPoint joinPoint, RateLimiter rateLimiter);
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-protection/src/main/java/co/yixiang/yshop/framework/ratelimiter/core/keyresolver/impl/ClientIpRateLimiterKeyResolver.java
class ClientIpRateLimiterKeyResolver (line 17) | public class ClientIpRateLimiterKeyResolver implements RateLimiterKeyRes...
method resolver (line 19) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-protection/src/main/java/co/yixiang/yshop/framework/ratelimiter/core/keyresolver/impl/DefaultRateLimiterKeyResolver.java
class DefaultRateLimiterKeyResolver (line 16) | public class DefaultRateLimiterKeyResolver implements RateLimiterKeyReso...
method resolver (line 18) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-protection/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-protection/src/main/java/co/yixiang/yshop/framework/ratelimiter/core/keyresolver/impl/ServerNodeRateLimiterKeyResolver.java
class ServerNodeRateLimiterKeyResolver (line 17) | public class ServerNodeRateLimiterKeyResolver implements RateLimiterKeyR...
method resolver (line 19) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-protection/src/main/java/co/yixiang/yshop/framework/ratelimiter/core/keyresolver/impl/UserRateLimiterKeyResolver.java
class UserRateLimiterKeyResolver (line 17) | public class UserRateLimiterKeyResolver implements RateLimiterKeyResolver {
method resolver (line 19) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-protection/src/main/java/co/yixiang/yshop/framework/ratelimiter/core/redis/RateLimiterRedisDAO.java
class RateLimiterRedisDAO (line 14) | @AllArgsConstructor
method tryAcquire (line 28) | public Boolean tryAcquire(String key, int count, int time, TimeUnit ti...
method formatKey (line 35) | private static String formatKey(String key) {
method getRRateLimiter (line 39) | private RRateLimiter getRRateLimiter(String key, long count, int time,...
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-redis/src/main/java/co/yixiang/yshop/framework/redis/config/YshopCacheAutoConfiguration.java
class YshopCacheAutoConfiguration (line 27) | @AutoConfiguration
method redisCacheConfiguration (line 37) | @Bean
method redisCacheManager (line 70) | @Bean
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-redis/src/main/java/co/yixiang/yshop/framework/redis/config/YshopCacheProperties.java
class YshopCacheProperties (line 12) | @ConfigurationProperties("yshop.cache")
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-redis/src/main/java/co/yixiang/yshop/framework/redis/config/YshopRedisAutoConfiguration.java
class YshopRedisAutoConfiguration (line 16) | @AutoConfiguration(before = RedissonAutoConfigurationV2.class) // 目的:使用自...
method redisTemplate (line 22) | @Bean
method buildRedisSerializer (line 37) | public static RedisSerializer<?> buildRedisSerializer() {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-redis/src/main/java/co/yixiang/yshop/framework/redis/core/RedisKeyDefine.java
class RedisKeyDefine (line 15) | @Data
type KeyTypeEnum (line 18) | @Getter
type TimeoutTypeEnum (line 38) | @Getter
method RedisKeyDefine (line 81) | private RedisKeyDefine(String memo, String keyTemplate, KeyTypeEnum ke...
method RedisKeyDefine (line 93) | public RedisKeyDefine(String memo, String keyTemplate, KeyTypeEnum key...
method RedisKeyDefine (line 97) | public RedisKeyDefine(String memo, String keyTemplate, KeyTypeEnum key...
method formatKey (line 109) | public String formatKey(Object... args) {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-redis/src/main/java/co/yixiang/yshop/framework/redis/core/RedisKeyRegistry.java
class RedisKeyRegistry (line 9) | public class RedisKeyRegistry {
method add (line 16) | public static void add(RedisKeyDefine define) {
method list (line 20) | public static List<RedisKeyDefine> list() {
method size (line 24) | public static int size() {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-redis/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-redis/src/main/java/co/yixiang/yshop/framework/redis/util/redis/RedisUtil.java
class RedisUtil (line 15) | @SuppressWarnings("unchecked")
method expire (line 29) | public static boolean expire(String key,long time){
method getExpire (line 47) | public static long getExpire(String key){
method hasKey (line 56) | public static boolean hasKey(String key){
method del (line 69) | @SuppressWarnings("unchecked")
method get (line 86) | @SuppressWarnings("unchecked")
method set (line 97) | public static boolean set(String key,Object value) {
method set (line 115) | public static boolean set(String key,Object value,long time){
method incr (line 135) | public static long incr(String key, long delta){
method decr (line 148) | public static long decr(String key, long delta){
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-security/src/main/java/co/yixiang/yshop/framework/operatelog/config/YshopOperateLogConfiguration.java
class YshopOperateLogConfiguration (line 16) | @EnableLogRecord(tenant = "") // 貌似用不上 tenant 这玩意给个空好啦
method iLogRecordServiceImpl (line 21) | @Bean
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-security/src/main/java/co/yixiang/yshop/framework/operatelog/core/service/LogRecordServiceImpl.java
class LogRecordServiceImpl (line 24) | @Slf4j
method record (line 30) | @Override
method fillUserFields (line 46) | private static void fillUserFields(OperateLogCreateReqDTO reqDTO) {
method fillModuleFields (line 56) | public static void fillModuleFields(OperateLogCreateReqDTO reqDTO, Log...
method fillRequestFields (line 64) | private static void fillRequestFields(OperateLogCreateReqDTO reqDTO) {
method queryLog (line 77) | @Override
method queryLogByBizNo (line 82) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-security/src/main/java/co/yixiang/yshop/framework/security/config/AuthorizeRequestsCustomizer.java
class AuthorizeRequestsCustomizer (line 16) | public abstract class AuthorizeRequestsCustomizer
method buildAdminApi (line 22) | protected String buildAdminApi(String url) {
method buildAppApi (line 26) | protected String buildAppApi(String url) {
method getOrder (line 30) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-security/src/main/java/co/yixiang/yshop/framework/security/config/SecurityProperties.java
class SecurityProperties (line 12) | @ConfigurationProperties(prefix = "yshop.security")
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-security/src/main/java/co/yixiang/yshop/framework/security/config/YshopSecurityAutoConfiguration.java
class YshopSecurityAutoConfiguration (line 33) | @AutoConfiguration
method preAuthenticatedAspect (line 44) | @Bean
method authenticationEntryPoint (line 52) | @Bean
method accessDeniedHandler (line 60) | @Bean
method passwordEncoder (line 71) | @Bean
method authenticationTokenFilter (line 79) | @Bean
method securityFrameworkService (line 85) | @Bean("ss") // 使用 Spring Security 的缩写,方便使用
method securityContextHolderMethodInvokingFactoryBean (line 94) | @Bean
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-security/src/main/java/co/yixiang/yshop/framework/security/config/YshopWebSecurityConfigurerAdapter.java
class YshopWebSecurityConfigurerAdapter (line 45) | @AutoConfiguration
method authenticationManagerBean (line 86) | @Bean
method filterChain (line 108) | @Bean
method buildAppApi (line 154) | private String buildAppApi(String url) {
method getPermitAllUrlsFromAnnotations (line 158) | private Multimap<HttpMethod, String> getPermitAllUrlsFromAnnotations() {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-security/src/main/java/co/yixiang/yshop/framework/security/core/LoginUser.java
class LoginUser (line 17) | @Data
method setContext (line 57) | public void setContext(String key, Object value) {
method getContext (line 64) | public <T> T getContext(String key, Class<T> type) {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-security/src/main/java/co/yixiang/yshop/framework/security/core/aop/PreAuthenticatedAspect.java
class PreAuthenticatedAspect (line 13) | @Aspect
method around (line 17) | @Around("@annotation(preAuthenticated)")
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-security/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-security/src/main/java/co/yixiang/yshop/framework/security/core/filter/TokenAuthenticationFilter.java
class TokenAuthenticationFilter (line 31) | @RequiredArgsConstructor
method doFilterInternal (line 40) | @Override
method buildLoginUserByToken (line 71) | private LoginUser buildLoginUserByToken(String token, Integer userType) {
method mockLoginUser (line 105) | private LoginUser mockLoginUser(HttpServletRequest request, String tok...
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-security/src/main/java/co/yixiang/yshop/framework/security/core/handler/AccessDeniedHandlerImpl.java
class AccessDeniedHandlerImpl (line 27) | @Slf4j
method handle (line 31) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-security/src/main/java/co/yixiang/yshop/framework/security/core/handler/AuthenticationEntryPointImpl.java
class AuthenticationEntryPointImpl (line 24) | @Slf4j
method commence (line 28) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-security/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-security/src/main/java/co/yixiang/yshop/framework/security/core/service/SecurityFrameworkServiceImpl.java
class SecurityFrameworkServiceImpl (line 18) | @AllArgsConstructor
method hasPermission (line 23) | @Override
method hasAnyPermissions (line 28) | @Override
method hasRole (line 33) | @Override
method hasAnyRoles (line 38) | @Override
method hasScope (line 43) | @Override
method hasAnyScopes (line 48) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-security/src/main/java/co/yixiang/yshop/framework/security/core/util/SecurityFrameworkUtils.java
class SecurityFrameworkUtils (line 23) | public class SecurityFrameworkUtils {
method SecurityFrameworkUtils (line 30) | private SecurityFrameworkUtils() {}
method obtainAuthorization (line 40) | public static String obtainAuthorization(HttpServletRequest request,
method getAuthentication (line 60) | public static Authentication getAuthentication() {
method getLoginUser (line 73) | @Nullable
method getLoginUserId (line 87) | @Nullable
method getLoginUserNickname (line 98) | @Nullable
method getLoginUserDeptId (line 109) | @Nullable
method setLoginUser (line 121) | public static void setLoginUser(LoginUser loginUser, HttpServletReques...
method buildAuthentication (line 132) | private static Authentication buildAuthentication(LoginUser loginUser,...
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-test/src/main/java/co/yixiang/yshop/framework/test/config/RedisTestConfiguration.java
class RedisTestConfiguration (line 17) | @Configuration(proxyBeanMethods = false)
method redisServer (line 25) | @Bean
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-test/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-test/src/main/java/co/yixiang/yshop/framework/test/core/ut/BaseDbAndRedisUnitTest.java
class BaseDbAndRedisUnitTest (line 26) | @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, cla...
class Application (line 31) | @Import({
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-test/src/main/java/co/yixiang/yshop/framework/test/core/ut/BaseDbUnitTest.java
class BaseDbUnitTest (line 23) | @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, cla...
class Application (line 28) | @Import({
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-test/src/main/java/co/yixiang/yshop/framework/test/core/ut/BaseMockitoUnitTest.java
class BaseMockitoUnitTest (line 11) | @ExtendWith(MockitoExtension.class)
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-test/src/main/java/co/yixiang/yshop/framework/test/core/ut/BaseRedisUnitTest.java
class BaseRedisUnitTest (line 18) | @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, cla...
class Application (line 22) | @Import({
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-test/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-test/src/main/java/co/yixiang/yshop/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 randomURL (line 106) | public static String randomURL() {
method randomPojo (line 110) | @SafeVarargs
method randomPojo (line 120) | @SafeVarargs
method randomPojoList (line 130) | @SafeVarargs
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/apilog/config/YshopApiLogAutoConfiguration.java
class YshopApiLogAutoConfiguration (line 23) | @AutoConfiguration(after = YshopWebAutoConfiguration.class)
method apiAccessLogFrameworkService (line 26) | @Bean
method apiErrorLogFrameworkService (line 32) | @Bean
method apiAccessLogFilter (line 41) | @Bean
method createFilterBean (line 50) | private static <T extends Filter> FilterRegistrationBean<T> createFilt...
method addInterceptors (line 56) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/apilog/core/enums/OperateTypeEnum.java
type OperateTypeEnum (line 11) | @Getter
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/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 162) | private static OperateTypeEnum parseOperateLogType(HttpServletRequest ...
method sanitizeMap (line 183) | private static String sanitizeMap(Map<String, ?> map, String[] sanitiz...
method sanitizeJson (line 194) | private static String sanitizeJson(String jsonString, String[] sanitiz...
method sanitizeJson (line 209) | private static String sanitizeJson(CommonResult<?> commonResult, Strin...
method sanitizeJson (line 225) | private static void sanitizeJson(JsonNode node, String[] sanitizeKeys) {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/apilog/core/interceptor/ApiAccessLogInterceptor.java
class ApiAccessLogInterceptor (line 23) | @Slf4j
method preHandle (line 30) | @Override
method afterCompletion (line 56) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/apilog/core/service/ApiAccessLogFrameworkService.java
type ApiAccessLogFrameworkService (line 10) | public interface ApiAccessLogFrameworkService {
method createApiAccessLog (line 17) | void createApiAccessLog(ApiAccessLogCreateReqDTO reqDTO);
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/apilog/core/service/ApiAccessLogFrameworkServiceImpl.java
class ApiAccessLogFrameworkServiceImpl (line 15) | @RequiredArgsConstructor
method createApiAccessLog (line 20) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/apilog/core/service/ApiErrorLogFrameworkService.java
type ApiErrorLogFrameworkService (line 10) | public interface ApiErrorLogFrameworkService {
method createApiErrorLog (line 17) | void createApiErrorLog(ApiErrorLogCreateReqDTO reqDTO);
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/apilog/core/service/ApiErrorLogFrameworkServiceImpl.java
class ApiErrorLogFrameworkServiceImpl (line 15) | @RequiredArgsConstructor
method createApiErrorLog (line 20) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/banner/config/YshopBannerAutoConfiguration.java
class YshopBannerAutoConfiguration (line 12) | @AutoConfiguration
method bannerApplicationRunner (line 15) | @Bean
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/banner/core/BannerApplicationRunner.java
class BannerApplicationRunner (line 16) | @Slf4j
method run (line 19) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/desensitize/core/base/handler/DesensitizationHandler.java
type DesensitizationHandler (line 10) | public interface DesensitizationHandler<T extends Annotation> {
method desensitize (line 19) | String desensitize(String origin, T annotation);
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/desensitize/core/regex/handler/AbstractRegexDesensitizationHandler.java
class AbstractRegexDesensitizationHandler (line 12) | public abstract class AbstractRegexDesensitizationHandler<T extends Anno...
method desensitize (line 15) | @Override
method getRegex (line 28) | abstract String getRegex(T annotation);
method getReplacer (line 36) | abstract String getReplacer(T annotation);
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/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
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/desensitize/core/slider/handler/AbstractSliderDesensitizationHandler.java
class AbstractSliderDesensitizationHandler (line 12) | public abstract class AbstractSliderDesensitizationHandler<T extends Ann...
method desensitize (line 15) | @Override
method buildReplacerByLength (line 46) | 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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/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
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/desensitize/core/slider/handler/CarLicenseDesensitization.java
class CarLicenseDesensitization (line 10) | public class CarLicenseDesensitization extends AbstractSliderDesensitiza...
method getPrefixKeep (line 11) | @Override
method getSuffixKeep (line 16) | @Override
method getReplacer (line 21) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/desensitize/core/slider/handler/DefaultDesensitizationHandler.java
class DefaultDesensitizationHandler (line 10) | public class DefaultDesensitizationHandler extends AbstractSliderDesensi...
method getPrefixKeep (line 11) | @Override
method getSuffixKeep (line 16) | @Override
method getReplacer (line 21) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/desensitize/core/slider/handler/FixedPhoneDesensitization.java
class FixedPhoneDesensitization (line 10) | public class FixedPhoneDesensitization extends AbstractSliderDesensitiza...
method getPrefixKeep (line 11) | @Override
method getSuffixKeep (line 16) | @Override
method getReplacer (line 21) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/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: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/jackson/config/YshopJacksonAutoConfiguration.java
class YshopJacksonAutoConfiguration (line 23) | @AutoConfiguration
method jsonUtils (line 27) | @Bean
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/jackson/core/databind/NumberSerializer.java
class NumberSerializer (line 16) | @JacksonStdImpl
method NumberSerializer (line 24) | public NumberSerializer(Class<? extends Number> rawType) {
method serialize (line 28) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/jackson/core/databind/TimestampLocalDateTimeDeserializer.java
class TimestampLocalDateTimeDeserializer (line 17) | public class TimestampLocalDateTimeDeserializer extends JsonDeserializer...
method deserialize (line 21) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/jackson/core/databind/TimestampLocalDateTimeSerializer.java
class TimestampLocalDateTimeSerializer (line 16) | public class TimestampLocalDateTimeSerializer extends JsonSerializer<Loc...
method serialize (line 20) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/swagger/config/SwaggerProperties.java
class SwaggerProperties (line 13) | @ConfigurationProperties("yshop.swagger")
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/swagger/config/YshopSwaggerAutoConfiguration.java
class YshopSwaggerAutoConfiguration (line 45) | @AutoConfiguration
method createApi (line 53) | @Bean
method buildInfo (line 69) | private Info buildInfo(SwaggerProperties properties) {
method buildSecuritySchemes (line 81) | private Map<String, SecurityScheme> buildSecuritySchemes() {
method openApiBuilder (line 94) | @Bean
method allGroupedOpenApi (line 112) | @Bean
method buildGroupedOpenApi (line 117) | public static GroupedOpenApi buildGroupedOpenApi(String group) {
method buildGroupedOpenApi (line 121) | public static GroupedOpenApi buildGroupedOpenApi(String group, String ...
method buildTenantHeaderParameter (line 136) | private static Parameter buildTenantHeaderParameter() {
method buildSecurityHeaderParameter (line 151) | private static Parameter buildSecurityHeaderParameter() {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/web/config/WebProperties.java
class WebProperties (line 14) | @ConfigurationProperties(prefix = "yshop.web")
class Api (line 27) | @Data
class Ui (line 55) | @Data
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/web/config/YshopWebAutoConfiguration.java
class YshopWebAutoConfiguration (line 31) | @AutoConfiguration
method configurePathMatch (line 43) | @Override
method configurePathMatch (line 55) | private void configurePathMatch(PathMatchConfigurer configurer, WebPro...
method globalExceptionHandler (line 61) | @Bean
method globalResponseBodyHandler (line 66) | @Bean
method webFrameworkUtils (line 71) | @Bean
method corsFilterBean (line 83) | @Bean
method requestBodyCacheFilter (line 100) | @Bean
method demoFilter (line 108) | @Bean
method createFilterBean (line 114) | public static <T extends Filter> FilterRegistrationBean<T> createFilte...
method restTemplate (line 125) | @Bean
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/web/core/filter/ApiRequestFilter.java
class ApiRequestFilter (line 15) | @RequiredArgsConstructor
method shouldNotFilter (line 20) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/web/core/filter/CacheRequestBodyFilter.java
class CacheRequestBodyFilter (line 17) | public class CacheRequestBodyFilter extends OncePerRequestFilter {
method doFilterInternal (line 19) | @Override
method shouldNotFilter (line 25) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/web/core/filter/CacheRequestBodyWrapper.java
class CacheRequestBodyWrapper (line 19) | public class CacheRequestBodyWrapper extends HttpServletRequestWrapper {
method CacheRequestBodyWrapper (line 26) | public CacheRequestBodyWrapper(HttpServletRequest request) {
method getReader (line 31) | @Override
method getInputStream (line 36) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/web/core/filter/DemoFilter.java
class DemoFilter (line 20) | public class DemoFilter extends OncePerRequestFilter {
method shouldNotFilter (line 22) | @Override
method doFilterInternal (line 29) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/web/core/handler/GlobalExceptionHandler.java
class GlobalExceptionHandler (line 45) | @RestControllerAdvice
method allExceptionHandler (line 68) | public CommonResult<?> allExceptionHandler(HttpServletRequest request,...
method missingServletRequestParameterExceptionHandler (line 107) | @ExceptionHandler(value = MissingServletRequestParameterException.class)
method methodArgumentTypeMismatchExceptionHandler (line 118) | @ExceptionHandler(MethodArgumentTypeMismatchException.class)
method methodArgumentNotValidExceptionExceptionHandler (line 127) | @ExceptionHandler(MethodArgumentNotValidException.class)
method bindExceptionHandler (line 138) | @ExceptionHandler(BindException.class)
method constraintViolationExceptionHandler (line 149) | @ExceptionHandler(value = ConstraintViolationException.class)
method validationException (line 159) | @ExceptionHandler(value = ValidationException.class)
method noHandlerFoundExceptionHandler (line 173) | @ExceptionHandler(NoHandlerFoundException.class)
method httpRequestMethodNotSupportedExceptionHandler (line 184) | @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
method accessDeniedExceptionHandler (line 195) | @ExceptionHandler(value = AccessDeniedException.class)
method serviceExceptionHandler (line 207) | @ExceptionHandler(value = ServiceException.class)
method defaultExceptionHandler (line 219) | @ExceptionHandler(value = Exception.class)
method createExceptionLog (line 235) | private void createExceptionLog(HttpServletRequest req, Throwable e) {
method buildExceptionLog (line 248) | private void buildExceptionLog(ApiErrorLogCreateReqDTO errorLog, HttpS...
method handleTableNotExists (line 284) | private CommonResult<?> handleTableNotExists(Throwable ex) {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/web/core/handler/GlobalResponseBodyHandler.java
class GlobalResponseBodyHandler (line 23) | @ControllerAdvice
method supports (line 26) | @Override
method beforeBodyWrite (line 36) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/web/core/util/WebFrameworkUtils.java
class WebFrameworkUtils (line 22) | public class WebFrameworkUtils {
method WebFrameworkUtils (line 40) | public WebFrameworkUtils(WebProperties webProperties) {
method getTenantId (line 51) | public static Long getTenantId(HttpServletRequest request) {
method setLoginUserId (line 56) | public static void setLoginUserId(ServletRequest request, Long userId) {
method setLoginUserType (line 66) | public static void setLoginUserType(ServletRequest request, Integer us...
method getLoginUserId (line 77) | public static Long getLoginUserId(HttpServletRequest request) {
method getLoginUserType (line 91) | public static Integer getLoginUserType(HttpServletRequest request) {
method getLoginUserType (line 110) | public static Integer getLoginUserType() {
method getLoginUserId (line 115) | public static Long getLoginUserId() {
method getTerminal (line 120) | public static Integer getTerminal() {
method setCommonResult (line 129) | public static void setCommonResult(ServletRequest request, CommonResul...
method getCommonResult (line 133) | public static CommonResult<?> getCommonResult(ServletRequest request) {
method getRequest (line 137) | public static HttpServletRequest getRequest() {
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/xss/config/XssProperties.java
class XssProperties (line 15) | @ConfigurationProperties(prefix = "yshop.xss")
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/xss/config/YshopXssAutoConfiguration.java
class YshopXssAutoConfiguration (line 22) | @AutoConfiguration
method xssCleaner (line 32) | @Bean
method xssJacksonCustomizer (line 43) | @Bean
method xssFilter (line 57) | @Bean
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/xss/core/clean/JsoupXssCleaner.java
class JsoupXssCleaner (line 10) | public class JsoupXssCleaner implements XssCleaner {
method JsoupXssCleaner (line 22) | public JsoupXssCleaner() {
method buildSafelist (line 36) | private Safelist buildSafelist() {
method clean (line 58) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/xss/core/clean/XssCleaner.java
type XssCleaner (line 6) | public interface XssCleaner {
method clean (line 14) | String clean(String html);
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/xss/core/filter/XssFilter.java
class XssFilter (line 20) | @AllArgsConstructor
method doFilterInternal (line 34) | @Override
method shouldNotFilter (line 40) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/xss/core/filter/XssRequestWrapper.java
class XssRequestWrapper (line 15) | public class XssRequestWrapper extends HttpServletRequestWrapper {
method XssRequestWrapper (line 19) | public XssRequestWrapper(HttpServletRequest request, XssCleaner xssCle...
method getParameterMap (line 25) | @Override
method getParameterValues (line 39) | @Override
method getParameter (line 53) | @Override
method getAttribute (line 63) | @Override
method getHeader (line 73) | @Override
method getQueryString (line 83) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/main/java/co/yixiang/yshop/framework/xss/core/json/XssStringJsonDeserializer.java
class XssStringJsonDeserializer (line 23) | @Slf4j
method deserialize (line 38) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/test/java/co/yixiang/yshop/framework/desensitize/core/DesensitizeTest.java
class DesensitizeTest (line 19) | @ExtendWith(MockitoExtension.class)
method test (line 22) | @Test
class DesensitizeDemo (line 61) | @Data
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-web/src/test/java/co/yixiang/yshop/framework/desensitize/core/handler/AddressHandler.java
class AddressHandler (line 12) | public class AddressHandler implements DesensitizationHandler<Address> {
method desensitize (line 14) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/config/WebSocketProperties.java
class WebSocketProperties (line 15) | @ConfigurationProperties("yshop.websocket")
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/config/YshopWebSocketAutoConfiguration.java
class YshopWebSocketAutoConfiguration (line 42) | @AutoConfiguration(before = YshopRedisMQConsumerAutoConfiguration.class)...
method webSocketConfigurer (line 48) | @Bean
method handshakeInterceptor (line 60) | @Bean
method webSocketHandler (line 65) | @Bean
method webSocketSessionManager (line 74) | @Bean
class LocalWebSocketMessageSenderConfiguration (line 81) | @Configuration
method localWebSocketMessageSender (line 85) | @Bean
class RedisWebSocketMessageSenderConfiguration (line 92) | @Configuration
method redisWebSocketMessageSender (line 96) | @Bean
method redisWebSocketMessageConsumer (line 102) | @Bean
class RocketMQWebSocketMessageSenderConfiguration (line 110) | @Configuration
method rocketMQWebSocketMessageSender (line 114) | @Bean
method rocketMQWebSocketMessageConsumer (line 121) | @Bean
class RabbitMQWebSocketMessageSenderConfiguration (line 129) | @Configuration
method rabbitMQWebSocketMessageSender (line 133) | @Bean
method rabbitMQWebSocketMessageConsumer (line 140) | @Bean
method websocketTopicExchange (line 149) | @Bean
class KafkaWebSocketMessageSenderConfiguration (line 158) | @Configuration
method kafkaWebSocketMessageSender (line 162) | @Bean
method kafkaWebSocketMessageConsumer (line 169) | @Bean
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/handler/JsonWebSocketMessageHandler.java
class JsonWebSocketMessageHandler (line 30) | @Slf4j
method JsonWebSocketMessageHandler (line 38) | @SuppressWarnings({"rawtypes", "unchecked"})
method handleTextMessage (line 44) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/listener/WebSocketMessageListener.java
type WebSocketMessageListener (line 13) | public interface WebSocketMessageListener<T> {
method onMessage (line 21) | void onMessage(WebSocketSession session, T message);
method getType (line 29) | String getType();
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/message/JsonWebSocketMessage.java
class JsonWebSocketMessage (line 13) | @Data
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/security/LoginUserHandshakeInterceptor.java
class LoginUserHandshakeInterceptor (line 24) | public class LoginUserHandshakeInterceptor implements HandshakeIntercept...
method beforeHandshake (line 26) | @Override
method afterHandshake (line 36) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/security/WebSocketAuthorizeRequestsCustomizer.java
class WebSocketAuthorizeRequestsCustomizer (line 14) | @RequiredArgsConstructor
method customize (line 19) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/sender/AbstractWebSocketMessageSender.java
class AbstractWebSocketMessageSender (line 23) | @Slf4j
method send (line 29) | @Override
method send (line 34) | @Override
method send (line 39) | @Override
method send (line 53) | public void send(String sessionId, Integer userType, Long userId, Stri...
method doSend (line 81) | public void doSend(Collection<WebSocketSession> sessions, String messa...
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/sender/WebSocketMessageSender.java
type WebSocketMessageSender (line 10) | public interface WebSocketMessageSender {
method send (line 20) | void send(Integer userType, Long userId, String messageType, String me...
method send (line 29) | void send(Integer userType, String messageType, String messageContent);
method send (line 38) | void send(String sessionId, String messageType, String messageContent);
method sendObject (line 40) | default void sendObject(Integer userType, Long userId, String messageT...
method sendObject (line 44) | default void sendObject(Integer userType, String messageType, Object m...
method sendObject (line 48) | default void sendObject(String sessionId, String messageType, Object m...
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/sender/kafka/KafkaWebSocketMessage.java
class KafkaWebSocketMessage (line 10) | @Data
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/sender/kafka/KafkaWebSocketMessageConsumer.java
class KafkaWebSocketMessageConsumer (line 12) | @RequiredArgsConstructor
method onMessage (line 17) | @RabbitHandler
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/sender/kafka/KafkaWebSocketMessageSender.java
class KafkaWebSocketMessageSender (line 16) | @Slf4j
method KafkaWebSocketMessageSender (line 23) | public KafkaWebSocketMessageSender(WebSocketSessionManager sessionMana...
method send (line 31) | @Override
method send (line 36) | @Override
method send (line 41) | @Override
method sendKafkaMessage (line 55) | private void sendKafkaMessage(String sessionId, Long userId, Integer u...
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/sender/local/LocalWebSocketMessageSender.java
class LocalWebSocketMessageSender (line 14) | public class LocalWebSocketMessageSender extends AbstractWebSocketMessag...
method LocalWebSocketMessageSender (line 16) | public LocalWebSocketMessageSender(WebSocketSessionManager sessionMana...
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/sender/rabbitmq/RabbitMQWebSocketMessage.java
class RabbitMQWebSocketMessage (line 12) | @Data
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/sender/rabbitmq/RabbitMQWebSocketMessageConsumer.java
class RabbitMQWebSocketMessageConsumer (line 12) | @RabbitListener(
method onMessage (line 32) | @RabbitHandler
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/sender/rabbitmq/RabbitMQWebSocketMessageSender.java
class RabbitMQWebSocketMessageSender (line 15) | @Slf4j
method RabbitMQWebSocketMessageSender (line 22) | public RabbitMQWebSocketMessageSender(WebSocketSessionManager sessionM...
method send (line 30) | @Override
method send (line 35) | @Override
method send (line 40) | @Override
method sendRabbitMQMessage (line 54) | private void sendRabbitMQMessage(String sessionId, Long userId, Intege...
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/sender/redis/RedisWebSocketMessage.java
class RedisWebSocketMessage (line 9) | @Data
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/sender/redis/RedisWebSocketMessageConsumer.java
class RedisWebSocketMessageConsumer (line 11) | @RequiredArgsConstructor
method onMessage (line 16) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/sender/redis/RedisWebSocketMessageSender.java
class RedisWebSocketMessageSender (line 14) | @Slf4j
method RedisWebSocketMessageSender (line 19) | public RedisWebSocketMessageSender(WebSocketSessionManager sessionMana...
method send (line 25) | @Override
method send (line 30) | @Override
method send (line 35) | @Override
method sendRedisMessage (line 49) | private void sendRedisMessage(String sessionId, Long userId, Integer u...
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/sender/rocketmq/RocketMQWebSocketMessage.java
class RocketMQWebSocketMessage (line 10) | @Data
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/sender/rocketmq/RocketMQWebSocketMessageConsumer.java
class RocketMQWebSocketMessageConsumer (line 13) | @RocketMQMessageListener( // 重点:添加 @RocketMQMessageListener 注解,声明消费的 topic
method onMessage (line 23) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/sender/rocketmq/RocketMQWebSocketMessageSender.java
class RocketMQWebSocketMessageSender (line 14) | @Slf4j
method RocketMQWebSocketMessageSender (line 21) | public RocketMQWebSocketMessageSender(WebSocketSessionManager sessionM...
method send (line 29) | @Override
method send (line 34) | @Override
method send (line 39) | @Override
method sendRocketMQMessage (line 53) | private void sendRocketMQMessage(String sessionId, Long userId, Intege...
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/session/WebSocketSessionHandlerDecorator.java
class WebSocketSessionHandlerDecorator (line 17) | public class WebSocketSessionHandlerDecorator extends WebSocketHandlerDe...
method WebSocketSessionHandlerDecorator (line 30) | public WebSocketSessionHandlerDecorator(WebSocketHandler delegate,
method afterConnectionEstablished (line 36) | @Override
method afterConnectionClosed (line 44) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/session/WebSocketSessionManager.java
type WebSocketSessionManager (line 12) | public interface WebSocketSessionManager {
method addSession (line 19) | void addSession(WebSocketSession session);
method removeSession (line 26) | void removeSession(WebSocketSession session);
method getSession (line 34) | WebSocketSession getSession(String id);
method getSessionList (line 42) | Collection<WebSocketSession> getSessionList(Integer userType);
method getSessionList (line 51) | Collection<WebSocketSession> getSessionList(Integer userType, Long use...
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/session/WebSocketSessionManagerImpl.java
class WebSocketSessionManagerImpl (line 22) | public class WebSocketSessionManagerImpl implements WebSocketSessionMana...
method addSession (line 40) | @Override
method removeSession (line 66) | @Override
method getSession (line 86) | @Override
method getSessionList (line 91) | @Override
method getSessionList (line 115) | @Override
FILE: yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-websocket/src/main/java/co/yixiang/yshop/framework/websocket/core/util/WebSocketFrameworkUtils.java
class WebSocketFrameworkUtils (line 13) | public class WebSocketFrameworkUtils {
method setLoginUser (line 23) | public static void setLoginUser(LoginUser loginUser, Map<String, Objec...
method getLoginUser (line 32) | public static LoginUser getLoginUser(WebSocketSession session) {
method getLoginUserId (line 41) | public static Long getLoginUserId(WebSocketSession session) {
method getLoginUserType (line 51) | public static Integer getLoginUserType(WebSocketSession session) {
method getTenantId (line 62) | public static Long getTenantId(WebSocketSession session) {
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/enums/ErrorCodeConstants.java
type ErrorCodeConstants (line 5) | public interface ErrorCodeConstants {
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/enums/KdniaoLogisticsCodeEnum.java
type KdniaoLogisticsCodeEnum (line 19) | @Getter
method getEnumByName (line 63) | @SneakyThrows(Exception.class)
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/enums/KdniaoLogisticsStatusEnum.java
type KdniaoLogisticsStatusEnum (line 18) | @Getter
method getEnum (line 125) | public static KdniaoLogisticsStatusEnum getEnum(Integer status) {
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/dto/KdniaoApiBaseDTO.java
class KdniaoApiBaseDTO (line 17) | @Data
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/dto/KdniaoApiDTO.java
class KdniaoApiDTO (line 17) | @Data
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/dto/KdniaoElectronicsOrderDTO.java
class KdniaoElectronicsOrderDTO (line 10) | @Data
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/dto/KdniaoElectronicsOrderGoodsDTO.java
class KdniaoElectronicsOrderGoodsDTO (line 11) | @Data
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/vo/KdniaoApiVO.java
class KdniaoApiVO (line 22) | @Data
class TraceItem (line 87) | @Data
method handleData (line 113) | public void handleData() {
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/vo/KdniaoLogisticsVO.java
class KdniaoLogisticsVO (line 20) | @Data
class TraceItem (line 66) | @Data
method handleData (line 88) | public void handleData() {
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/model/vo/KdniaoOrderVO.java
class KdniaoOrderVO (line 17) | @Data
class OrderInfo (line 54) | @Data
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-api/src/main/java/co/yixiang/yshop/module/express/kdniao/util/KdniaoUtil.java
class KdniaoUtil (line 32) | @Slf4j
method getLogisticInfo (line 45) | public static KdniaoApiVO getLogisticInfo(KdniaoApiDTO queryDTO){
method getOrderInfo (line 61) | public static KdniaoOrderVO getOrderInfo(KdniaoElectronicsOrderDTO que...
method getLogisticBase (line 79) | @SneakyThrows(Exception.class)
method getEleCtBase (line 114) | @SneakyThrows(Exception.class)
method doMap (line 138) | private Map<String, Object> doMap(KdniaoElectronicsOrderDTO queryDTO,
method MD5 (line 221) | @SuppressWarnings("unused")
method base64 (line 244) | private String base64(String str, String charset) throws UnsupportedEn...
method urlEncoder (line 249) | @SuppressWarnings("unused")
method encrypt (line 264) | @SuppressWarnings("unused")
method sendPost (line 279) | @SuppressWarnings("unused")
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-biz/src/main/java/co/yixiang/yshop/module/express/controller/admin/express/ExpressController.java
class ExpressController (line 32) | @Tag(name = "管理后台 - 快递公司")
method createExpress (line 43) | @PostMapping("/create")
method updateExpress (line 50) | @PutMapping("/update")
method deleteExpress (line 58) | @DeleteMapping("/delete")
method getExpress (line 67) | @GetMapping("/get")
method getExpressList (line 76) | @GetMapping("/list")
method getExpressPage (line 84) | @GetMapping("/page")
method exportExpressExcel (line 92) | @GetMapping("/export-excel")
method getExpressSet (line 103) | @GetMapping("/set")
method postExpressSet (line 109) | @PostMapping("/set")
method getLogistic (line 116) | @GetMapping("/getLogistic")
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-biz/src/main/java/co/yixiang/yshop/module/express/controller/admin/express/vo/ExpressBaseVO.java
class ExpressBaseVO (line 12) | @Data
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-biz/src/main/java/co/yixiang/yshop/module/express/controller/admin/express/vo/ExpressCreateReqVO.java
class ExpressCreateReqVO (line 8) | @Schema(description = "管理后台 - 快递公司创建 Request VO")
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-biz/src/main/java/co/yixiang/yshop/module/express/controller/admin/express/vo/ExpressExcelVO.java
class ExpressExcelVO (line 13) | @Data
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-biz/src/main/java/co/yixiang/yshop/module/express/controller/admin/express/vo/ExpressExportReqVO.java
class ExpressExportReqVO (line 6) | @Schema(description = "管理后台 - 快递公司 Excel 导出 Request VO,参数和 ExpressPageRe...
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-biz/src/main/java/co/yixiang/yshop/module/express/controller/admin/express/vo/ExpressPageReqVO.java
class ExpressPageReqVO (line 9) | @Schema(description = "管理后台 - 快递公司分页 Request VO")
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-biz/src/main/java/co/yixiang/yshop/module/express/controller/admin/express/vo/ExpressRespVO.java
class ExpressRespVO (line 10) | @Schema(description = "管理后台 - 快递公司 Response VO")
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-biz/src/main/java/co/yixiang/yshop/module/express/controller/admin/express/vo/ExpressUpdateReqVO.java
class ExpressUpdateReqVO (line 10) | @Schema(description = "管理后台 - 快递公司更新 Request VO")
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-biz/src/main/java/co/yixiang/yshop/module/express/controller/app/express/AppExpressController.java
class AppExpressController (line 23) | @Tag(name = "app - 查询快递")
method getLogistic (line 34) | @GetMapping("/getLogistic")
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-biz/src/main/java/co/yixiang/yshop/module/express/convert/express/ExpressConvert.java
type ExpressConvert (line 19) | @Mapper
method convert (line 24) | ExpressDO convert(ExpressCreateReqVO bean);
method convert (line 26) | ExpressDO convert(ExpressUpdateReqVO bean);
method convert (line 28) | ExpressRespVO convert(ExpressDO bean);
method convertList (line 30) | List<ExpressRespVO> convertList(List<ExpressDO> list);
method convertPage (line 32) | PageResult<ExpressRespVO> convertPage(PageResult<ExpressDO> page);
method convertList02 (line 34) | List<ExpressExcelVO> convertList02(List<ExpressDO> list);
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-biz/src/main/java/co/yixiang/yshop/module/express/dal/dataobject/express/ExpressDO.java
class ExpressDO (line 14) | @TableName("yshop_express")
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-biz/src/main/java/co/yixiang/yshop/module/express/dal/mysql/express/ExpressMapper.java
type ExpressMapper (line 18) | @Mapper
method selectPage (line 21) | default PageResult<ExpressDO> selectPage(ExpressPageReqVO reqVO) {
method selectList (line 28) | default List<ExpressDO> selectList(ExpressExportReqVO reqVO) {
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-biz/src/main/java/co/yixiang/yshop/module/express/dal/redis/RedisKeyConstants.java
type RedisKeyConstants (line 13) | public interface RedisKeyConstants {
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-biz/src/main/java/co/yixiang/yshop/module/express/dal/redis/express/ExpressRedisDAO.java
class ExpressRedisDAO (line 19) | @Repository
method get (line 26) | public KdniaoApiBaseDTO get() {
method set (line 31) | public void set(KdniaoApiBaseDTO apiBaseDTO) {
method delete (line 36) | public void delete() {
method formatKey (line 43) | private static String formatKey() {
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-biz/src/main/java/co/yixiang/yshop/module/express/service/express/ExpressService.java
type ExpressService (line 19) | public interface ExpressService {
method createExpress (line 27) | Integer createExpress(@Valid ExpressCreateReqVO createReqVO);
method updateExpress (line 34) | void updateExpress(@Valid ExpressUpdateReqVO updateReqVO);
method deleteExpress (line 41) | void deleteExpress(Integer id);
method getExpress (line 49) | ExpressDO getExpress(Integer id);
method getExpressList (line 56) | List<ExpressDO> getExpressList();
method getExpressPage (line 64) | PageResult<ExpressDO> getExpressPage(ExpressPageReqVO pageReqVO);
method getExpressList (line 72) | List<ExpressDO> getExpressList(ExpressExportReqVO exportReqVO);
FILE: yshop-drink-boot3/yshop-module-express/yshop-module-express-biz/src/main/java/co/yixiang/yshop/module/express/service/express/ExpressServiceImpl.java
class ExpressServiceImpl (line 26) | @Service
method createExpress (line 33) | @Override
method updateExpress (line 42) | @Override
method deleteExpress (line 51) | @Override
method validateExpressExists (line 59) | private void validateExpressExists(Integer id) {
method getExpress (line 65) | @Override
method getExpressList (line 70) | @Override
method getExpressPage (line 75) | @Override
method getExpressList (line 80) | @Override
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-api/src/main/java/co/yixiang/yshop/module/infra/api/file/FileApi.java
type FileApi (line 8) | public interface FileApi {
method createFile (line 16) | default String createFile(byte[] content) {
method createFile (line 27) | default String createFile(String path, byte[] content) {
method createFile (line 39) | String createFile(String name, String path, byte[] content);
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-api/src/main/java/co/yixiang/yshop/module/infra/api/logger/ApiAccessLogApi.java
type ApiAccessLogApi (line 12) | public interface ApiAccessLogApi {
method createApiAccessLog (line 19) | void createApiAccessLog(@Valid ApiAccessLogCreateReqDTO createDTO);
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-api/src/main/java/co/yixiang/yshop/module/infra/api/logger/ApiErrorLogApi.java
type ApiErrorLogApi (line 12) | public interface ApiErrorLogApi {
method createApiErrorLog (line 19) | void createApiErrorLog(@Valid ApiErrorLogCreateReqDTO createDTO);
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-api/src/main/java/co/yixiang/yshop/module/infra/api/logger/dto/ApiAccessLogCreateReqDTO.java
class ApiAccessLogCreateReqDTO (line 13) | @Data
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-api/src/main/java/co/yixiang/yshop/module/infra/api/logger/dto/ApiErrorLogCreateReqDTO.java
class ApiErrorLogCreateReqDTO (line 13) | @Data
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-api/src/main/java/co/yixiang/yshop/module/infra/api/websocket/WebSocketSenderApi.java
type WebSocketSenderApi (line 12) | public interface WebSocketSenderApi {
method send (line 22) | void send(Integer userType, Long userId, String messageType, String me...
method send (line 31) | void send(Integer userType, String messageType, String messageContent);
method send (line 40) | void send(String sessionId, String messageType, String messageContent);
method sendObject (line 42) | default void sendObject(Integer userType, Long userId, String messageT...
method sendObject (line 46) | default void sendObject(Integer userType, String messageType, Object m...
method sendObject (line 50) | default void sendObject(String sessionId, String messageType, Object m...
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-api/src/main/java/co/yixiang/yshop/module/infra/enums/DictTypeConstants.java
type DictTypeConstants (line 8) | public interface DictTypeConstants {
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-api/src/main/java/co/yixiang/yshop/module/infra/enums/ErrorCodeConstants.java
type ErrorCodeConstants (line 10) | public interface ErrorCodeConstants {
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/api/file/FileApiImpl.java
class FileApiImpl (line 14) | @Service
method createFile (line 21) | @Override
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/api/logger/ApiAccessLogApiImpl.java
class ApiAccessLogApiImpl (line 15) | @Service
method createApiAccessLog (line 22) | @Override
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/api/logger/ApiErrorLogApiImpl.java
class ApiErrorLogApiImpl (line 15) | @Service
method createApiErrorLog (line 22) | @Override
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/api/websocket/WebSocketSenderApiImpl.java
class WebSocketSenderApiImpl (line 13) | @Component
method send (line 19) | @Override
method send (line 24) | @Override
method send (line 29) | @Override
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/codegen/CodegenController.java
class CodegenController (line 40) | @Tag(name = "管理后台 - 代码生成器")
method getDatabaseTableList (line 49) | @GetMapping("/db/table/list")
method getCodegenTableList (line 64) | @GetMapping("/table/list")
method getCodegenTablePage (line 73) | @GetMapping("/table/page")
method getCodegenDetail (line 81) | @GetMapping("/detail")
method createCodegenList (line 92) | @Operation(summary = "基于数据库的表结构,创建代码生成器的表和字段定义")
method updateCodegen (line 99) | @Operation(summary = "更新数据库的表和字段定义")
method syncCodegenFromDB (line 107) | @Operation(summary = "基于数据库的表结构,同步数据库的表和字段定义")
method deleteCodegen (line 116) | @Operation(summary = "删除数据库的表和字段定义")
method previewCodegen (line 125) | @Operation(summary = "预览生成代码")
method downloadCodegen (line 134) | @Operation(summary = "下载生成代码")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/codegen/vo/CodegenCreateListReqVO.java
class CodegenCreateListReqVO (line 9) | @Schema(description = "管理后台 - 基于数据库的表结构,创建代码生成器的表和字段定义 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/codegen/vo/CodegenDetailRespVO.java
class CodegenDetailRespVO (line 10) | @Schema(description = "管理后台 - 代码生成表和字段的明细 Response VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/codegen/vo/CodegenPreviewRespVO.java
class CodegenPreviewRespVO (line 6) | @Schema(description = "管理后台 - 代码生成预览 Response VO,注意,每个文件都是一个该对象")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/codegen/vo/CodegenUpdateReqVO.java
class CodegenUpdateReqVO (line 12) | @Schema(description = "管理后台 - 代码生成表和字段的修改 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/codegen/vo/column/CodegenColumnRespVO.java
class CodegenColumnRespVO (line 8) | @Schema(description = "管理后台 - 代码生成字段定义 Response VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/codegen/vo/column/CodegenColumnSaveReqVO.java
class CodegenColumnSaveReqVO (line 8) | @Schema(description = "管理后台 - 代码生成字段定义创建/修改 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/codegen/vo/table/CodegenTablePageReqVO.java
class CodegenTablePageReqVO (line 14) | @Schema(description = "管理后台 - 表定义分页 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/codegen/vo/table/CodegenTableRespVO.java
class CodegenTableRespVO (line 8) | @Schema(description = "管理后台 - 代码生成表定义 Response VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/codegen/vo/table/CodegenTableSaveReqVO.java
class CodegenTableSaveReqVO (line 13) | @Schema(description = "管理后台 - 代码生成表定义创建/修改 Response VO")
method isParentMenuIdValid (line 78) | @AssertTrue(message = "上级菜单不能为空,请前往 [修改生成配置 -> 生成信息] 界面,设置“上级菜单”字段")
method isSubValid (line 86) | @AssertTrue(message = "关联的父表信息不全")
method isTreeValid (line 93) | @AssertTrue(message = "关联的树表信息不全")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/codegen/vo/table/DatabaseTableRespVO.java
class DatabaseTableRespVO (line 6) | @Schema(description = "管理后台 - 数据库的表定义 Response VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/config/ConfigController.java
class ConfigController (line 30) | @Tag(name = "管理后台 - 参数配置")
method createConfig (line 39) | @PostMapping("/create")
method updateConfig (line 46) | @PutMapping("/update")
method deleteConfig (line 54) | @DeleteMapping("/delete")
method getConfig (line 63) | @GetMapping(value = "/get")
method getConfigKey (line 71) | @GetMapping(value = "/get-value-by-key")
method getConfigPage (line 85) | @GetMapping("/page")
method exportConfig (line 93) | @GetMapping("/export")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/config/vo/ConfigPageReqVO.java
class ConfigPageReqVO (line 14) | @Schema(description = "管理后台 - 参数配置分页 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/config/vo/ConfigRespVO.java
class ConfigRespVO (line 13) | @Schema(description = "管理后台 - 参数配置信息 Response VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/config/vo/ConfigSaveReqVO.java
class ConfigSaveReqVO (line 11) | @Schema(description = "管理后台 - 参数配置创建/修改 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/db/DataSourceConfigController.java
class DataSourceConfigController (line 22) | @Tag(name = "管理后台 - 数据源配置")
method createDataSourceConfig (line 31) | @PostMapping("/create")
method updateDataSourceConfig (line 38) | @PutMapping("/update")
method deleteDataSourceConfig (line 46) | @DeleteMapping("/delete")
method getDataSourceConfig (line 55) | @GetMapping("/get")
method getDataSourceConfigList (line 64) | @GetMapping("/list")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/db/vo/DataSourceConfigRespVO.java
class DataSourceConfigRespVO (line 8) | @Schema(description = "管理后台 - 数据源配置 Response VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/db/vo/DataSourceConfigSaveReqVO.java
class DataSourceConfigSaveReqVO (line 7) | @Schema(description = "管理后台 - 数据源配置创建/修改 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/demo/demo01/Demo01ContactController.java
class Demo01ContactController (line 30) | @Tag(name = "管理后台 - 示例联系人")
method createDemo01Contact (line 39) | @PostMapping("/create")
method updateDemo01Contact (line 46) | @PutMapping("/update")
method deleteDemo01Contact (line 54) | @DeleteMapping("/delete")
method getDemo01Contact (line 63) | @GetMapping("/get")
method getDemo01ContactPage (line 72) | @GetMapping("/page")
method exportDemo01ContactExcel (line 80) | @GetMapping("/export-excel")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/demo/demo01/vo/Demo01ContactPageReqVO.java
class Demo01ContactPageReqVO (line 12) | @Schema(description = "管理后台 - 示例联系人分页 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/demo/demo01/vo/Demo01ContactRespVO.java
class Demo01ContactRespVO (line 13) | @Schema(description = "管理后台 - 示例联系人 Response VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/demo/demo01/vo/Demo01ContactSaveReqVO.java
class Demo01ContactSaveReqVO (line 10) | @Schema(description = "管理后台 - 示例联系人新增/修改 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/demo/demo02/Demo02CategoryController.java
class Demo02CategoryController (line 28) | @Tag(name = "管理后台 - 示例分类")
method createDemo02Category (line 37) | @PostMapping("/create")
method updateDemo02Category (line 44) | @PutMapping("/update")
method deleteDemo02Category (line 52) | @DeleteMapping("/delete")
method getDemo02Category (line 61) | @GetMapping("/get")
method getDemo02CategoryList (line 70) | @GetMapping("/list")
method exportDemo02CategoryExcel (line 78) | @GetMapping("/export-excel")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/demo/demo02/vo/Demo02CategoryListReqVO.java
class Demo02CategoryListReqVO (line 11) | @Schema(description = "管理后台 - 示例分类列表 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/demo/demo02/vo/Demo02CategoryRespVO.java
class Demo02CategoryRespVO (line 10) | @Schema(description = "管理后台 - 示例分类 Response VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/demo/demo02/vo/Demo02CategorySaveReqVO.java
class Demo02CategorySaveReqVO (line 9) | @Schema(description = "管理后台 - 示例分类新增/修改 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/demo/demo03/Demo03StudentController.java
class Demo03StudentController (line 32) | @Tag(name = "管理后台 - 学生")
method createDemo03Student (line 41) | @PostMapping("/create")
method updateDemo03Student (line 48) | @PutMapping("/update")
method deleteDemo03Student (line 56) | @DeleteMapping("/delete")
method getDemo03Student (line 65) | @GetMapping("/get")
method getDemo03StudentPage (line 74) | @GetMapping("/page")
method exportDemo03StudentExcel (line 82) | @GetMapping("/export-excel")
method getDemo03CoursePage (line 97) | @GetMapping("/demo03-course/page")
method createDemo03Course (line 106) | @PostMapping("/demo03-course/create")
method updateDemo03Course (line 113) | @PutMapping("/demo03-course/update")
method deleteDemo03Course (line 121) | @DeleteMapping("/demo03-course/delete")
method getDemo03Course (line 130) | @GetMapping("/demo03-course/get")
method getDemo03CourseListByStudentId (line 138) | @GetMapping("/demo03-course/list-by-student-id")
method getDemo03GradePage (line 148) | @GetMapping("/demo03-grade/page")
method createDemo03Grade (line 157) | @PostMapping("/demo03-grade/create")
method updateDemo03Grade (line 164) | @PutMapping("/demo03-grade/update")
method deleteDemo03Grade (line 172) | @DeleteMapping("/demo03-grade/delete")
method getDemo03Grade (line 181) | @GetMapping("/demo03-grade/get")
method getDemo03GradeByStudentId (line 189) | @GetMapping("/demo03-grade/get-by-student-id")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/demo/demo03/vo/Demo03StudentPageReqVO.java
class Demo03StudentPageReqVO (line 11) | @Schema(description = "管理后台 - 学生分页 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/demo/demo03/vo/Demo03StudentRespVO.java
class Demo03StudentRespVO (line 11) | @Schema(description = "管理后台 - 学生 Response VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/demo/demo03/vo/Demo03StudentSaveReqVO.java
class Demo03StudentSaveReqVO (line 11) | @Schema(description = "管理后台 - 学生新增/修改 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/file/FileConfigController.java
class FileConfigController (line 23) | @Tag(name = "管理后台 - 文件配置")
method createFileConfig (line 32) | @PostMapping("/create")
method updateFileConfig (line 39) | @PutMapping("/update")
method updateFileConfigMaster (line 47) | @PutMapping("/update-master")
method deleteFileConfig (line 55) | @DeleteMapping("/delete")
method getFileConfig (line 64) | @GetMapping("/get")
method getFileConfigPage (line 73) | @GetMapping("/page")
method testFileConfig (line 81) | @GetMapping("/test")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/file/FileController.java
class FileController (line 30) | @Tag(name = "管理后台 - 文件存储")
method uploadFile (line 40) | @PostMapping("/upload")
method getFilePresignedUrl (line 48) | @GetMapping("/presigned-url")
method createFile (line 54) | @PostMapping("/create")
method deleteFile (line 60) | @DeleteMapping("/delete")
method getFileContent (line 69) | @GetMapping("/{configId}/get/**")
method getFilePage (line 94) | @GetMapping("/page")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/file/vo/config/FileConfigPageReqVO.java
class FileConfigPageReqVO (line 14) | @Schema(description = "管理后台 - 文件配置分页 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/file/vo/config/FileConfigRespVO.java
class FileConfigRespVO (line 9) | @Schema(description = "管理后台 - 文件配置 Response VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/file/vo/config/FileConfigSaveReqVO.java
class FileConfigSaveReqVO (line 9) | @Schema(description = "管理后台 - 文件配置创建/修改 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/file/vo/file/FileCreateReqVO.java
class FileCreateReqVO (line 7) | @Schema(description = "管理后台 - 文件创建 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/file/vo/file/FilePageReqVO.java
class FilePageReqVO (line 14) | @Schema(description = "管理后台 - 文件分页 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/file/vo/file/FilePresignedUrlRespVO.java
class FilePresignedUrlRespVO (line 8) | @AllArgsConstructor
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/file/vo/file/FileRespVO.java
class FileRespVO (line 8) | @Schema(description = "管理后台 - 文件 Response VO,不返回 content 字段,太大")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/file/vo/file/FileUploadReqVO.java
class FileUploadReqVO (line 9) | @Schema(description = "管理后台 - 上传文件 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/job/JobController.java
class JobController (line 35) | @Tag(name = "管理后台 - 定时任务")
method createJob (line 44) | @PostMapping("/create")
method updateJob (line 52) | @PutMapping("/update")
method updateJobStatus (line 61) | @PutMapping("/update-status")
method deleteJob (line 74) | @DeleteMapping("/delete")
method triggerJob (line 84) | @PutMapping("/trigger")
method syncJob (line 93) | @PostMapping("/sync")
method getJob (line 101) | @GetMapping("/get")
method getJobPage (line 110) | @GetMapping("/page")
method exportJobExcel (line 118) | @GetMapping("/export-excel")
method getJobNextTimes (line 131) | @GetMapping("/get_next_times")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/job/JobLogController.java
class JobLogController (line 32) | @Tag(name = "管理后台 - 定时任务日志")
method getJobLog (line 41) | @GetMapping("/get")
method getJobLogPage (line 50) | @GetMapping("/page")
method exportJobLogExcel (line 58) | @GetMapping("/export-excel")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/job/vo/job/JobPageReqVO.java
class JobPageReqVO (line 9) | @Schema(description = "管理后台 - 定时任务分页 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/job/vo/job/JobRespVO.java
class JobRespVO (line 14) | @Schema(description = "管理后台 - 定时任务 Response VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/job/vo/job/JobSaveReqVO.java
class JobSaveReqVO (line 9) | @Schema(description = "管理后台 - 定时任务创建/修改 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/job/vo/log/JobLogPageReqVO.java
class JobLogPageReqVO (line 14) | @Schema(description = "管理后台 - 定时任务日志分页 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/job/vo/log/JobLogRespVO.java
class JobLogRespVO (line 13) | @Schema(description = "管理后台 - 定时任务日志 Response VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/logger/ApiAccessLogController.java
class ApiAccessLogController (line 30) | @Tag(name = "管理后台 - API 访问日志")
method getApiAccessLogPage (line 39) | @GetMapping("/page")
method exportApiAccessLogExcel (line 47) | @GetMapping("/export-excel")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/logger/ApiErrorLogController.java
class ApiErrorLogController (line 31) | @Tag(name = "管理后台 - API 错误日志")
method updateApiErrorLogProcess (line 40) | @PutMapping("/update-status")
method getApiErrorLogPage (line 53) | @GetMapping("/page")
method exportApiErrorLogExcel (line 61) | @GetMapping("/export-excel")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogPageReqVO.java
class ApiAccessLogPageReqVO (line 14) | @Schema(description = "管理后台 - API 访问日志分页 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/logger/vo/apiaccesslog/ApiAccessLogRespVO.java
class ApiAccessLogRespVO (line 13) | @Schema(description = "管理后台 - API 访问日志 Response VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogPageReqVO.java
class ApiErrorLogPageReqVO (line 14) | @Schema(description = "管理后台 - API 错误日志分页 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/logger/vo/apierrorlog/ApiErrorLogRespVO.java
class ApiErrorLogRespVO (line 13) | @Schema(description = "管理后台 - API 错误日志 Response VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/redis/RedisController.java
class RedisController (line 21) | @Tag(name = "管理后台 - Redis 监控")
method getRedisMonitorInfo (line 29) | @GetMapping("/get-monitor-info")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/admin/redis/vo/RedisMonitorRespVO.java
class RedisMonitorRespVO (line 11) | @Schema(description = "管理后台 - Redis 监控信息 Response VO")
class CommandStat (line 26) | @Schema(description = "Redis 命令统计结果")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/app/file/AppFileController.java
class AppFileController (line 20) | @Tag(name = "用户 App - 文件存储")
method uploadFile (line 30) | @PostMapping("/upload")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/controller/app/file/vo/AppFileUploadReqVO.java
class AppFileUploadReqVO (line 9) | @Schema(description = "用户 App - 上传文件 Request VO")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/convert/codegen/CodegenConvert.java
type CodegenConvert (line 23) | @Mapper
method convert (line 30) | @Mappings({
method convertList (line 36) | List<CodegenColumnDO> convertList(List<TableField> list);
method convert (line 38) | @Mappings({
method getDataType (line 49) | @Named("getDataType")
method convert (line 56) | default CodegenDetailRespVO convert(CodegenTableDO table, List<Codegen...
method convert (line 63) | default List<CodegenPreviewRespVO> convert(Map<String, String> codes) {
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/convert/config/ConfigConvert.java
type ConfigConvert (line 13) | @Mapper
method convertPage (line 18) | PageResult<ConfigRespVO> convertPage(PageResult<ConfigDO> page);
method convertList (line 20) | List<ConfigRespVO> convertList(List<ConfigDO> list);
method convert (line 22) | @Mapping(source = "configKey", target = "key")
method convert (line 25) | @Mapping(source = "key", target = "configKey")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/convert/file/FileConfigConvert.java
type FileConfigConvert (line 14) | @Mapper
method convert (line 19) | @Mapping(target = "config", ignore = true)
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/convert/redis/RedisConvert.java
type RedisConvert (line 11) | @Mapper
method build (line 16) | default RedisMonitorRespVO build(Properties info, Long dbSize, Propert...
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/dataobject/codegen/CodegenColumnDO.java
class CodegenColumnDO (line 19) | @TableName(value = "infra_codegen_column", autoResultMap = true)
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/dataobject/codegen/CodegenTableDO.java
class CodegenTableDO (line 21) | @TableName(value = "infra_codegen_table", autoResultMap = true)
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/dataobject/config/ConfigDO.java
class ConfigDO (line 17) | @TableName("infra_config")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/dataobject/db/DataSourceConfigDO.java
class DataSourceConfigDO (line 15) | @TableName(value = "infra_data_source_config", autoResultMap = true)
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/dataobject/demo/demo01/Demo01ContactDO.java
class Demo01ContactDO (line 16) | @TableName("yshop_demo01_contact")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/dataobject/demo/demo02/Demo02CategoryDO.java
class Demo02CategoryDO (line 14) | @TableName("yshop_demo02_category")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/dataobject/demo/demo03/Demo03CourseDO.java
class Demo03CourseDO (line 14) | @TableName("yshop_demo03_course")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/dataobject/demo/demo03/Demo03GradeDO.java
class Demo03GradeDO (line 14) | @TableName("yshop_demo03_grade")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/dataobject/demo/demo03/Demo03StudentDO.java
class Demo03StudentDO (line 16) | @TableName("yshop_demo03_student")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/dataobject/file/FileConfigDO.java
class FileConfigDO (line 25) | @TableName(value = "infra_file_config", autoResultMap = true)
class FileClientConfigTypeHandler (line 66) | public static class FileClientConfigTypeHandler extends AbstractJsonTy...
method parse (line 68) | @Override
method toJson (line 94) | @Override
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/dataobject/file/FileContentDO.java
class FileContentDO (line 18) | @TableName("infra_file_content")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/dataobject/file/FileDO.java
class FileDO (line 14) | @TableName("infra_file")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/dataobject/job/JobDO.java
class JobDO (line 15) | @TableName("infra_job")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/dataobject/job/JobLogDO.java
class JobLogDO (line 17) | @TableName("infra_job_log")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/dataobject/logger/ApiAccessLogDO.java
class ApiAccessLogDO (line 19) | @TableName("infra_api_access_log")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/dataobject/logger/ApiErrorLogDO.java
class ApiErrorLogDO (line 18) | @TableName("infra_api_error_log")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/mysql/codegen/CodegenColumnMapper.java
type CodegenColumnMapper (line 10) | @Mapper
method selectListByTableId (line 13) | default List<CodegenColumnDO> selectListByTableId(Long tableId) {
method deleteListByTableId (line 19) | default void deleteListByTableId(Long tableId) {
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/mysql/codegen/CodegenTableMapper.java
type CodegenTableMapper (line 12) | @Mapper
method selectByTableNameAndDataSourceConfigId (line 15) | default CodegenTableDO selectByTableNameAndDataSourceConfigId(String t...
method selectPage (line 20) | default PageResult<CodegenTableDO> selectPage(CodegenTablePageReqVO pa...
method selectListByDataSourceConfigId (line 30) | default List<CodegenTableDO> selectListByDataSourceConfigId(Long dataS...
method selectListByTemplateTypeAndMasterTableId (line 34) | default List<CodegenTableDO> selectListByTemplateTypeAndMasterTableId(...
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/mysql/config/ConfigMapper.java
type ConfigMapper (line 10) | @Mapper
method selectByKey (line 13) | default ConfigDO selectByKey(String key) {
method selectPage (line 17) | default PageResult<ConfigDO> selectPage(ConfigPageReqVO reqVO) {
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/mysql/db/DataSourceConfigMapper.java
type DataSourceConfigMapper (line 12) | @Mapper
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/mysql/demo/demo01/Demo01ContactMapper.java
type Demo01ContactMapper (line 15) | @Mapper
method selectPage (line 18) | default PageResult<Demo01ContactDO> selectPage(Demo01ContactPageReqVO ...
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/mysql/demo/demo02/Demo02CategoryMapper.java
type Demo02CategoryMapper (line 16) | @Mapper
method selectList (line 19) | default List<Demo02CategoryDO> selectList(Demo02CategoryListReqVO reqV...
method selectByParentIdAndName (line 27) | default Demo02CategoryDO selectByParentIdAndName(Long parentId, String...
method selectCountByParentId (line 31) | default Long selectCountByParentId(Long parentId) {
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/mysql/demo/demo03/Demo03CourseMapper.java
type Demo03CourseMapper (line 17) | @Mapper
method selectPage (line 20) | default PageResult<Demo03CourseDO> selectPage(PageParam reqVO, Long st...
method selectListByStudentId (line 26) | default List<Demo03CourseDO> selectListByStudentId(Long studentId) {
method deleteByStudentId (line 30) | default int deleteByStudentId(Long studentId) {
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/mysql/demo/demo03/Demo03GradeMapper.java
type Demo03GradeMapper (line 15) | @Mapper
method selectPage (line 18) | default PageResult<Demo03GradeDO> selectPage(PageParam reqVO, Long stu...
method selectByStudentId (line 24) | default Demo03GradeDO selectByStudentId(Long studentId) {
method deleteByStudentId (line 28) | default int deleteByStudentId(Long studentId) {
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/mysql/demo/demo03/Demo03StudentMapper.java
type Demo03StudentMapper (line 15) | @Mapper
method selectPage (line 18) | default PageResult<Demo03StudentDO> selectPage(Demo03StudentPageReqVO ...
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/mysql/file/FileConfigMapper.java
type FileConfigMapper (line 10) | @Mapper
method selectPage (line 13) | default PageResult<FileConfigDO> selectPage(FileConfigPageReqVO reqVO) {
method selectByMaster (line 21) | default FileConfigDO selectByMaster() {
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/mysql/file/FileContentMapper.java
type FileContentMapper (line 10) | @Mapper
method deleteByConfigIdAndPath (line 13) | default void deleteByConfigIdAndPath(Long configId, String path) {
method selectListByConfigIdAndPath (line 19) | default List<FileContentDO> selectListByConfigIdAndPath(Long configId,...
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/mysql/file/FileMapper.java
type FileMapper (line 15) | @Mapper
method selectPage (line 18) | default PageResult<FileDO> selectPage(FilePageReqVO reqVO) {
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/mysql/job/JobLogMapper.java
type JobLogMapper (line 19) | @Mapper
method selectPage (line 22) | default PageResult<JobLogDO> selectPage(JobLogPageReqVO reqVO) {
method deleteByCreateTimeLt (line 40) | @Delete("DELETE FROM infra_job_log WHERE create_time < #{createTime} L...
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/mysql/job/JobMapper.java
type JobMapper (line 15) | @Mapper
method selectByHandlerName (line 18) | default JobDO selectByHandlerName(String handlerName) {
method selectPage (line 22) | default PageResult<JobDO> selectPage(JobPageReqVO reqVO) {
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/mysql/logger/ApiAccessLogMapper.java
type ApiAccessLogMapper (line 19) | @Mapper
method selectPage (line 22) | default PageResult<ApiAccessLogDO> selectPage(ApiAccessLogPageReqVO re...
method deleteByCreateTimeLt (line 42) | @Delete("DELETE FROM infra_api_access_log WHERE create_time < #{create...
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/dal/mysql/logger/ApiErrorLogMapper.java
type ApiErrorLogMapper (line 19) | @Mapper
method selectPage (line 22) | default PageResult<ApiErrorLogDO> selectPage(ApiErrorLogPageReqVO reqV...
method deleteByCreateTimeLt (line 41) | @Delete("DELETE FROM infra_api_error_log WHERE create_time < #{createT...
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/enums/codegen/CodegenColumnHtmlTypeEnum.java
type CodegenColumnHtmlTypeEnum (line 9) | @AllArgsConstructor
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/enums/codegen/CodegenColumnListConditionEnum.java
type CodegenColumnListConditionEnum (line 9) | @AllArgsConstructor
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/enums/codegen/CodegenFrontTypeEnum.java
type CodegenFrontTypeEnum (line 11) | @AllArgsConstructor
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/enums/codegen/CodegenSceneEnum.java
type CodegenSceneEnum (line 13) | @AllArgsConstructor
method valueOf (line 37) | public static CodegenSceneEnum valueOf(Integer scene) {
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/enums/codegen/CodegenTemplateTypeEnum.java
type CodegenTemplateTypeEnum (line 14) | @AllArgsConstructor
method isMaster (line 38) | public static boolean isMaster(Integer type) {
method isTree (line 49) | public static boolean isTree(Integer type) {
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/enums/config/ConfigTypeEnum.java
type ConfigTypeEnum (line 6) | @Getter
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/enums/job/JobLogStatusEnum.java
type JobLogStatusEnum (line 11) | @Getter
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/enums/job/JobStatusEnum.java
type JobStatusEnum (line 16) | @Getter
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/enums/logger/ApiErrorLogProcessStatusEnum.java
type ApiErrorLogProcessStatusEnum (line 11) | @AllArgsConstructor
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/codegen/config/CodegenConfiguration.java
class CodegenConfiguration (line 6) | @Configuration(proxyBeanMethods = false)
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/codegen/config/CodegenProperties.java
class CodegenProperties (line 12) | @ConfigurationProperties(prefix = "yshop.codegen")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/config/YshopFileAutoConfiguration.java
class YshopFileAutoConfiguration (line 13) | @Configuration(proxyBeanMethods = false)
method fileClientFactory (line 16) | @Bean
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/AbstractFileClient.java
class AbstractFileClient (line 11) | @Slf4j
method AbstractFileClient (line 23) | public AbstractFileClient(Long id, Config config) {
method init (line 31) | public final void init() {
method doInit (line 39) | protected abstract void doInit();
method refresh (line 41) | public final void refresh(Config config) {
method getId (line 52) | @Override
method formatFileUrl (line 65) | protected String formatFileUrl(String domain, String path) {
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/FileClient.java
type FileClient (line 10) | public interface FileClient {
method getId (line 17) | Long getId();
method upload (line 27) | String upload(byte[] content, String path, String type) throws Exception;
method delete (line 35) | void delete(String path) throws Exception;
method getContent (line 43) | byte[] getContent(String path) throws Exception;
method getPresignedObjectUrl (line 51) | default FilePresignedUrlRespDTO getPresignedObjectUrl(String path) thr...
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/FileClientConfig.java
type FileClientConfig (line 11) | @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS)
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/FileClientFactory.java
type FileClientFactory (line 5) | public interface FileClientFactory {
method getFileClient (line 13) | FileClient getFileClient(Long configId);
method createOrUpdateFileClient (line 22) | <Config extends FileClientConfig> void createOrUpdateFileClient(Long c...
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/FileClientFactoryImpl.java
class FileClientFactoryImpl (line 16) | @Slf4j
method getFileClient (line 25) | @Override
method createOrUpdateFileClient (line 34) | @Override
method createFileClient (line 47) | @SuppressWarnings("unchecked")
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/db/DBFileClient.java
class DBFileClient (line 17) | public class DBFileClient extends AbstractFileClient<DBFileClientConfig> {
method DBFileClient (line 21) | public DBFileClient(Long id, DBFileClientConfig config) {
method doInit (line 25) | @Override
method upload (line 30) | @Override
method delete (line 39) | @Override
method getContent (line 44) | @Override
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/db/DBFileClientConfig.java
class DBFileClientConfig (line 14) | @Data
FILE: yshop-drink-boot3/yshop-module-infra/yshop-module-infra-biz/src/main/java/co/yixiang/yshop/module/infra/framework/file/core/client/ftp/FtpFileClient.java
Copy disabled (too large)
Download .json
Condensed preview — 3200 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (19,469K chars).
[
{
"path": ".gitignore",
"chars": 125,
"preview": "/.git\n/.idea\n*.log\n*.DS_Store\n/yshop-drink-boot3/target/\n/yshop-drink-vue3/node_modules\n/yshop-drink-uniapp-vue3/node_mo"
},
{
"path": "LICENSE",
"chars": 1083,
"preview": "MIT License\r\n\r\nCopyright (c) 2023 yshop\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy\r"
},
{
"path": "README.md",
"chars": 3355,
"preview": "\n\n## 平台简介\n\n意象点餐(扫码点餐)系统,在线点餐(外卖与自取)小程序模式,支持多门店模式,SaaS多租户模式,基础技术Java17,springboot3、vue3、uniapp(vue3)(支持H5、微信小程序)\n采用当前流行技术"
},
{
"path": "yshop-drink-boot3/.gitignore",
"chars": 698,
"preview": "######################################################################\n# Build Tools\n\n.gradle\n/build/\n!gradle/wrapper/gr"
},
{
"path": "yshop-drink-boot3/README.md",
"chars": 243,
"preview": "意向订餐系统,类似肯德基点餐小程序模式,支持多门店模式,基础技术Java,uniapp(支持H5、微信小程序)\n采用当前流行技术组合的前后端分离点餐系统: SpringBoot3+jdk17、Spring Security OAuth2、M"
},
{
"path": "yshop-drink-boot3/lombok.config",
"chars": 126,
"preview": "config.stopBubbling = true\nlombok.tostring.callsuper=CALL\nlombok.equalsandhashcode.callsuper=CALL\nlombok.accessors.chain"
},
{
"path": "yshop-drink-boot3/pom.xml",
"chars": 6457,
"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": "yshop-drink-boot3/script/docker/Docker-HOWTO.md",
"chars": 1116,
"preview": "# Docker Build & Up\n\n目标: 快速部署体验系统,帮助了解系统之间的依赖关系。\n依赖:docker compose v2,删除`name: yshop-system`,降低`version`版本为`3.3`以下,支持`do"
},
{
"path": "yshop-drink-boot3/script/docker/docker-compose.yml",
"chars": 2794,
"preview": "version: \"3.4\"\n\nname: yshop-system\n\nservices:\n mysql:\n container_name: yshop-mysql\n image: mysql:8\n restart: u"
},
{
"path": "yshop-drink-boot3/script/docker/docker.env",
"chars": 822,
"preview": "## mysql\nMYSQL_DATABASE=yixiang-drink\nMYSQL_ROOT_PASSWORD=123456\n\n## server\nJAVA_OPTS=-Xms512m -Xmx512m -Djava.security."
},
{
"path": "yshop-drink-boot3/script/shell/deploy.sh",
"chars": 4612,
"preview": "#!/bin/bash\nset -e\n\nDATE=$(date +%Y%m%d%H%M)\n# 基础路径\nBASE_PATH=/work/projects/yshop-server\n# 编译后 jar 的地址。部署时,Jenkins 会上传 "
},
{
"path": "yshop-drink-boot3/yshop-dependencies/pom.xml",
"chars": 28170,
"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": "yshop-drink-boot3/yshop-framework/pom.xml",
"chars": 1790,
"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": "yshop-drink-boot3/yshop-framework/yshop-common/pom.xml",
"chars": 5409,
"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": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/constant/ShopConstants.java",
"chars": 3464,
"preview": "/**\n * Copyright (C) 2018-2022\n * All rights reserved, Designed By www.yixiang.co\n\n */\npackage co.yixiang.yshop.framewor"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/constant/SystemConfigConstants.java",
"chars": 3178,
"preview": "package co.yixiang.yshop.framework.common.constant;\n\npublic class SystemConfigConstants {\n //地址配置\n public final st"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/core/IntArrayValuable.java",
"chars": 191,
"preview": "package co.yixiang.yshop.framework.common.core;\n\n/**\n * 可生成 Int 数组的接口\n *\n * @author yshop\n */\npublic interface IntArrayV"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/core/KeyValue.java",
"chars": 356,
"preview": "package co.yixiang.yshop.framework.common.core;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimport lombok.NoA"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/CommonStatusEnum.java",
"chars": 937,
"preview": "package co.yixiang.yshop.framework.common.enums;\n\nimport cn.hutool.core.util.ObjUtil;\nimport co.yixiang.yshop.framework."
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/DateIntervalEnum.java",
"chars": 948,
"preview": "package co.yixiang.yshop.framework.common.enums;\n\nimport cn.hutool.core.util.ArrayUtil;\nimport co.yixiang.yshop.framewor"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/DocumentEnum.java",
"chars": 412,
"preview": "package co.yixiang.yshop.framework.common.enums;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Getter;\n\n/**\n * 文档地址\n "
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/OrderInfoEnum.java",
"chars": 1327,
"preview": "/**\n * Copyright (C) 2018-2022\n * All rights reserved, Designed By www.yixiang.co\n\n */\npackage co.yixiang.yshop.framewor"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/OrderTypeEnum.java",
"chars": 332,
"preview": "package co.yixiang.yshop.framework.common.enums;\r\n\r\n\r\nimport lombok.AllArgsConstructor;\r\nimport lombok.Getter;\r\n\r\n/**\r\n "
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/PayIdEnum.java",
"chars": 618,
"preview": "package co.yixiang.yshop.framework.common.enums;\r\n\r\n\r\nimport lombok.AllArgsConstructor;\r\nimport lombok.Getter;\r\n\r\n/**\r\n "
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/ShopCommonEnum.java",
"chars": 1200,
"preview": "package co.yixiang.yshop.framework.common.enums;\r\n\r\nimport lombok.AllArgsConstructor;\r\nimport lombok.Getter;\r\n\r\n/**\r\n * "
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/TerminalEnum.java",
"chars": 800,
"preview": "package co.yixiang.yshop.framework.common.enums;\n\nimport co.yixiang.yshop.framework.common.core.IntArrayValuable;\nimport"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/UserTypeEnum.java",
"chars": 880,
"preview": "package co.yixiang.yshop.framework.common.enums;\n\nimport cn.hutool.core.util.ArrayUtil;\nimport co.yixiang.yshop.framewor"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/WebFilterOrderEnum.java",
"chars": 908,
"preview": "package co.yixiang.yshop.framework.common.enums;\n\n/**\n * Web 过滤器顺序的枚举类,保证过滤器按照符合我们的预期\n *\n * 考虑到每个 starter 都需要用到该工具类,所以放"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/exception/ErrorCode.java",
"chars": 688,
"preview": "package co.yixiang.yshop.framework.common.exception;\n\nimport co.yixiang.yshop.framework.common.exception.enums.GlobalErr"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/exception/ServerException.java",
"chars": 1181,
"preview": "package co.yixiang.yshop.framework.common.exception;\n\nimport co.yixiang.yshop.framework.common.exception.enums.GlobalErr"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/exception/ServiceException.java",
"chars": 1182,
"preview": "package co.yixiang.yshop.framework.common.exception;\n\nimport co.yixiang.yshop.framework.common.exception.enums.ServiceEr"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/exception/enums/GlobalErrorCodeConstants.java",
"chars": 1377,
"preview": "package co.yixiang.yshop.framework.common.exception.enums;\n\nimport co.yixiang.yshop.framework.common.exception.ErrorCode"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/exception/enums/ServiceErrorCodeRange.java",
"chars": 1184,
"preview": "package co.yixiang.yshop.framework.common.exception.enums;\n\n/**\n * 业务异常的错误码区间,解决:解决各模块错误码定义,避免重复,在此只声明不做实际使用\n *\n * 一共 10"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/exception/util/ServiceExceptionUtil.java",
"chars": 2680,
"preview": "package co.yixiang.yshop.framework.common.exception.util;\n\nimport co.yixiang.yshop.framework.common.exception.ErrorCode;"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/params/QueryParam.java",
"chars": 1097,
"preview": "/**\n * Copyright (C) 2018-2022\n * All rights reserved, Designed By www.yixiang.co\n\n */\npackage co.yixiang.yshop.framewor"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/pojo/CommonResult.java",
"chars": 2872,
"preview": "package co.yixiang.yshop.framework.common.pojo;\n\nimport co.yixiang.yshop.framework.common.exception.ErrorCode;\nimport co"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/pojo/PageParam.java",
"chars": 1103,
"preview": "package co.yixiang.yshop.framework.common.pojo;\n\nimport io.swagger.v3.oas.annotations.media.Schema;\nimport lombok.Data;\n"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/pojo/PageResult.java",
"chars": 953,
"preview": "package co.yixiang.yshop.framework.common.pojo;\n\nimport io.swagger.v3.oas.annotations.media.Schema;\nimport lombok.Data;\n"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/pojo/SortablePageParam.java",
"chars": 441,
"preview": "package co.yixiang.yshop.framework.common.pojo;\n\nimport io.swagger.v3.oas.annotations.media.Schema;\nimport lombok.Data;\n"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/pojo/SortingField.java",
"chars": 598,
"preview": "package co.yixiang.yshop.framework.common.pojo;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimport lombok.NoA"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/serializer/BigDecimalSerializer.java",
"chars": 861,
"preview": "package co.yixiang.yshop.framework.common.serializer;\n\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.faste"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/serializer/DoubleSerializer.java",
"chars": 820,
"preview": "package co.yixiang.yshop.framework.common.serializer;\n\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.faste"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/cache/CacheUtils.java",
"chars": 1504,
"preview": "package co.yixiang.yshop.framework.common.util.cache;\n\nimport com.google.common.cache.CacheBuilder;\nimport com.google.co"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/collection/ArrayUtils.java",
"chars": 1620,
"preview": "package co.yixiang.yshop.framework.common.util.collection;\n\nimport cn.hutool.core.collection.CollectionUtil;\nimport cn.h"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/collection/CollectionUtils.java",
"chars": 12875,
"preview": "package co.yixiang.yshop.framework.common.util.collection;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.hutool."
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/collection/MapUtils.java",
"chars": 1827,
"preview": "package co.yixiang.yshop.framework.common.util.collection;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.hutool."
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/collection/SetUtils.java",
"chars": 307,
"preview": "package co.yixiang.yshop.framework.common.util.collection;\n\nimport cn.hutool.core.collection.CollUtil;\n\nimport java.util"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/date/DateUtils.java",
"chars": 3719,
"preview": "package co.yixiang.yshop.framework.common.util.date;\n\nimport cn.hutool.core.date.LocalDateTimeUtil;\n\nimport java.time.*;"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/date/LocalDateTimeUtils.java",
"chars": 10178,
"preview": "package co.yixiang.yshop.framework.common.util.date;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.hutool.core.d"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/http/HttpUtils.java",
"chars": 4792,
"preview": "package co.yixiang.yshop.framework.common.util.http;\n\nimport cn.hutool.core.codec.Base64;\nimport cn.hutool.core.map.Tabl"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/io/FileUtils.java",
"chars": 2004,
"preview": "package co.yixiang.yshop.framework.common.util.io;\n\nimport cn.hutool.core.io.FileTypeUtil;\nimport cn.hutool.core.io.File"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/io/IoUtils.java",
"chars": 615,
"preview": "package co.yixiang.yshop.framework.common.util.io;\n\nimport cn.hutool.core.io.IORuntimeException;\nimport cn.hutool.core.i"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/json/JsonUtils.java",
"chars": 6370,
"preview": "package co.yixiang.yshop.framework.common.util.json;\n\nimport cn.hutool.core.util.ArrayUtil;\nimport cn.hutool.core.util.S"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/monitor/TracerUtils.java",
"chars": 506,
"preview": "package co.yixiang.yshop.framework.common.util.monitor;\n\nimport org.apache.skywalking.apm.toolkit.trace.TraceContext;\n\n/"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/number/MoneyUtils.java",
"chars": 3194,
"preview": "package co.yixiang.yshop.framework.common.util.number;\n\nimport cn.hutool.core.math.Money;\nimport cn.hutool.core.util.Num"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/number/NumberUtils.java",
"chars": 1907,
"preview": "package co.yixiang.yshop.framework.common.util.number;\n\nimport cn.hutool.core.util.NumberUtil;\nimport cn.hutool.core.uti"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/object/BeanUtils.java",
"chars": 1879,
"preview": "package co.yixiang.yshop.framework.common.util.object;\n\nimport cn.hutool.core.bean.BeanUtil;\nimport co.yixiang.yshop.fra"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/object/ObjectUtils.java",
"chars": 1468,
"preview": "package co.yixiang.yshop.framework.common.util.object;\n\nimport cn.hutool.core.util.ObjectUtil;\nimport cn.hutool.core.uti"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/object/PageUtils.java",
"chars": 2172,
"preview": "package co.yixiang.yshop.framework.common.util.object;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.hutool.core"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/servlet/ServletUtils.java",
"chars": 4101,
"preview": "package co.yixiang.yshop.framework.common.util.servlet;\n\nimport cn.hutool.core.io.IoUtil;\nimport cn.hutool.core.util.Str"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/spring/SpringExpressionUtils.java",
"chars": 2986,
"preview": "package co.yixiang.yshop.framework.common.util.spring;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.hutool.core"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/spring/SpringUtils.java",
"chars": 426,
"preview": "package co.yixiang.yshop.framework.common.util.spring;\n\nimport cn.hutool.extra.spring.SpringUtil;\n\nimport java.util.Obje"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/string/StrUtils.java",
"chars": 2904,
"preview": "package co.yixiang.yshop.framework.common.util.string;\n\nimport cn.hutool.core.text.StrPool;\nimport cn.hutool.core.util.A"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/validation/ValidationUtils.java",
"chars": 1979,
"preview": "package co.yixiang.yshop.framework.common.util.validation;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.hutool."
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/util/yshop/LocationUtils.java",
"chars": 1076,
"preview": "package co.yixiang.yshop.framework.common.util.yshop;\n\nimport cn.hutool.core.util.NumberUtil;\n\n\n/**\n * 定位工具\n * @author h"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/validation/InEnum.java",
"chars": 834,
"preview": "package co.yixiang.yshop.framework.common.validation;\n\nimport co.yixiang.yshop.framework.common.core.IntArrayValuable;\n\n"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/validation/InEnumCollectionValidator.java",
"chars": 1473,
"preview": "package co.yixiang.yshop.framework.common.validation;\n\nimport cn.hutool.core.collection.CollUtil;\nimport co.yixiang.ysho"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/validation/InEnumValidator.java",
"chars": 1440,
"preview": "package co.yixiang.yshop.framework.common.validation;\n\nimport co.yixiang.yshop.framework.common.core.IntArrayValuable;\n\n"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/validation/Mobile.java",
"chars": 628,
"preview": "package co.yixiang.yshop.framework.common.validation;\n\nimport jakarta.validation.Constraint;\nimport jakarta.validation.P"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/validation/MobileValidator.java",
"chars": 686,
"preview": "package co.yixiang.yshop.framework.common.validation;\n\nimport cn.hutool.core.util.StrUtil;\nimport co.yixiang.yshop.frame"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/validation/Telephone.java",
"chars": 633,
"preview": "package co.yixiang.yshop.framework.common.validation;\n\nimport jakarta.validation.Constraint;\nimport jakarta.validation.P"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/validation/TelephoneValidator.java",
"chars": 696,
"preview": "package co.yixiang.yshop.framework.common.validation;\n\nimport cn.hutool.core.text.CharSequenceUtil;\nimport cn.hutool.cor"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/validation/package-info.java",
"chars": 95,
"preview": "/**\n * 使用 Hibernate Validator 实现参数校验\n */\npackage co.yixiang.yshop.framework.common.validation;\n"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-common/src/test/java/co/yixiang/yshop/framework/common/util/collection/CollectionUtilsTest.java",
"chars": 1786,
"preview": "package co.yixiang.yshop.framework.common.util.collection;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimport"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/pom.xml",
"chars": 1806,
"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": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/config/YshopDataPermissionAutoConfiguration.java",
"chars": 1785,
"preview": "package co.yixiang.yshop.framework.datapermission.config;\n\nimport co.yixiang.yshop.framework.datapermission.core.aop.Dat"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/config/YshopDeptDataPermissionAutoConfiguration.java",
"chars": 1373,
"preview": "package co.yixiang.yshop.framework.datapermission.config;\n\nimport co.yixiang.yshop.framework.datapermission.core.rule.de"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/core/annotation/DataPermission.java",
"chars": 769,
"preview": "package co.yixiang.yshop.framework.datapermission.core.annotation;\n\nimport co.yixiang.yshop.framework.datapermission.cor"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/core/aop/DataPermissionAnnotationAdvisor.java",
"chars": 1284,
"preview": "package co.yixiang.yshop.framework.datapermission.core.aop;\n\nimport co.yixiang.yshop.framework.datapermission.core.annot"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/core/aop/DataPermissionAnnotationInterceptor.java",
"chars": 2694,
"preview": "package co.yixiang.yshop.framework.datapermission.core.aop;\n\nimport co.yixiang.yshop.framework.datapermission.core.annot"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/core/aop/DataPermissionContextHolder.java",
"chars": 1643,
"preview": "package co.yixiang.yshop.framework.datapermission.core.aop;\n\nimport co.yixiang.yshop.framework.datapermission.core.annot"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/core/db/DataPermissionDatabaseInterceptor.java",
"chars": 22842,
"preview": "package co.yixiang.yshop.framework.datapermission.core.db;\n\nimport cn.hutool.core.collection.CollUtil;\nimport co.yixiang"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/core/rule/DataPermissionRule.java",
"chars": 804,
"preview": "package co.yixiang.yshop.framework.datapermission.core.rule;\n\nimport com.baomidou.mybatisplus.core.metadata.TableInfoHel"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/core/rule/DataPermissionRuleFactory.java",
"chars": 565,
"preview": "package co.yixiang.yshop.framework.datapermission.core.rule;\n\nimport java.util.List;\n\n/**\n * {@link DataPermissionRule} "
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/core/rule/DataPermissionRuleFactoryImpl.java",
"chars": 2094,
"preview": "package co.yixiang.yshop.framework.datapermission.core.rule;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.hutoo"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/core/rule/dept/DeptDataPermissionRule.java",
"chars": 8028,
"preview": "package co.yixiang.yshop.framework.datapermission.core.rule.dept;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn."
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/core/rule/dept/DeptDataPermissionRuleCustomizer.java",
"chars": 517,
"preview": "package co.yixiang.yshop.framework.datapermission.core.rule.dept;\n\n/**\n * {@link DeptDataPermissionRule} 的自定义配置接口\n *\n * "
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/core/rule/dept/package-info.java",
"chars": 109,
"preview": "/**\n * 基于部门的数据权限规则\n *\n * @author yshop\n */\npackage co.yixiang.yshop.framework.datapermission.core.rule.dept;\n"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/java/co/yixiang/yshop/framework/datapermission/core/util/DataPermissionUtils.java",
"chars": 1745,
"preview": "package co.yixiang.yshop.framework.datapermission.core.util;\n\nimport co.yixiang.yshop.framework.datapermission.core.anno"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports",
"chars": 175,
"preview": "co.yixiang.yshop.framework.datapermission.config.YshopDataPermissionAutoConfiguration\nco.yixiang.yshop.framework.dataper"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/test/java/co/yixiang/yshop/framework/datapermission/core/aop/DataPermissionAnnotationInterceptorTest.java",
"chars": 3165,
"preview": "package co.yixiang.yshop.framework.datapermission.core.aop;\n\nimport cn.hutool.core.collection.CollUtil;\nimport co.yixian"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/test/java/co/yixiang/yshop/framework/datapermission/core/aop/DataPermissionContextHolderTest.java",
"chars": 2170,
"preview": "package co.yixiang.yshop.framework.datapermission.core.aop;\n\nimport co.yixiang.yshop.framework.datapermission.core.annot"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/test/java/co/yixiang/yshop/framework/datapermission/core/db/DataPermissionDatabaseInterceptorTest.java",
"chars": 7588,
"preview": "package co.yixiang.yshop.framework.datapermission.core.db;\n\nimport co.yixiang.yshop.framework.common.util.collection.Set"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/test/java/co/yixiang/yshop/framework/datapermission/core/db/DataPermissionDatabaseInterceptorTest2.java",
"chars": 25072,
"preview": "package co.yixiang.yshop.framework.datapermission.core.db;\n\nimport co.yixiang.yshop.framework.datapermission.core.rule.D"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/test/java/co/yixiang/yshop/framework/datapermission/core/rule/DataPermissionRuleFactoryImplTest.java",
"chars": 4416,
"preview": "package co.yixiang.yshop.framework.datapermission.core.rule;\n\nimport co.yixiang.yshop.framework.datapermission.core.anno"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/test/java/co/yixiang/yshop/framework/datapermission/core/rule/dept/DeptDataPermissionRuleTest.java",
"chars": 11196,
"preview": "package co.yixiang.yshop.framework.datapermission.core.rule.dept;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn."
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-data-permission/src/test/java/co/yixiang/yshop/framework/datapermission/core/util/DataPermissionUtilsTest.java",
"chars": 439,
"preview": "package co.yixiang.yshop.framework.datapermission.core.util;\n\nimport co.yixiang.yshop.framework.datapermission.core.aop."
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-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": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-ip/src/main/java/co/yixiang/yshop/framework/ip/core/Area.java",
"chars": 839,
"preview": "package co.yixiang.yshop.framework.ip.core;\n\nimport co.yixiang.yshop.framework.ip.core.enums.AreaTypeEnum;\nimport lombok"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-ip/src/main/java/co/yixiang/yshop/framework/ip/core/enums/AreaTypeEnum.java",
"chars": 719,
"preview": "package co.yixiang.yshop.framework.ip.core.enums;\n\nimport co.yixiang.yshop.framework.common.core.IntArrayValuable;\nimpor"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-ip/src/main/java/co/yixiang/yshop/framework/ip/core/utils/AreaUtils.java",
"chars": 6063,
"preview": "package co.yixiang.yshop.framework.ip.core.utils;\n\nimport cn.hutool.core.io.resource.ResourceUtil;\nimport cn.hutool.core"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-ip/src/main/java/co/yixiang/yshop/framework/ip/core/utils/IPUtils.java",
"chars": 2015,
"preview": "package co.yixiang.yshop.framework.ip.core.utils;\n\nimport cn.hutool.core.io.resource.ResourceUtil;\nimport co.yixiang.ysh"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-ip/src/main/resources/area.csv",
"chars": 73202,
"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": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-ip/src/test/java/co/yixiang/yshop/framework/ip/core/utils/AreaUtilsTest.java",
"chars": 947,
"preview": "package co.yixiang.yshop.framework.ip.core.utils;\n\n\nimport co.yixiang.yshop.framework.ip.core.Area;\nimport co.yixiang.ys"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-ip/src/test/java/co/yixiang/yshop/framework/ip/core/utils/IPUtilsTest.java",
"chars": 1248,
"preview": "package co.yixiang.yshop.framework.ip.core.utils;\n\nimport co.yixiang.yshop.framework.ip.core.Area;\nimport org.junit.jupi"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/pom.xml",
"chars": 2768,
"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": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/config/TenantProperties.java",
"chars": 819,
"preview": "package co.yixiang.yshop.framework.tenant.config;\n\nimport lombok.Data;\nimport org.springframework.boot.context.propertie"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/config/YshopTenantAutoConfiguration.java",
"chars": 6456,
"preview": "package co.yixiang.yshop.framework.tenant.config;\n\nimport co.yixiang.yshop.framework.common.enums.WebFilterOrderEnum;\nim"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/aop/TenantIgnore.java",
"chars": 412,
"preview": "package co.yixiang.yshop.framework.tenant.core.aop;\n\nimport java.lang.annotation.*;\n\n/**\n * 忽略租户,标记指定方法不进行租户的自动过滤\n *\n * "
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/aop/TenantIgnoreAspect.java",
"chars": 1027,
"preview": "package co.yixiang.yshop.framework.tenant.core.aop;\n\nimport co.yixiang.yshop.framework.tenant.core.context.TenantContext"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/context/TenantContextHolder.java",
"chars": 1432,
"preview": "package co.yixiang.yshop.framework.tenant.core.context;\n\nimport co.yixiang.yshop.framework.common.enums.DocumentEnum;\nim"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/db/TenantBaseDO.java",
"chars": 375,
"preview": "package co.yixiang.yshop.framework.tenant.core.db;\n\nimport co.yixiang.yshop.framework.mybatis.core.dataobject.BaseDO;\nim"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/db/TenantDatabaseInterceptor.java",
"chars": 1395,
"preview": "package co.yixiang.yshop.framework.tenant.core.db;\n\nimport cn.hutool.core.collection.CollUtil;\nimport co.yixiang.yshop.f"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/job/TenantJob.java",
"chars": 335,
"preview": "package co.yixiang.yshop.framework.tenant.core.job;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotatio"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/job/TenantJobAspect.java",
"chars": 1760,
"preview": "package co.yixiang.yshop.framework.tenant.core.job;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.hutool.core.ex"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/mq/kafka/TenantKafkaEnvironmentPostProcessor.java",
"chars": 1439,
"preview": "package co.yixiang.yshop.framework.tenant.core.mq.kafka;\n\nimport cn.hutool.core.util.StrUtil;\nimport lombok.extern.slf4j"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/mq/kafka/TenantKafkaProducerInterceptor.java",
"chars": 1599,
"preview": "package co.yixiang.yshop.framework.tenant.core.mq.kafka;\n\nimport cn.hutool.core.util.ReflectUtil;\nimport co.yixiang.ysho"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/mq/rabbitmq/TenantRabbitMQInitializer.java",
"chars": 729,
"preview": "package co.yixiang.yshop.framework.tenant.core.mq.rabbitmq;\n\nimport org.springframework.amqp.rabbit.core.RabbitTemplate;"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/mq/rabbitmq/TenantRabbitMQMessagePostProcessor.java",
"chars": 1187,
"preview": "package co.yixiang.yshop.framework.tenant.core.mq.rabbitmq;\n\nimport co.yixiang.yshop.framework.tenant.core.context.Tenan"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/mq/redis/TenantRedisMessageInterceptor.java",
"chars": 1446,
"preview": "package co.yixiang.yshop.framework.tenant.core.mq.redis;\n\nimport cn.hutool.core.util.StrUtil;\nimport co.yixiang.yshop.fr"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/mq/rocketmq/TenantRocketMQConsumeMessageHook.java",
"chars": 1552,
"preview": "package co.yixiang.yshop.framework.tenant.core.mq.rocketmq;\n\nimport cn.hutool.core.lang.Assert;\nimport cn.hutool.core.ut"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/mq/rocketmq/TenantRocketMQInitializer.java",
"chars": 2007,
"preview": "package co.yixiang.yshop.framework.tenant.core.mq.rocketmq;\n\nimport org.apache.rocketmq.client.consumer.DefaultMQPushCon"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/mq/rocketmq/TenantRocketMQSendMessageHook.java",
"chars": 1071,
"preview": "package co.yixiang.yshop.framework.tenant.core.mq.rocketmq;\n\nimport co.yixiang.yshop.framework.tenant.core.context.Tenan"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/redis/TenantRedisCacheManager.java",
"chars": 1242,
"preview": "package co.yixiang.yshop.framework.tenant.core.redis;\n\nimport co.yixiang.yshop.framework.redis.core.TimeoutRedisCacheMan"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/security/TenantSecurityWebFilter.java",
"chars": 4862,
"preview": "package co.yixiang.yshop.framework.tenant.core.security;\n\nimport cn.hutool.core.collection.CollUtil;\nimport co.yixiang.y"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/service/TenantFrameworkService.java",
"chars": 371,
"preview": "package co.yixiang.yshop.framework.tenant.core.service;\n\nimport java.util.List;\n\n/**\n * Tenant 框架 Service 接口,定义获取租户信息\n *"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/service/TenantFrameworkServiceImpl.java",
"chars": 2191,
"preview": "package co.yixiang.yshop.framework.tenant.core.service;\n\nimport co.yixiang.yshop.framework.common.exception.ServiceExcep"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/util/TenantUtils.java",
"chars": 2487,
"preview": "package co.yixiang.yshop.framework.tenant.core.util;\n\nimport co.yixiang.yshop.framework.tenant.core.context.TenantContex"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/co/yixiang/yshop/framework/tenant/core/web/TenantContextWebFilter.java",
"chars": 1180,
"preview": "package co.yixiang.yshop.framework.tenant.core.web;\n\nimport co.yixiang.yshop.framework.tenant.core.context.TenantContext"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/java/org/springframework/messaging/handler/invocation/InvocableHandlerMethod.java",
"chars": 10453,
"preview": "/*\n * Copyright 2002-2023 the original author or authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"Lic"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports",
"chars": 69,
"preview": "co.yixiang.yshop.framework.tenant.config.YshopTenantAutoConfiguration"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-biz-tenant/src/main/resources/META-INF/spring.factories",
"chars": 142,
"preview": "org.springframework.boot.env.EnvironmentPostProcessor=\\\n co.yixiang.yshop.framework.tenant.core.mq.kafka.TenantKafkaEnv"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/pom.xml",
"chars": 2527,
"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": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/src/main/java/co/yixiang/yshop/framework/dict/config/YshopDictAutoConfiguration.java",
"chars": 579,
"preview": "package co.yixiang.yshop.framework.dict.config;\n\nimport co.yixiang.yshop.framework.dict.core.DictFrameworkUtils;\nimport "
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/src/main/java/co/yixiang/yshop/framework/dict/core/DictFrameworkUtils.java",
"chars": 3466,
"preview": "package co.yixiang.yshop.framework.dict.core;\n\nimport cn.hutool.core.util.ObjectUtil;\nimport co.yixiang.yshop.framework."
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/src/main/java/co/yixiang/yshop/framework/excel/core/annotations/DictFormat.java",
"chars": 364,
"preview": "package co.yixiang.yshop.framework.excel.core.annotations;\n\nimport java.lang.annotation.*;\n\n/**\n * 字典格式化\n *\n * 实现将字典数据的值"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/src/main/java/co/yixiang/yshop/framework/excel/core/annotations/ExcelColumnSelect.java",
"chars": 472,
"preview": "package co.yixiang.yshop.framework.excel.core.annotations;\n\nimport java.lang.annotation.*;\n\n/**\n * 给 Excel 列添加下拉选择数据\n *\n"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/src/main/java/co/yixiang/yshop/framework/excel/core/convert/AreaConvert.java",
"chars": 1486,
"preview": "package co.yixiang.yshop.framework.excel.core.convert;\n\nimport cn.hutool.core.convert.Convert;\nimport co.yixiang.yshop.f"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/src/main/java/co/yixiang/yshop/framework/excel/core/convert/DictConvert.java",
"chars": 2568,
"preview": "package co.yixiang.yshop.framework.excel.core.convert;\n\nimport cn.hutool.core.convert.Convert;\nimport co.yixiang.yshop.f"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/src/main/java/co/yixiang/yshop/framework/excel/core/convert/JsonConvert.java",
"chars": 1066,
"preview": "package co.yixiang.yshop.framework.excel.core.convert;\n\nimport co.yixiang.yshop.framework.common.util.json.JsonUtils;\nim"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/src/main/java/co/yixiang/yshop/framework/excel/core/convert/MoneyConvert.java",
"chars": 1161,
"preview": "package co.yixiang.yshop.framework.excel.core.convert;\n\nimport com.alibaba.excel.converters.Converter;\nimport com.alibab"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/src/main/java/co/yixiang/yshop/framework/excel/core/function/ExcelColumnSelectFunction.java",
"chars": 398,
"preview": "package co.yixiang.yshop.framework.excel.core.function;\n\nimport java.util.List;\n\n/**\n * Excel 列下拉数据源获取接口\n *\n * 为什么不直接解析字"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/src/main/java/co/yixiang/yshop/framework/excel/core/handler/SelectSheetWriteHandler.java",
"chars": 6730,
"preview": "package co.yixiang.yshop.framework.excel.core.handler;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.hutool.core"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/src/main/java/co/yixiang/yshop/framework/excel/core/util/ExcelUtils.java",
"chars": 2123,
"preview": "package co.yixiang.yshop.framework.excel.core.util;\n\nimport co.yixiang.yshop.framework.excel.core.handler.SelectSheetWri"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports",
"chars": 65,
"preview": "co.yixiang.yshop.framework.dict.config.YshopDictAutoConfiguration"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-excel/src/test/java/co/yixiang/yshop/framework/dict/core/util/DictFrameworkUtilsTest.java",
"chars": 1854,
"preview": "package co.yixiang.yshop.framework.dict.core.util;\n\nimport co.yixiang.yshop.framework.common.enums.CommonStatusEnum;\nimp"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-job/pom.xml",
"chars": 1314,
"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": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-job/src/main/java/co/yixiang/yshop/framework/quartz/config/YshopAsyncAutoConfiguration.java",
"chars": 1202,
"preview": "package co.yixiang.yshop.framework.quartz.config;\n\nimport com.alibaba.ttl.TtlRunnable;\nimport org.springframework.beans."
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-job/src/main/java/co/yixiang/yshop/framework/quartz/config/YshopQuartzAutoConfiguration.java",
"chars": 825,
"preview": "package co.yixiang.yshop.framework.quartz.config;\n\nimport co.yixiang.yshop.framework.quartz.core.scheduler.SchedulerMana"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-job/src/main/java/co/yixiang/yshop/framework/quartz/core/enums/JobDataKeyEnum.java",
"chars": 246,
"preview": "package co.yixiang.yshop.framework.quartz.core.enums;\n\n/**\n * Quartz Job Data 的 key 枚举\n */\npublic enum JobDataKeyEnum {\n"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-job/src/main/java/co/yixiang/yshop/framework/quartz/core/handler/JobHandler.java",
"chars": 283,
"preview": "package co.yixiang.yshop.framework.quartz.core.handler;\n\n/**\n * 任务处理器\n *\n * @author yshop\n */\npublic interface JobHandle"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-job/src/main/java/co/yixiang/yshop/framework/quartz/core/handler/JobHandlerInvoker.java",
"chars": 4554,
"preview": "package co.yixiang.yshop.framework.quartz.core.handler;\n\nimport cn.hutool.core.date.LocalDateTimeUtil;\nimport cn.hutool."
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-job/src/main/java/co/yixiang/yshop/framework/quartz/core/scheduler/SchedulerManager.java",
"chars": 5319,
"preview": "package co.yixiang.yshop.framework.quartz.core.scheduler;\n\nimport co.yixiang.yshop.framework.quartz.core.enums.JobDataKe"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-job/src/main/java/co/yixiang/yshop/framework/quartz/core/service/JobLogFrameworkService.java",
"chars": 1406,
"preview": "package co.yixiang.yshop.framework.quartz.core.service;\n\nimport jakarta.validation.constraints.NotEmpty;\nimport jakarta."
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-job/src/main/java/co/yixiang/yshop/framework/quartz/core/util/CronUtils.java",
"chars": 1430,
"preview": "package co.yixiang.yshop.framework.quartz.core.util;\n\nimport cn.hutool.core.date.LocalDateTimeUtil;\nimport org.quartz.Cr"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports",
"chars": 138,
"preview": "co.yixiang.yshop.framework.quartz.config.YshopQuartzAutoConfiguration\nco.yixiang.yshop.framework.quartz.config.YshopAsyn"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-monitor/pom.xml",
"chars": 2589,
"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": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-monitor/src/main/java/co/yixiang/yshop/framework/tracer/config/TracerProperties.java",
"chars": 270,
"preview": "package co.yixiang.yshop.framework.tracer.config;\n\nimport lombok.Data;\nimport org.springframework.boot.context.propertie"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-monitor/src/main/java/co/yixiang/yshop/framework/tracer/config/YshopMetricsAutoConfiguration.java",
"chars": 1071,
"preview": "package co.yixiang.yshop.framework.tracer.config;\n\nimport io.micrometer.core.instrument.MeterRegistry;\nimport org.spring"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-monitor/src/main/java/co/yixiang/yshop/framework/tracer/config/YshopTracerAutoConfiguration.java",
"chars": 1920,
"preview": "package co.yixiang.yshop.framework.tracer.config;\n\nimport co.yixiang.yshop.framework.common.enums.WebFilterOrderEnum;\nim"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-monitor/src/main/java/co/yixiang/yshop/framework/tracer/core/annotation/BizTrace.java",
"chars": 714,
"preview": "package co.yixiang.yshop.framework.tracer.core.annotation;\n\nimport java.lang.annotation.*;\n\n/**\n * 打印业务编号 / 业务类型注解\n *\n *"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-monitor/src/main/java/co/yixiang/yshop/framework/tracer/core/aop/BizTraceAspect.java",
"chars": 2599,
"preview": "package co.yixiang.yshop.framework.tracer.core.aop;\n\nimport cn.hutool.core.map.MapUtil;\nimport cn.hutool.core.util.StrUt"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-monitor/src/main/java/co/yixiang/yshop/framework/tracer/core/filter/TraceFilter.java",
"chars": 964,
"preview": "package co.yixiang.yshop.framework.tracer.core.filter;\n\nimport co.yixiang.yshop.framework.common.util.monitor.TracerUtil"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-monitor/src/main/java/co/yixiang/yshop/framework/tracer/core/util/TracerFrameworkUtils.java",
"chars": 1336,
"preview": "package co.yixiang.yshop.framework.tracer.core.util;\n\nimport io.opentracing.Span;\nimport io.opentracing.tag.Tags;\n\nimpor"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-monitor/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports",
"chars": 140,
"preview": "co.yixiang.yshop.framework.tracer.config.YshopTracerAutoConfiguration\nco.yixiang.yshop.framework.tracer.config.YshopMetr"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/pom.xml",
"chars": 1550,
"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": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/src/main/java/co/yixiang/yshop/framework/mq/rabbitmq/config/YshopRabbitMQAutoConfiguration.java",
"chars": 834,
"preview": "package co.yixiang.yshop.framework.mq.rabbitmq.config;\n\nimport lombok.extern.slf4j.Slf4j;\nimport org.springframework.amq"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/src/main/java/co/yixiang/yshop/framework/mq/redis/config/YshopRedisMQConsumerAutoConfiguration.java",
"chars": 7781,
"preview": "package co.yixiang.yshop.framework.mq.redis.config;\n\nimport cn.hutool.core.map.MapUtil;\nimport cn.hutool.core.util.StrUt"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/src/main/java/co/yixiang/yshop/framework/mq/redis/config/YshopRedisMQProducerAutoConfiguration.java",
"chars": 1073,
"preview": "package co.yixiang.yshop.framework.mq.redis.config;\n\nimport co.yixiang.yshop.framework.mq.redis.core.RedisMQTemplate;\nim"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/src/main/java/co/yixiang/yshop/framework/mq/redis/core/RedisMQTemplate.java",
"chars": 2586,
"preview": "package co.yixiang.yshop.framework.mq.redis.core;\n\nimport co.yixiang.yshop.framework.common.util.json.JsonUtils;\nimport "
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/src/main/java/co/yixiang/yshop/framework/mq/redis/core/interceptor/RedisMessageInterceptor.java",
"chars": 599,
"preview": "package co.yixiang.yshop.framework.mq.redis.core.interceptor;\n\nimport co.yixiang.yshop.framework.mq.redis.core.message.A"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/src/main/java/co/yixiang/yshop/framework/mq/redis/core/job/RedisPendingMessageResendJob.java",
"chars": 3996,
"preview": "package co.yixiang.yshop.framework.mq.redis.core.job;\n\nimport cn.hutool.core.collection.CollUtil;\nimport co.yixiang.ysho"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/src/main/java/co/yixiang/yshop/framework/mq/redis/core/message/AbstractRedisMessage.java",
"chars": 488,
"preview": "package co.yixiang.yshop.framework.mq.redis.core.message;\n\nimport lombok.Data;\n\nimport java.util.HashMap;\nimport java.ut"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/src/main/java/co/yixiang/yshop/framework/mq/redis/core/pubsub/AbstractRedisChannelMessage.java",
"chars": 549,
"preview": "package co.yixiang.yshop.framework.mq.redis.core.pubsub;\n\nimport co.yixiang.yshop.framework.mq.redis.core.message.Abstra"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/src/main/java/co/yixiang/yshop/framework/mq/redis/core/pubsub/AbstractRedisChannelMessageListener.java",
"chars": 2947,
"preview": "package co.yixiang.yshop.framework.mq.redis.core.pubsub;\n\nimport cn.hutool.core.util.TypeUtil;\nimport co.yixiang.yshop.f"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/src/main/java/co/yixiang/yshop/framework/mq/redis/core/stream/AbstractRedisStreamMessage.java",
"chars": 518,
"preview": "package co.yixiang.yshop.framework.mq.redis.core.stream;\n\nimport co.yixiang.yshop.framework.mq.redis.core.message.Abstra"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/src/main/java/co/yixiang/yshop/framework/mq/redis/core/stream/AbstractRedisStreamMessageListener.java",
"chars": 3417,
"preview": "package co.yixiang.yshop.framework.mq.redis.core.stream;\n\nimport cn.hutool.core.util.TypeUtil;\nimport co.yixiang.yshop.f"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports",
"chars": 238,
"preview": "co.yixiang.yshop.framework.mq.redis.config.YshopRedisMQProducerAutoConfiguration\nco.yixiang.yshop.framework.mq.redis.con"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/pom.xml",
"chars": 3306,
"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": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/datasource/config/YshopDataSourceAutoConfiguration.java",
"chars": 1796,
"preview": "package co.yixiang.yshop.framework.datasource.config;\n\nimport co.yixiang.yshop.framework.datasource.core.filter.DruidAdR"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/datasource/core/enums/DataSourceEnum.java",
"chars": 554,
"preview": "package co.yixiang.yshop.framework.datasource.core.enums;\n\n/**\n * 对应于多数据源中不同数据源配置\n *\n * 通过在方法上,使用 {@link com.baomidou.dy"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/datasource/core/filter/DruidAdRemoveFilter.java",
"chars": 1182,
"preview": "package co.yixiang.yshop.framework.datasource.core.filter;\n\nimport com.alibaba.druid.util.Utils;\nimport org.springframew"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/config/IdTypeEnvironmentPostProcessor.java",
"chars": 3997,
"preview": "package co.yixiang.yshop.framework.mybatis.config;\n\nimport cn.hutool.core.util.StrUtil;\nimport co.yixiang.yshop.framewor"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/config/YshopMybatisAutoConfiguration.java",
"chars": 2767,
"preview": "package co.yixiang.yshop.framework.mybatis.config;\n\nimport cn.hutool.core.util.StrUtil;\nimport co.yixiang.yshop.framewor"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/core/dataobject/BaseDO.java",
"chars": 1463,
"preview": "package co.yixiang.yshop.framework.mybatis.core.dataobject;\n\nimport com.baomidou.mybatisplus.annotation.FieldFill;\nimpor"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/core/enums/SqlConstants.java",
"chars": 322,
"preview": "package co.yixiang.yshop.framework.mybatis.core.enums;\n\nimport com.baomidou.mybatisplus.annotation.DbType;\n\n/**\n * SQL相关"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/core/handler/DefaultDBFieldHandler.java",
"chars": 2197,
"preview": "package co.yixiang.yshop.framework.mybatis.core.handler;\n\nimport co.yixiang.yshop.framework.mybatis.core.dataobject.Base"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/core/mapper/BaseMapperX.java",
"chars": 7703,
"preview": "package co.yixiang.yshop.framework.mybatis.core.mapper;\n\nimport cn.hutool.core.collection.CollUtil;\nimport co.yixiang.ys"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/core/query/LambdaQueryWrapperX.java",
"chars": 4264,
"preview": "package co.yixiang.yshop.framework.mybatis.core.query;\n\nimport cn.hutool.core.util.ArrayUtil;\nimport cn.hutool.core.util"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/core/query/MPJLambdaWrapperX.java",
"chars": 9330,
"preview": "package co.yixiang.yshop.framework.mybatis.core.query;\n\nimport cn.hutool.core.util.ArrayUtil;\nimport cn.hutool.core.util"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/core/query/QueryWrapperX.java",
"chars": 4889,
"preview": "package co.yixiang.yshop.framework.mybatis.core.query;\n\nimport cn.hutool.core.lang.Assert;\nimport co.yixiang.yshop.frame"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/core/type/EncryptTypeHandler.java",
"chars": 2226,
"preview": "package co.yixiang.yshop.framework.mybatis.core.type;\n\nimport cn.hutool.core.lang.Assert;\nimport cn.hutool.crypto.Secure"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/core/type/IntegerListTypeHandler.java",
"chars": 1704,
"preview": "package co.yixiang.yshop.framework.mybatis.core.type;\n\nimport cn.hutool.core.collection.CollUtil;\nimport co.yixiang.ysho"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/core/type/JsonLongSetTypeHandler.java",
"chars": 903,
"preview": "package co.yixiang.yshop.framework.mybatis.core.type;\n\nimport co.yixiang.yshop.framework.common.util.json.JsonUtils;\nimp"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/core/type/LongListTypeHandler.java",
"chars": 1694,
"preview": "package co.yixiang.yshop.framework.mybatis.core.type;\n\nimport cn.hutool.core.collection.CollUtil;\nimport co.yixiang.ysho"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/core/type/StringListTypeHandler.java",
"chars": 1708,
"preview": "package co.yixiang.yshop.framework.mybatis.core.type;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.hutool.core."
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/core/util/JdbcUtils.java",
"chars": 917,
"preview": "package co.yixiang.yshop.framework.mybatis.core.util;\n\nimport com.baomidou.mybatisplus.annotation.DbType;\n\nimport java.s"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/mybatis/core/util/MyBatisUtils.java",
"chars": 2927,
"preview": "package co.yixiang.yshop.framework.mybatis.core.util;\n\nimport cn.hutool.core.collection.CollectionUtil;\nimport co.yixian"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/translate/config/YshopTranslateAutoConfiguration.java",
"chars": 625,
"preview": "package co.yixiang.yshop.framework.translate.config;\n\nimport co.yixiang.yshop.framework.translate.core.TranslateUtils;\ni"
},
{
"path": "yshop-drink-boot3/yshop-framework/yshop-spring-boot-starter-mybatis/src/main/java/co/yixiang/yshop/framework/translate/core/TranslateUtils.java",
"chars": 770,
"preview": "package co.yixiang.yshop.framework.translate.core;\n\nimport cn.hutool.core.collection.CollUtil;\nimport com.fhs.core.trans"
}
]
// ... and 3000 more files (download for full content)
About this extraction
This page contains the full source code of the guchengwuyue/supplierShop GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 3200 files (31.5 MB), approximately 4.5M tokens, and a symbol index with 8761 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.