├── .gitignore ├── LICENSE ├── README.md ├── image └── 123.png ├── mysql_script ├── ruoyi-bpm.sql ├── ruoyi-crm.sql ├── ruoyi-erp.sql ├── ruoyi-jimu-report.sql ├── ruoyi-mall.sql ├── ruoyi-member.sql ├── ruoyi-pay.sql └── ruoyi-vue-pro.sql ├── pom.xml ├── yudao-dependencies └── pom.xml ├── yudao-example ├── pom.xml ├── yudao-sso-demo-by-code │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── cn │ │ │ └── iocoder │ │ │ └── yudao │ │ │ └── ssodemo │ │ │ ├── SSODemoApplication.java │ │ │ ├── client │ │ │ ├── OAuth2Client.java │ │ │ ├── UserClient.java │ │ │ └── dto │ │ │ │ ├── CommonResult.java │ │ │ │ ├── oauth2 │ │ │ │ ├── OAuth2AccessTokenRespDTO.java │ │ │ │ └── OAuth2CheckTokenRespDTO.java │ │ │ │ └── user │ │ │ │ ├── UserInfoRespDTO.java │ │ │ │ └── UserUpdateReqDTO.java │ │ │ ├── controller │ │ │ ├── AuthController.java │ │ │ └── UserController.java │ │ │ └── framework │ │ │ ├── config │ │ │ └── SecurityConfiguration.java │ │ │ └── core │ │ │ ├── LoginUser.java │ │ │ ├── filter │ │ │ └── TokenAuthenticationFilter.java │ │ │ ├── handler │ │ │ ├── AccessDeniedHandlerImpl.java │ │ │ └── AuthenticationEntryPointImpl.java │ │ │ └── util │ │ │ ├── SecurityUtils.java │ │ │ └── ServletUtils.java │ │ └── resources │ │ ├── application.yaml │ │ └── static │ │ ├── callback.html │ │ └── index.html └── yudao-sso-demo-by-password │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── ssodemo │ │ ├── SSODemoApplication.java │ │ ├── client │ │ ├── OAuth2Client.java │ │ ├── UserClient.java │ │ └── dto │ │ │ ├── CommonResult.java │ │ │ ├── oauth2 │ │ │ ├── OAuth2AccessTokenRespDTO.java │ │ │ └── OAuth2CheckTokenRespDTO.java │ │ │ └── user │ │ │ ├── UserInfoRespDTO.java │ │ │ └── UserUpdateReqDTO.java │ │ ├── controller │ │ ├── AuthController.java │ │ └── UserController.java │ │ └── framework │ │ ├── config │ │ └── SecurityConfiguration.java │ │ └── core │ │ ├── LoginUser.java │ │ ├── filter │ │ └── TokenAuthenticationFilter.java │ │ ├── handler │ │ ├── AccessDeniedHandlerImpl.java │ │ └── AuthenticationEntryPointImpl.java │ │ └── util │ │ ├── SecurityUtils.java │ │ └── ServletUtils.java │ └── resources │ ├── application.yaml │ └── static │ ├── index.html │ └── login.html ├── yudao-framework ├── pom.xml ├── yudao-common │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── cn │ │ │ └── iocoder │ │ │ └── yudao │ │ │ └── framework │ │ │ └── common │ │ │ ├── core │ │ │ ├── IntArrayValuable.java │ │ │ └── KeyValue.java │ │ │ ├── enums │ │ │ ├── CommonStatusEnum.java │ │ │ ├── DateIntervalEnum.java │ │ │ ├── DocumentEnum.java │ │ │ ├── TerminalEnum.java │ │ │ ├── UserTypeEnum.java │ │ │ └── WebFilterOrderEnum.java │ │ │ ├── exception │ │ │ ├── ErrorCode.java │ │ │ ├── ServerException.java │ │ │ ├── ServiceException.java │ │ │ ├── enums │ │ │ │ ├── GlobalErrorCodeConstants.java │ │ │ │ └── ServiceErrorCodeRange.java │ │ │ └── util │ │ │ │ └── ServiceExceptionUtil.java │ │ │ ├── package-info.java │ │ │ ├── pojo │ │ │ ├── CommonResult.java │ │ │ ├── PageParam.java │ │ │ ├── PageResult.java │ │ │ ├── SortablePageParam.java │ │ │ └── SortingField.java │ │ │ ├── util │ │ │ ├── cache │ │ │ │ └── CacheUtils.java │ │ │ ├── collection │ │ │ │ ├── ArrayUtils.java │ │ │ │ ├── CollectionUtils.java │ │ │ │ ├── MapUtils.java │ │ │ │ └── SetUtils.java │ │ │ ├── date │ │ │ │ ├── DateUtils.java │ │ │ │ └── LocalDateTimeUtils.java │ │ │ ├── http │ │ │ │ └── HttpUtils.java │ │ │ ├── io │ │ │ │ ├── FileUtils.java │ │ │ │ └── IoUtils.java │ │ │ ├── json │ │ │ │ └── JsonUtils.java │ │ │ ├── monitor │ │ │ │ └── TracerUtils.java │ │ │ ├── number │ │ │ │ ├── MoneyUtils.java │ │ │ │ └── NumberUtils.java │ │ │ ├── object │ │ │ │ ├── BeanUtils.java │ │ │ │ ├── ObjectUtils.java │ │ │ │ └── PageUtils.java │ │ │ ├── package-info.java │ │ │ ├── servlet │ │ │ │ └── ServletUtils.java │ │ │ ├── spring │ │ │ │ ├── SpringExpressionUtils.java │ │ │ │ └── SpringUtils.java │ │ │ ├── string │ │ │ │ └── StrUtils.java │ │ │ └── validation │ │ │ │ └── ValidationUtils.java │ │ │ └── validation │ │ │ ├── InEnum.java │ │ │ ├── InEnumCollectionValidator.java │ │ │ ├── InEnumValidator.java │ │ │ ├── Mobile.java │ │ │ ├── MobileValidator.java │ │ │ ├── Telephone.java │ │ │ ├── TelephoneValidator.java │ │ │ └── package-info.java │ │ └── test │ │ └── java │ │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── framework │ │ └── common │ │ └── util │ │ └── collection │ │ └── CollectionUtilsTest.java ├── yudao-spring-boot-starter-biz-data-permission │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── cn │ │ │ │ └── iocoder │ │ │ │ └── yudao │ │ │ │ └── framework │ │ │ │ └── datapermission │ │ │ │ ├── config │ │ │ │ ├── YudaoDataPermissionAutoConfiguration.java │ │ │ │ └── YudaoDeptDataPermissionAutoConfiguration.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 │ │ │ │ └── package-info.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── spring │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test │ │ └── java │ │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── framework │ │ └── datapermission │ │ └── core │ │ ├── aop │ │ ├── DataPermissionAnnotationInterceptorTest.java │ │ └── DataPermissionContextHolderTest.java │ │ ├── db │ │ ├── DataPermissionDatabaseInterceptorTest.java │ │ └── DataPermissionDatabaseInterceptorTest2.java │ │ ├── rule │ │ ├── DataPermissionRuleFactoryImplTest.java │ │ └── dept │ │ │ └── DeptDataPermissionRuleTest.java │ │ └── util │ │ └── DataPermissionUtilsTest.java ├── yudao-spring-boot-starter-biz-ip │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── cn │ │ │ │ └── iocoder │ │ │ │ └── yudao │ │ │ │ └── framework │ │ │ │ └── ip │ │ │ │ ├── core │ │ │ │ ├── Area.java │ │ │ │ ├── enums │ │ │ │ │ └── AreaTypeEnum.java │ │ │ │ └── utils │ │ │ │ │ ├── AreaUtils.java │ │ │ │ │ └── IPUtils.java │ │ │ │ └── package-info.java │ │ └── resources │ │ │ ├── area.csv │ │ │ └── ip2region.xdb │ │ └── test │ │ └── java │ │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── framework │ │ └── ip │ │ └── core │ │ └── utils │ │ ├── AreaUtilsTest.java │ │ └── IPUtilsTest.java ├── yudao-spring-boot-starter-biz-tenant │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ ├── cn │ │ │ └── iocoder │ │ │ │ └── yudao │ │ │ │ └── framework │ │ │ │ └── tenant │ │ │ │ ├── config │ │ │ │ ├── TenantProperties.java │ │ │ │ └── YudaoTenantAutoConfiguration.java │ │ │ │ ├── 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 │ │ │ │ └── package-info.java │ │ └── org │ │ │ └── springframework │ │ │ └── messaging │ │ │ └── handler │ │ │ └── invocation │ │ │ └── InvocableHandlerMethod.java │ │ └── resources │ │ └── META-INF │ │ ├── spring.factories │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── yudao-spring-boot-starter-excel │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── cn │ │ │ │ └── iocoder │ │ │ │ └── yudao │ │ │ │ └── framework │ │ │ │ ├── dict │ │ │ │ ├── config │ │ │ │ │ └── YudaoDictAutoConfiguration.java │ │ │ │ ├── core │ │ │ │ │ └── DictFrameworkUtils.java │ │ │ │ └── package-info.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 │ │ │ │ └── package-info.java │ │ └── resources │ │ │ └── META-INF │ │ │ └── spring │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test │ │ └── java │ │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── framework │ │ └── dict │ │ └── core │ │ └── util │ │ └── DictFrameworkUtilsTest.java ├── yudao-spring-boot-starter-job │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── cn │ │ │ └── iocoder │ │ │ └── yudao │ │ │ └── framework │ │ │ └── quartz │ │ │ ├── config │ │ │ ├── YudaoAsyncAutoConfiguration.java │ │ │ └── YudaoQuartzAutoConfiguration.java │ │ │ ├── core │ │ │ ├── enums │ │ │ │ └── JobDataKeyEnum.java │ │ │ ├── handler │ │ │ │ ├── JobHandler.java │ │ │ │ └── JobHandlerInvoker.java │ │ │ ├── scheduler │ │ │ │ └── SchedulerManager.java │ │ │ ├── service │ │ │ │ └── JobLogFrameworkService.java │ │ │ └── util │ │ │ │ └── CronUtils.java │ │ │ └── package-info.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── yudao-spring-boot-starter-monitor │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── cn │ │ │ └── iocoder │ │ │ └── yudao │ │ │ └── framework │ │ │ └── tracer │ │ │ ├── config │ │ │ ├── TracerProperties.java │ │ │ ├── YudaoMetricsAutoConfiguration.java │ │ │ └── YudaoTracerAutoConfiguration.java │ │ │ ├── core │ │ │ ├── annotation │ │ │ │ └── BizTrace.java │ │ │ ├── aop │ │ │ │ └── BizTraceAspect.java │ │ │ ├── filter │ │ │ │ └── TraceFilter.java │ │ │ └── util │ │ │ │ └── TracerFrameworkUtils.java │ │ │ └── package-info.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── yudao-spring-boot-starter-mq │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── cn │ │ │ └── iocoder │ │ │ └── yudao │ │ │ └── framework │ │ │ └── mq │ │ │ ├── package-info.java │ │ │ ├── rabbitmq │ │ │ ├── config │ │ │ │ └── YudaoRabbitMQAutoConfiguration.java │ │ │ ├── core │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ │ └── redis │ │ │ ├── config │ │ │ ├── YudaoRedisMQConsumerAutoConfiguration.java │ │ │ └── YudaoRedisMQProducerAutoConfiguration.java │ │ │ ├── core │ │ │ ├── RedisMQTemplate.java │ │ │ ├── interceptor │ │ │ │ └── RedisMessageInterceptor.java │ │ │ ├── job │ │ │ │ └── RedisPendingMessageResendJob.java │ │ │ ├── message │ │ │ │ └── AbstractRedisMessage.java │ │ │ ├── pubsub │ │ │ │ ├── AbstractRedisChannelMessage.java │ │ │ │ └── AbstractRedisChannelMessageListener.java │ │ │ └── stream │ │ │ │ ├── AbstractRedisStreamMessage.java │ │ │ │ └── AbstractRedisStreamMessageListener.java │ │ │ └── package-info.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── yudao-spring-boot-starter-mybatis │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── cn │ │ │ └── iocoder │ │ │ └── yudao │ │ │ └── framework │ │ │ ├── datasource │ │ │ ├── config │ │ │ │ └── YudaoDataSourceAutoConfiguration.java │ │ │ ├── core │ │ │ │ ├── enums │ │ │ │ │ └── DataSourceEnum.java │ │ │ │ └── filter │ │ │ │ │ └── DruidAdRemoveFilter.java │ │ │ └── package-info.java │ │ │ ├── mybatis │ │ │ ├── config │ │ │ │ ├── IdTypeEnvironmentPostProcessor.java │ │ │ │ └── YudaoMybatisAutoConfiguration.java │ │ │ ├── core │ │ │ │ ├── dataobject │ │ │ │ │ └── BaseDO.java │ │ │ │ ├── enums │ │ │ │ │ └── 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 │ │ │ └── package-info.java │ │ │ └── translate │ │ │ ├── config │ │ │ └── YudaoTranslateAutoConfiguration.java │ │ │ ├── core │ │ │ └── TranslateUtils.java │ │ │ └── package-info.java │ │ └── resources │ │ └── META-INF │ │ ├── spring.factories │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── yudao-spring-boot-starter-protection │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── cn │ │ │ └── iocoder │ │ │ └── yudao │ │ │ └── framework │ │ │ ├── idempotent │ │ │ ├── config │ │ │ │ └── YudaoIdempotentConfiguration.java │ │ │ ├── core │ │ │ │ ├── annotation │ │ │ │ │ └── Idempotent.java │ │ │ │ ├── aop │ │ │ │ │ └── IdempotentAspect.java │ │ │ │ ├── keyresolver │ │ │ │ │ ├── IdempotentKeyResolver.java │ │ │ │ │ └── impl │ │ │ │ │ │ ├── DefaultIdempotentKeyResolver.java │ │ │ │ │ │ ├── ExpressionIdempotentKeyResolver.java │ │ │ │ │ │ └── UserIdempotentKeyResolver.java │ │ │ │ └── redis │ │ │ │ │ └── IdempotentRedisDAO.java │ │ │ └── package-info.java │ │ │ ├── lock4j │ │ │ ├── config │ │ │ │ └── YudaoLock4jConfiguration.java │ │ │ ├── core │ │ │ │ ├── DefaultLockFailureStrategy.java │ │ │ │ └── Lock4jRedisKeyConstants.java │ │ │ └── package-info.java │ │ │ └── ratelimiter │ │ │ ├── config │ │ │ └── YudaoRateLimiterConfiguration.java │ │ │ ├── core │ │ │ ├── annotation │ │ │ │ └── RateLimiter.java │ │ │ ├── aop │ │ │ │ └── RateLimiterAspect.java │ │ │ ├── keyresolver │ │ │ │ ├── RateLimiterKeyResolver.java │ │ │ │ └── impl │ │ │ │ │ ├── ClientIpRateLimiterKeyResolver.java │ │ │ │ │ ├── DefaultRateLimiterKeyResolver.java │ │ │ │ │ ├── ExpressionRateLimiterKeyResolver.java │ │ │ │ │ ├── ServerNodeRateLimiterKeyResolver.java │ │ │ │ │ └── UserRateLimiterKeyResolver.java │ │ │ └── redis │ │ │ │ └── RateLimiterRedisDAO.java │ │ │ └── package-info.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── yudao-spring-boot-starter-redis │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── cn │ │ │ └── iocoder │ │ │ └── yudao │ │ │ └── framework │ │ │ └── redis │ │ │ ├── config │ │ │ ├── YudaoCacheAutoConfiguration.java │ │ │ ├── YudaoCacheProperties.java │ │ │ └── YudaoRedisAutoConfiguration.java │ │ │ ├── core │ │ │ └── TimeoutRedisCacheManager.java │ │ │ └── package-info.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── yudao-spring-boot-starter-security │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── cn │ │ │ └── iocoder │ │ │ └── yudao │ │ │ └── framework │ │ │ ├── operatelog │ │ │ ├── config │ │ │ │ └── YudaoOperateLogConfiguration.java │ │ │ ├── core │ │ │ │ ├── package-info.java │ │ │ │ └── service │ │ │ │ │ └── LogRecordServiceImpl.java │ │ │ └── package-info.java │ │ │ └── security │ │ │ ├── config │ │ │ ├── AuthorizeRequestsCustomizer.java │ │ │ ├── SecurityProperties.java │ │ │ ├── YudaoSecurityAutoConfiguration.java │ │ │ └── YudaoWebSecurityConfigurerAdapter.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 │ │ │ └── package-info.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── yudao-spring-boot-starter-test │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── framework │ │ └── test │ │ ├── config │ │ ├── RedisTestConfiguration.java │ │ └── SqlInitializationTestConfiguration.java │ │ ├── core │ │ ├── ut │ │ │ ├── BaseDbAndRedisUnitTest.java │ │ │ ├── BaseDbUnitTest.java │ │ │ ├── BaseMockitoUnitTest.java │ │ │ ├── BaseRedisUnitTest.java │ │ │ └── package-info.java │ │ └── util │ │ │ ├── AssertUtils.java │ │ │ └── RandomUtils.java │ │ └── package-info.java ├── yudao-spring-boot-starter-web │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── cn │ │ │ │ └── iocoder │ │ │ │ └── yudao │ │ │ │ └── framework │ │ │ │ ├── apilog │ │ │ │ ├── config │ │ │ │ │ └── YudaoApiLogAutoConfiguration.java │ │ │ │ ├── core │ │ │ │ │ ├── annotation │ │ │ │ │ │ └── ApiAccessLog.java │ │ │ │ │ ├── enums │ │ │ │ │ │ └── OperateTypeEnum.java │ │ │ │ │ ├── filter │ │ │ │ │ │ └── ApiAccessLogFilter.java │ │ │ │ │ ├── interceptor │ │ │ │ │ │ └── ApiAccessLogInterceptor.java │ │ │ │ │ └── service │ │ │ │ │ │ ├── ApiAccessLogFrameworkService.java │ │ │ │ │ │ ├── ApiAccessLogFrameworkServiceImpl.java │ │ │ │ │ │ ├── ApiErrorLogFrameworkService.java │ │ │ │ │ │ └── ApiErrorLogFrameworkServiceImpl.java │ │ │ │ └── package-info.java │ │ │ │ ├── banner │ │ │ │ ├── config │ │ │ │ │ └── YudaoBannerAutoConfiguration.java │ │ │ │ ├── core │ │ │ │ │ └── BannerApplicationRunner.java │ │ │ │ └── package-info.java │ │ │ │ ├── desensitize │ │ │ │ ├── core │ │ │ │ │ ├── base │ │ │ │ │ │ ├── annotation │ │ │ │ │ │ │ └── DesensitizeBy.java │ │ │ │ │ │ ├── handler │ │ │ │ │ │ │ └── DesensitizationHandler.java │ │ │ │ │ │ └── serializer │ │ │ │ │ │ │ └── StringDesensitizeSerializer.java │ │ │ │ │ ├── regex │ │ │ │ │ │ ├── annotation │ │ │ │ │ │ │ ├── EmailDesensitize.java │ │ │ │ │ │ │ └── RegexDesensitize.java │ │ │ │ │ │ └── handler │ │ │ │ │ │ │ ├── AbstractRegexDesensitizationHandler.java │ │ │ │ │ │ │ ├── DefaultRegexDesensitizationHandler.java │ │ │ │ │ │ │ └── EmailDesensitizationHandler.java │ │ │ │ │ └── slider │ │ │ │ │ │ ├── annotation │ │ │ │ │ │ ├── BankCardDesensitize.java │ │ │ │ │ │ ├── CarLicenseDesensitize.java │ │ │ │ │ │ ├── ChineseNameDesensitize.java │ │ │ │ │ │ ├── FixedPhoneDesensitize.java │ │ │ │ │ │ ├── IdCardDesensitize.java │ │ │ │ │ │ ├── MobileDesensitize.java │ │ │ │ │ │ ├── PasswordDesensitize.java │ │ │ │ │ │ └── SliderDesensitize.java │ │ │ │ │ │ └── handler │ │ │ │ │ │ ├── AbstractSliderDesensitizationHandler.java │ │ │ │ │ │ ├── BankCardDesensitization.java │ │ │ │ │ │ ├── CarLicenseDesensitization.java │ │ │ │ │ │ ├── ChineseNameDesensitization.java │ │ │ │ │ │ ├── DefaultDesensitizationHandler.java │ │ │ │ │ │ ├── FixedPhoneDesensitization.java │ │ │ │ │ │ ├── IdCardDesensitization.java │ │ │ │ │ │ ├── MobileDesensitization.java │ │ │ │ │ │ └── PasswordDesensitization.java │ │ │ │ └── package-info.java │ │ │ │ ├── errorcode │ │ │ │ ├── config │ │ │ │ │ ├── ErrorCodeProperties.java │ │ │ │ │ └── YudaoErrorCodeAutoConfiguration.java │ │ │ │ ├── core │ │ │ │ │ ├── generator │ │ │ │ │ │ ├── ErrorCodeAutoGenerator.java │ │ │ │ │ │ └── ErrorCodeAutoGeneratorImpl.java │ │ │ │ │ └── loader │ │ │ │ │ │ ├── ErrorCodeLoader.java │ │ │ │ │ │ └── ErrorCodeLoaderImpl.java │ │ │ │ └── package-info.java │ │ │ │ ├── jackson │ │ │ │ ├── config │ │ │ │ │ └── YudaoJacksonAutoConfiguration.java │ │ │ │ └── core │ │ │ │ │ ├── databind │ │ │ │ │ ├── NumberSerializer.java │ │ │ │ │ ├── TimestampLocalDateTimeDeserializer.java │ │ │ │ │ └── TimestampLocalDateTimeSerializer.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── package-info.java │ │ │ │ ├── swagger │ │ │ │ ├── config │ │ │ │ │ ├── SwaggerProperties.java │ │ │ │ │ └── YudaoSwaggerAutoConfiguration.java │ │ │ │ └── package-info.java │ │ │ │ ├── web │ │ │ │ ├── config │ │ │ │ │ ├── WebProperties.java │ │ │ │ │ └── YudaoWebAutoConfiguration.java │ │ │ │ ├── core │ │ │ │ │ ├── filter │ │ │ │ │ │ ├── ApiRequestFilter.java │ │ │ │ │ │ ├── CacheRequestBodyFilter.java │ │ │ │ │ │ ├── CacheRequestBodyWrapper.java │ │ │ │ │ │ └── DemoFilter.java │ │ │ │ │ ├── handler │ │ │ │ │ │ ├── GlobalExceptionHandler.java │ │ │ │ │ │ └── GlobalResponseBodyHandler.java │ │ │ │ │ └── util │ │ │ │ │ │ └── WebFrameworkUtils.java │ │ │ │ └── package-info.java │ │ │ │ └── xss │ │ │ │ ├── config │ │ │ │ ├── XssProperties.java │ │ │ │ └── YudaoXssAutoConfiguration.java │ │ │ │ ├── core │ │ │ │ ├── clean │ │ │ │ │ ├── JsoupXssCleaner.java │ │ │ │ │ └── XssCleaner.java │ │ │ │ ├── filter │ │ │ │ │ ├── XssFilter.java │ │ │ │ │ └── XssRequestWrapper.java │ │ │ │ └── json │ │ │ │ │ └── XssStringJsonDeserializer.java │ │ │ │ └── package-info.java │ │ └── resources │ │ │ ├── META-INF │ │ │ └── spring │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── banner.txt │ │ └── test │ │ └── java │ │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── framework │ │ └── desensitize │ │ └── core │ │ ├── DesensitizeTest.java │ │ ├── annotation │ │ └── Address.java │ │ └── handler │ │ └── AddressHandler.java └── yudao-spring-boot-starter-websocket │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── framework │ │ └── websocket │ │ ├── config │ │ ├── WebSocketProperties.java │ │ └── YudaoWebSocketAutoConfiguration.java │ │ ├── core │ │ ├── handler │ │ │ └── JsonWebSocketMessageHandler.java │ │ ├── listener │ │ │ └── WebSocketMessageListener.java │ │ ├── message │ │ │ └── JsonWebSocketMessage.java │ │ ├── security │ │ │ ├── LoginUserHandshakeInterceptor.java │ │ │ └── WebSocketAuthorizeRequestsCustomizer.java │ │ ├── sender │ │ │ ├── AbstractWebSocketMessageSender.java │ │ │ ├── WebSocketMessageSender.java │ │ │ ├── kafka │ │ │ │ ├── KafkaWebSocketMessage.java │ │ │ │ ├── KafkaWebSocketMessageConsumer.java │ │ │ │ └── KafkaWebSocketMessageSender.java │ │ │ ├── local │ │ │ │ └── LocalWebSocketMessageSender.java │ │ │ ├── rabbitmq │ │ │ │ ├── RabbitMQWebSocketMessage.java │ │ │ │ ├── RabbitMQWebSocketMessageConsumer.java │ │ │ │ └── RabbitMQWebSocketMessageSender.java │ │ │ ├── redis │ │ │ │ ├── RedisWebSocketMessage.java │ │ │ │ ├── RedisWebSocketMessageConsumer.java │ │ │ │ └── RedisWebSocketMessageSender.java │ │ │ └── rocketmq │ │ │ │ ├── RocketMQWebSocketMessage.java │ │ │ │ ├── RocketMQWebSocketMessageConsumer.java │ │ │ │ └── RocketMQWebSocketMessageSender.java │ │ ├── session │ │ │ ├── WebSocketSessionHandlerDecorator.java │ │ │ ├── WebSocketSessionManager.java │ │ │ └── WebSocketSessionManagerImpl.java │ │ └── util │ │ │ └── WebSocketFrameworkUtils.java │ │ └── package-info.java │ └── resources │ └── META-INF │ └── spring │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports ├── yudao-module-bpm ├── pom.xml ├── yudao-module-bpm-api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── module │ │ └── bpm │ │ ├── api │ │ ├── package-info.java │ │ └── task │ │ │ ├── BpmProcessInstanceApi.java │ │ │ └── dto │ │ │ └── BpmProcessInstanceCreateReqDTO.java │ │ ├── enums │ │ ├── DictTypeConstants.java │ │ ├── ErrorCodeConstants.java │ │ ├── definition │ │ │ ├── BpmModelFormTypeEnum.java │ │ │ ├── BpmProcessListenerType.java │ │ │ └── BpmProcessListenerValueType.java │ │ ├── message │ │ │ └── BpmMessageEnum.java │ │ └── task │ │ │ ├── BpmCommentTypeEnum.java │ │ │ ├── BpmDeleteReasonEnum.java │ │ │ ├── BpmProcessInstanceStatusEnum.java │ │ │ ├── BpmTaskSignTypeEnum.java │ │ │ └── BpmTaskStatusEnum.java │ │ └── event │ │ ├── BpmProcessInstanceStatusEvent.java │ │ └── BpmProcessInstanceStatusEventListener.java └── yudao-module-bpm-biz │ ├── pom.xml │ └── src │ ├── main │ └── java │ │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── module │ │ └── bpm │ │ ├── api │ │ ├── package-info.java │ │ └── task │ │ │ └── BpmProcessInstanceApiImpl.java │ │ ├── controller │ │ ├── admin │ │ │ ├── definition │ │ │ │ ├── BpmCategoryController.java │ │ │ │ ├── BpmFormController.java │ │ │ │ ├── BpmModelController.java │ │ │ │ ├── BpmProcessDefinitionController.java │ │ │ │ ├── BpmProcessExpressionController.java │ │ │ │ ├── BpmProcessListenerController.java │ │ │ │ ├── BpmUserGroupController.java │ │ │ │ └── vo │ │ │ │ │ ├── category │ │ │ │ │ ├── BpmCategoryPageReqVO.java │ │ │ │ │ ├── BpmCategoryRespVO.java │ │ │ │ │ └── BpmCategorySaveReqVO.java │ │ │ │ │ ├── expression │ │ │ │ │ ├── BpmProcessExpressionPageReqVO.java │ │ │ │ │ ├── BpmProcessExpressionRespVO.java │ │ │ │ │ └── BpmProcessExpressionSaveReqVO.java │ │ │ │ │ ├── form │ │ │ │ │ ├── BpmFormPageReqVO.java │ │ │ │ │ ├── BpmFormRespVO.java │ │ │ │ │ └── BpmFormSaveReqVO.java │ │ │ │ │ ├── group │ │ │ │ │ ├── BpmUserGroupPageReqVO.java │ │ │ │ │ ├── BpmUserGroupRespVO.java │ │ │ │ │ └── BpmUserGroupSaveReqVO.java │ │ │ │ │ ├── listener │ │ │ │ │ ├── BpmProcessListenerPageReqVO.java │ │ │ │ │ ├── BpmProcessListenerRespVO.java │ │ │ │ │ └── BpmProcessListenerSaveReqVO.java │ │ │ │ │ ├── model │ │ │ │ │ ├── BpmModeImportReqVO.java │ │ │ │ │ ├── BpmModelCreateReqVO.java │ │ │ │ │ ├── BpmModelPageReqVO.java │ │ │ │ │ ├── BpmModelRespVO.java │ │ │ │ │ ├── BpmModelUpdateReqVO.java │ │ │ │ │ └── BpmModelUpdateStateReqVO.java │ │ │ │ │ └── process │ │ │ │ │ ├── BpmProcessDefinitionPageReqVO.java │ │ │ │ │ └── BpmProcessDefinitionRespVO.java │ │ │ ├── oa │ │ │ │ ├── BpmOALeaveController.http │ │ │ │ ├── BpmOALeaveController.java │ │ │ │ ├── package-info.java │ │ │ │ └── vo │ │ │ │ │ ├── BpmOALeaveCreateReqVO.java │ │ │ │ │ ├── BpmOALeavePageReqVO.java │ │ │ │ │ └── BpmOALeaveRespVO.java │ │ │ └── task │ │ │ │ ├── BpmActivityController.java │ │ │ │ ├── BpmProcessInstanceController.java │ │ │ │ ├── BpmProcessInstanceCopyController.java │ │ │ │ ├── BpmTaskController.java │ │ │ │ └── vo │ │ │ │ ├── activity │ │ │ │ └── BpmActivityRespVO.java │ │ │ │ ├── cc │ │ │ │ └── BpmProcessInstanceCopyRespVO.java │ │ │ │ ├── instance │ │ │ │ ├── BpmProcessInstanceCancelReqVO.java │ │ │ │ ├── BpmProcessInstanceCopyPageReqVO.java │ │ │ │ ├── BpmProcessInstanceCreateReqVO.java │ │ │ │ ├── BpmProcessInstancePageReqVO.java │ │ │ │ └── BpmProcessInstanceRespVO.java │ │ │ │ └── task │ │ │ │ ├── BpmTaskApproveReqVO.java │ │ │ │ ├── BpmTaskDelegateReqVO.java │ │ │ │ ├── BpmTaskPageReqVO.java │ │ │ │ ├── BpmTaskRejectReqVO.java │ │ │ │ ├── BpmTaskRespVO.java │ │ │ │ ├── BpmTaskReturnReqVO.java │ │ │ │ ├── BpmTaskSignCreateReqVO.java │ │ │ │ ├── BpmTaskSignDeleteReqVO.java │ │ │ │ └── BpmTaskTransferReqVO.java │ │ ├── app │ │ │ └── package-info.java │ │ └── package-info.java │ │ ├── convert │ │ ├── definition │ │ │ ├── BpmModelConvert.java │ │ │ └── BpmProcessDefinitionConvert.java │ │ ├── message │ │ │ └── BpmMessageConvert.java │ │ ├── package-info.java │ │ └── task │ │ │ ├── BpmActivityConvert.java │ │ │ ├── BpmProcessInstanceConvert.java │ │ │ └── BpmTaskConvert.java │ │ ├── dal │ │ ├── dataobject │ │ │ ├── definition │ │ │ │ ├── BpmCategoryDO.java │ │ │ │ ├── BpmFormDO.java │ │ │ │ ├── BpmProcessDefinitionInfoDO.java │ │ │ │ ├── BpmProcessExpressionDO.java │ │ │ │ ├── BpmProcessListenerDO.java │ │ │ │ └── BpmUserGroupDO.java │ │ │ ├── oa │ │ │ │ └── BpmOALeaveDO.java │ │ │ └── task │ │ │ │ └── BpmProcessInstanceCopyDO.java │ │ └── mysql │ │ │ ├── category │ │ │ └── BpmCategoryMapper.java │ │ │ ├── definition │ │ │ ├── BpmFormMapper.java │ │ │ ├── BpmProcessDefinitionInfoMapper.java │ │ │ ├── BpmProcessExpressionMapper.java │ │ │ ├── BpmProcessListenerMapper.java │ │ │ └── BpmUserGroupMapper.java │ │ │ ├── oa │ │ │ └── BpmOALeaveMapper.java │ │ │ └── task │ │ │ └── BpmProcessInstanceCopyMapper.java │ │ ├── framework │ │ ├── flowable │ │ │ ├── config │ │ │ │ └── BpmFlowableConfiguration.java │ │ │ └── core │ │ │ │ ├── behavior │ │ │ │ ├── BpmActivityBehaviorFactory.java │ │ │ │ ├── BpmParallelMultiInstanceBehavior.java │ │ │ │ ├── BpmSequentialMultiInstanceBehavior.java │ │ │ │ └── BpmUserTaskActivityBehavior.java │ │ │ │ ├── candidate │ │ │ │ ├── BpmTaskCandidateInvoker.java │ │ │ │ ├── BpmTaskCandidateStrategy.java │ │ │ │ ├── expression │ │ │ │ │ ├── BpmTaskAssignLeaderExpression.java │ │ │ │ │ └── BpmTaskAssignStartUserExpression.java │ │ │ │ └── strategy │ │ │ │ │ ├── BpmTaskCandidateDeptLeaderStrategy.java │ │ │ │ │ ├── BpmTaskCandidateDeptMemberStrategy.java │ │ │ │ │ ├── BpmTaskCandidateExpressionStrategy.java │ │ │ │ │ ├── BpmTaskCandidateGroupStrategy.java │ │ │ │ │ ├── BpmTaskCandidatePostStrategy.java │ │ │ │ │ ├── BpmTaskCandidateRoleStrategy.java │ │ │ │ │ ├── BpmTaskCandidateStartUserSelectStrategy.java │ │ │ │ │ └── BpmTaskCandidateUserStrategy.java │ │ │ │ ├── enums │ │ │ │ ├── BpmConstants.java │ │ │ │ ├── BpmTaskCandidateStrategyEnum.java │ │ │ │ └── BpmnModelConstants.java │ │ │ │ ├── event │ │ │ │ └── BpmProcessInstanceEventPublisher.java │ │ │ │ ├── listener │ │ │ │ ├── BpmProcessInstanceEventListener.java │ │ │ │ ├── BpmTaskEventListener.java │ │ │ │ └── demo │ │ │ │ │ ├── exection │ │ │ │ │ ├── DemoDelegateClassExecutionListener.java │ │ │ │ │ ├── DemoDelegateExpressionExecutionListener.java │ │ │ │ │ └── DemoSpringExpressionExecutionListener.java │ │ │ │ │ └── task │ │ │ │ │ ├── DemoDelegateClassTaskListener.java │ │ │ │ │ ├── DemoDelegateExpressionTaskListener.java │ │ │ │ │ └── DemoSpringExpressionTaskListener.java │ │ │ │ └── util │ │ │ │ ├── BpmnModelUtils.java │ │ │ │ └── FlowableUtils.java │ │ ├── package-info.java │ │ └── web │ │ │ ├── config │ │ │ └── BpmWebConfiguration.java │ │ │ ├── core │ │ │ └── FlowableWebFilter.java │ │ │ └── package-info.java │ │ ├── package-info.java │ │ └── service │ │ ├── definition │ │ ├── BpmCategoryService.java │ │ ├── BpmCategoryServiceImpl.java │ │ ├── BpmFormService.java │ │ ├── BpmFormServiceImpl.java │ │ ├── BpmModelService.java │ │ ├── BpmModelServiceImpl.java │ │ ├── BpmProcessDefinitionService.java │ │ ├── BpmProcessDefinitionServiceImpl.java │ │ ├── BpmProcessExpressionService.java │ │ ├── BpmProcessExpressionServiceImpl.java │ │ ├── BpmProcessListenerService.java │ │ ├── BpmProcessListenerServiceImpl.java │ │ ├── BpmUserGroupService.java │ │ ├── BpmUserGroupServiceImpl.java │ │ └── dto │ │ │ ├── BpmFormFieldRespDTO.java │ │ │ ├── BpmModelMetaInfoRespDTO.java │ │ │ └── BpmProcessDefinitionCreateReqDTO.java │ │ ├── message │ │ ├── BpmMessageService.java │ │ ├── BpmMessageServiceImpl.java │ │ └── dto │ │ │ ├── BpmMessageSendWhenProcessInstanceApproveReqDTO.java │ │ │ ├── BpmMessageSendWhenProcessInstanceRejectReqDTO.java │ │ │ └── BpmMessageSendWhenTaskCreatedReqDTO.java │ │ ├── oa │ │ ├── BpmOALeaveService.java │ │ ├── BpmOALeaveServiceImpl.java │ │ └── listener │ │ │ └── BpmOALeaveStatusListener.java │ │ └── task │ │ ├── BpmActivityService.java │ │ ├── BpmActivityServiceImpl.java │ │ ├── BpmProcessInstanceCopyService.java │ │ ├── BpmProcessInstanceCopyServiceImpl.java │ │ ├── BpmProcessInstanceService.java │ │ ├── BpmProcessInstanceServiceImpl.java │ │ ├── BpmTaskService.java │ │ └── BpmTaskServiceImpl.java │ └── test │ ├── java │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── module │ │ └── bpm │ │ ├── framework │ │ └── flowable │ │ │ └── core │ │ │ └── candidate │ │ │ ├── BpmTaskCandidateInvokerTest.java │ │ │ ├── expression │ │ │ └── BpmTaskAssignLeaderExpressionTest.java │ │ │ └── strategy │ │ │ ├── BpmTaskCandidateDeptLeaderStrategyTest.java │ │ │ ├── BpmTaskCandidateDeptMemberStrategyTest.java │ │ │ ├── BpmTaskCandidateExpressionStrategyTest.java │ │ │ ├── BpmTaskCandidateGroupStrategyTest.java │ │ │ ├── BpmTaskCandidatePostStrategyTest.java │ │ │ ├── BpmTaskCandidateRoleStrategyTest.java │ │ │ └── BpmTaskCandidateUserStrategyTest.java │ │ └── service │ │ ├── category │ │ └── BpmCategoryServiceImplTest.java │ │ └── definition │ │ ├── BpmFormServiceTest.java │ │ └── BpmUserGroupServiceTest.java │ └── resources │ ├── application-unit-test.yaml │ ├── logback.xml │ └── sql │ ├── clean.sql │ └── create_tables.sql ├── yudao-module-crm ├── pom.xml ├── yudao-module-crm-api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── module │ │ └── crm │ │ ├── api │ │ └── package-info.java │ │ └── enums │ │ ├── DictTypeConstants.java │ │ ├── ErrorCodeConstants.java │ │ ├── LogRecordConstants.java │ │ ├── business │ │ └── CrmBusinessEndStatusEnum.java │ │ ├── common │ │ ├── CrmAuditStatusEnum.java │ │ ├── CrmBizTypeEnum.java │ │ └── CrmSceneTypeEnum.java │ │ ├── customer │ │ ├── CrmCustomerLevelEnum.java │ │ └── CrmCustomerLimitConfigTypeEnum.java │ │ ├── permission │ │ └── CrmPermissionLevelEnum.java │ │ ├── product │ │ └── CrmProductStatusEnum.java │ │ └── receivable │ │ └── CrmReceivableReturnTypeEnum.java └── yudao-module-crm-biz │ ├── pom.xml │ └── src │ ├── main │ ├── java │ │ └── cn │ │ │ └── iocoder │ │ │ └── yudao │ │ │ └── module │ │ │ └── crm │ │ │ ├── api │ │ │ └── package-info.java │ │ │ ├── controller │ │ │ ├── admin │ │ │ │ ├── business │ │ │ │ │ ├── CrmBusinessController.java │ │ │ │ │ ├── CrmBusinessStatusController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── business │ │ │ │ │ │ ├── CrmBusinessPageReqVO.java │ │ │ │ │ │ ├── CrmBusinessRespVO.java │ │ │ │ │ │ ├── CrmBusinessSaveReqVO.java │ │ │ │ │ │ ├── CrmBusinessTransferReqVO.java │ │ │ │ │ │ └── CrmBusinessUpdateStatusReqVO.java │ │ │ │ │ │ └── status │ │ │ │ │ │ ├── CrmBusinessStatusRespVO.java │ │ │ │ │ │ └── CrmBusinessStatusSaveReqVO.java │ │ │ │ ├── clue │ │ │ │ │ ├── CrmClueController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── CrmCluePageReqVO.java │ │ │ │ │ │ ├── CrmClueRespVO.java │ │ │ │ │ │ ├── CrmClueSaveReqVO.java │ │ │ │ │ │ └── CrmClueTransferReqVO.java │ │ │ │ ├── contact │ │ │ │ │ ├── CrmContactController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── CrmContactBusiness2ReqVO.java │ │ │ │ │ │ ├── CrmContactBusinessReqVO.java │ │ │ │ │ │ ├── CrmContactPageReqVO.java │ │ │ │ │ │ ├── CrmContactRespVO.java │ │ │ │ │ │ ├── CrmContactSaveReqVO.java │ │ │ │ │ │ └── CrmContactTransferReqVO.java │ │ │ │ ├── contract │ │ │ │ │ ├── CrmContractConfigController.java │ │ │ │ │ ├── CrmContractController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── config │ │ │ │ │ │ ├── CrmContractConfigRespVO.java │ │ │ │ │ │ └── CrmContractConfigSaveReqVO.java │ │ │ │ │ │ └── contract │ │ │ │ │ │ ├── CrmContractPageReqVO.java │ │ │ │ │ │ ├── CrmContractRespVO.java │ │ │ │ │ │ ├── CrmContractSaveReqVO.java │ │ │ │ │ │ └── CrmContractTransferReqVO.java │ │ │ │ ├── customer │ │ │ │ │ ├── CrmCustomerController.java │ │ │ │ │ ├── CrmCustomerLimitConfigController.java │ │ │ │ │ ├── CrmCustomerPoolConfigController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── customer │ │ │ │ │ │ ├── CrmCustomerDistributeReqVO.java │ │ │ │ │ │ ├── CrmCustomerImportExcelVO.java │ │ │ │ │ │ ├── CrmCustomerImportReqVO.java │ │ │ │ │ │ ├── CrmCustomerImportRespVO.java │ │ │ │ │ │ ├── CrmCustomerLockReqVO.java │ │ │ │ │ │ ├── CrmCustomerPageReqVO.java │ │ │ │ │ │ ├── CrmCustomerRespVO.java │ │ │ │ │ │ ├── CrmCustomerSaveReqVO.java │ │ │ │ │ │ └── CrmCustomerTransferReqVO.java │ │ │ │ │ │ ├── limitconfig │ │ │ │ │ │ ├── CrmCustomerLimitConfigPageReqVO.java │ │ │ │ │ │ ├── CrmCustomerLimitConfigRespVO.java │ │ │ │ │ │ └── CrmCustomerLimitConfigSaveReqVO.java │ │ │ │ │ │ └── poolconfig │ │ │ │ │ │ ├── CrmCustomerPoolConfigRespVO.java │ │ │ │ │ │ └── CrmCustomerPoolConfigSaveReqVO.java │ │ │ │ ├── followup │ │ │ │ │ ├── CrmFollowUpRecordController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── CrmFollowUpRecordPageReqVO.java │ │ │ │ │ │ ├── CrmFollowUpRecordRespVO.java │ │ │ │ │ │ └── CrmFollowUpRecordSaveReqVO.java │ │ │ │ ├── operatelog │ │ │ │ │ ├── CrmOperateLogController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── CrmOperateLogPageReqVO.java │ │ │ │ │ │ └── CrmOperateLogRespVO.java │ │ │ │ ├── permission │ │ │ │ │ ├── CrmPermissionController.http │ │ │ │ │ ├── CrmPermissionController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── CrmPermissionRespVO.java │ │ │ │ │ │ ├── CrmPermissionSaveReqVO.java │ │ │ │ │ │ └── CrmPermissionUpdateReqVO.java │ │ │ │ ├── product │ │ │ │ │ ├── CrmProductCategoryController.java │ │ │ │ │ ├── CrmProductController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── category │ │ │ │ │ │ ├── CrmProductCategoryCreateReqVO.java │ │ │ │ │ │ ├── CrmProductCategoryListReqVO.java │ │ │ │ │ │ └── CrmProductCategoryRespVO.java │ │ │ │ │ │ └── product │ │ │ │ │ │ ├── CrmProductPageReqVO.java │ │ │ │ │ │ ├── CrmProductRespVO.java │ │ │ │ │ │ └── CrmProductSaveReqVO.java │ │ │ │ ├── receivable │ │ │ │ │ ├── CrmReceivableController.java │ │ │ │ │ ├── CrmReceivablePlanController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── plan │ │ │ │ │ │ ├── CrmReceivablePlanPageReqVO.java │ │ │ │ │ │ ├── CrmReceivablePlanRespVO.java │ │ │ │ │ │ └── CrmReceivablePlanSaveReqVO.java │ │ │ │ │ │ └── receivable │ │ │ │ │ │ ├── CrmReceivablePageReqVO.java │ │ │ │ │ │ ├── CrmReceivableRespVO.java │ │ │ │ │ │ └── CrmReceivableSaveReqVO.java │ │ │ │ └── statistics │ │ │ │ │ ├── CrmStatisticsCustomerController.http │ │ │ │ │ ├── CrmStatisticsCustomerController.java │ │ │ │ │ ├── CrmStatisticsPerformanceController.java │ │ │ │ │ ├── CrmStatisticsPortraitController.java │ │ │ │ │ ├── CrmStatisticsRankController.http │ │ │ │ │ ├── CrmStatisticsRankController.java │ │ │ │ │ └── vo │ │ │ │ │ ├── customer │ │ │ │ │ ├── CrmStatisticsCustomerByUserBaseRespVO.java │ │ │ │ │ ├── CrmStatisticsCustomerContractSummaryRespVO.java │ │ │ │ │ ├── CrmStatisticsCustomerDealCycleByDateRespVO.java │ │ │ │ │ ├── CrmStatisticsCustomerDealCycleByUserRespVO.java │ │ │ │ │ ├── CrmStatisticsCustomerReqVO.java │ │ │ │ │ ├── CrmStatisticsCustomerSummaryByDateRespVO.java │ │ │ │ │ ├── CrmStatisticsCustomerSummaryByUserRespVO.java │ │ │ │ │ ├── CrmStatisticsFollowUpSummaryByDateRespVO.java │ │ │ │ │ ├── CrmStatisticsFollowUpSummaryByTypeRespVO.java │ │ │ │ │ ├── CrmStatisticsFollowUpSummaryByUserRespVO.java │ │ │ │ │ ├── CrmStatisticsPoolSummaryByDateRespVO.java │ │ │ │ │ └── CrmStatisticsPoolSummaryByUserRespVO.java │ │ │ │ │ ├── performance │ │ │ │ │ ├── CrmStatisticsPerformanceReqVO.java │ │ │ │ │ └── CrmStatisticsPerformanceRespVO.java │ │ │ │ │ ├── portrait │ │ │ │ │ ├── CrmStatisticCustomerAreaRespVO.java │ │ │ │ │ ├── CrmStatisticCustomerIndustryRespVO.java │ │ │ │ │ ├── CrmStatisticCustomerLevelRespVO.java │ │ │ │ │ ├── CrmStatisticCustomerSourceRespVO.java │ │ │ │ │ └── CrmStatisticsPortraitReqVO.java │ │ │ │ │ └── rank │ │ │ │ │ ├── CrmStatisticsRankReqVO.java │ │ │ │ │ └── CrmStatisticsRankRespVO.java │ │ │ ├── app │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ │ ├── convert │ │ │ └── package-info.java │ │ │ ├── dal │ │ │ ├── dataobject │ │ │ │ ├── business │ │ │ │ │ ├── CrmBusinessDO.java │ │ │ │ │ ├── CrmBusinessProductDO.java │ │ │ │ │ ├── CrmBusinessStatusDO.java │ │ │ │ │ └── CrmBusinessStatusTypeDO.java │ │ │ │ ├── clue │ │ │ │ │ ├── CrmClueDO.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── contact │ │ │ │ │ ├── CrmContactBusinessDO.java │ │ │ │ │ ├── CrmContactDO.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── contract │ │ │ │ │ ├── CrmContractConfigDO.java │ │ │ │ │ ├── CrmContractDO.java │ │ │ │ │ └── CrmContractProductDO.java │ │ │ │ ├── customer │ │ │ │ │ ├── CrmCustomerDO.java │ │ │ │ │ ├── CrmCustomerLimitConfigDO.java │ │ │ │ │ └── CrmCustomerPoolConfigDO.java │ │ │ │ ├── followup │ │ │ │ │ └── CrmFollowUpRecordDO.java │ │ │ │ ├── permission │ │ │ │ │ └── CrmPermissionDO.java │ │ │ │ ├── product │ │ │ │ │ ├── CrmProductCategoryDO.java │ │ │ │ │ ├── CrmProductDO.java │ │ │ │ │ └── package-info.java │ │ │ │ └── receivable │ │ │ │ │ ├── CrmReceivableDO.java │ │ │ │ │ └── CrmReceivablePlanDO.java │ │ │ ├── mysql │ │ │ │ ├── business │ │ │ │ │ ├── CrmBusinessMapper.java │ │ │ │ │ ├── CrmBusinessProductMapper.java │ │ │ │ │ ├── CrmBusinessStatusMapper.java │ │ │ │ │ └── CrmBusinessStatusTypeMapper.java │ │ │ │ ├── clue │ │ │ │ │ ├── CrmClueMapper.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── contact │ │ │ │ │ ├── CrmContactBusinessMapper.java │ │ │ │ │ └── CrmContactMapper.java │ │ │ │ ├── contract │ │ │ │ │ ├── CrmContractConfigMapper.java │ │ │ │ │ ├── CrmContractMapper.java │ │ │ │ │ └── CrmContractProductMapper.java │ │ │ │ ├── customer │ │ │ │ │ ├── CrmCustomerLimitConfigMapper.java │ │ │ │ │ ├── CrmCustomerMapper.java │ │ │ │ │ └── CrmCustomerPoolConfigMapper.java │ │ │ │ ├── followup │ │ │ │ │ └── CrmFollowUpRecordMapper.java │ │ │ │ ├── permission │ │ │ │ │ ├── CrmPermissionMapper.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── product │ │ │ │ │ ├── CrmProductCategoryMapper.java │ │ │ │ │ └── CrmProductMapper.java │ │ │ │ ├── receivable │ │ │ │ │ ├── CrmReceivableMapper.java │ │ │ │ │ └── CrmReceivablePlanMapper.java │ │ │ │ └── statistics │ │ │ │ │ ├── CrmStatisticsCustomerMapper.java │ │ │ │ │ ├── CrmStatisticsPerformanceMapper.java │ │ │ │ │ ├── CrmStatisticsPortraitMapper.java │ │ │ │ │ └── CrmStatisticsRankMapper.java │ │ │ └── redis │ │ │ │ ├── RedisKeyConstants.java │ │ │ │ └── no │ │ │ │ └── CrmNoRedisDAO.java │ │ │ ├── framework │ │ │ ├── excel │ │ │ │ ├── core │ │ │ │ │ └── AreaExcelColumnSelectFunction.java │ │ │ │ └── package-info.java │ │ │ ├── operatelog │ │ │ │ ├── core │ │ │ │ │ ├── CrmBusinessParseFunction.java │ │ │ │ │ ├── CrmContactParseFunction.java │ │ │ │ │ ├── CrmContractParseFunction.java │ │ │ │ │ ├── CrmCustomerIndustryParseFunction.java │ │ │ │ │ ├── CrmCustomerLevelParseFunction.java │ │ │ │ │ ├── CrmCustomerParseFunction.java │ │ │ │ │ ├── CrmCustomerSourceParseFunction.java │ │ │ │ │ ├── CrmProductStatusParseFunction.java │ │ │ │ │ ├── CrmProductUnitParseFunction.java │ │ │ │ │ ├── CrmReceivablePlanParseFunction.java │ │ │ │ │ ├── CrmReceivableReturnTypeParseFunction.java │ │ │ │ │ ├── SysAdminUserParseFunction.java │ │ │ │ │ ├── SysAreaParseFunction.java │ │ │ │ │ ├── SysBooleanParseFunction.java │ │ │ │ │ ├── SysDeptParseFunction.java │ │ │ │ │ └── SysSexParseFunction.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── permission │ │ │ │ ├── core │ │ │ │ │ ├── annotations │ │ │ │ │ │ └── CrmPermission.java │ │ │ │ │ ├── aop │ │ │ │ │ │ └── CrmPermissionAspect.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ └── web │ │ │ │ ├── config │ │ │ │ └── CrmWebConfiguration.java │ │ │ │ └── package-info.java │ │ │ ├── job │ │ │ ├── customer │ │ │ │ └── CrmCustomerAutoPutPoolJob.java │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── service │ │ │ ├── business │ │ │ │ ├── CrmBusinessService.java │ │ │ │ ├── CrmBusinessServiceImpl.java │ │ │ │ ├── CrmBusinessStatusService.java │ │ │ │ └── CrmBusinessStatusServiceImpl.java │ │ │ ├── clue │ │ │ │ ├── CrmClueService.java │ │ │ │ └── CrmClueServiceImpl.java │ │ │ ├── contact │ │ │ │ ├── CrmContactBusinessService.java │ │ │ │ ├── CrmContactBusinessServiceImpl.java │ │ │ │ ├── CrmContactService.java │ │ │ │ └── CrmContactServiceImpl.java │ │ │ ├── contract │ │ │ │ ├── CrmContractConfigService.java │ │ │ │ ├── CrmContractConfigServiceImpl.java │ │ │ │ ├── CrmContractService.java │ │ │ │ ├── CrmContractServiceImpl.java │ │ │ │ └── listener │ │ │ │ │ └── CrmContractStatusListener.java │ │ │ ├── customer │ │ │ │ ├── CrmCustomerLimitConfigService.java │ │ │ │ ├── CrmCustomerLimitConfigServiceImpl.java │ │ │ │ ├── CrmCustomerPoolConfigService.java │ │ │ │ ├── CrmCustomerPoolConfigServiceImpl.java │ │ │ │ ├── CrmCustomerService.java │ │ │ │ ├── CrmCustomerServiceImpl.java │ │ │ │ └── bo │ │ │ │ │ └── CrmCustomerCreateReqBO.java │ │ │ ├── followup │ │ │ │ ├── CrmFollowUpRecordService.java │ │ │ │ ├── CrmFollowUpRecordServiceImpl.java │ │ │ │ └── bo │ │ │ │ │ └── CrmFollowUpCreateReqBO.java │ │ │ ├── permission │ │ │ │ ├── CrmPermissionService.java │ │ │ │ ├── CrmPermissionServiceImpl.java │ │ │ │ └── bo │ │ │ │ │ ├── CrmPermissionCreateReqBO.java │ │ │ │ │ └── CrmPermissionTransferReqBO.java │ │ │ ├── product │ │ │ │ ├── CrmProductCategoryService.java │ │ │ │ ├── CrmProductCategoryServiceImpl.java │ │ │ │ ├── CrmProductService.java │ │ │ │ └── CrmProductServiceImpl.java │ │ │ ├── receivable │ │ │ │ ├── CrmReceivablePlanService.java │ │ │ │ ├── CrmReceivablePlanServiceImpl.java │ │ │ │ ├── CrmReceivableService.java │ │ │ │ ├── CrmReceivableServiceImpl.java │ │ │ │ └── listener │ │ │ │ │ └── CrmReceivableStatusListener.java │ │ │ └── statistics │ │ │ │ ├── CrmStatisticsCustomerService.java │ │ │ │ ├── CrmStatisticsCustomerServiceImpl.java │ │ │ │ ├── CrmStatisticsPerformanceService.java │ │ │ │ ├── CrmStatisticsPerformanceServiceImpl.java │ │ │ │ ├── CrmStatisticsPortraitService.java │ │ │ │ ├── CrmStatisticsPortraitServiceImpl.java │ │ │ │ ├── CrmStatisticsRankService.java │ │ │ │ └── CrmStatisticsRankServiceImpl.java │ │ │ └── util │ │ │ ├── CrmAuditStatusUtils.java │ │ │ └── CrmPermissionUtils.java │ └── resources │ │ └── mapper │ │ └── statistics │ │ ├── CrmStatisticsCustomerMapper.xml │ │ ├── CrmStatisticsPerformanceMapper.xml │ │ ├── CrmStatisticsPortraitMapper.xml │ │ └── CrmStatisticsRankMapper.xml │ └── test │ └── resources │ ├── application-unit-test.yaml │ └── logback.xml ├── yudao-module-erp ├── pom.xml ├── yudao-module-erp-api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── module │ │ └── erp │ │ ├── api │ │ └── package-info.java │ │ └── enums │ │ ├── DictTypeConstants.java │ │ ├── ErpAuditStatus.java │ │ ├── ErrorCodeConstants.java │ │ ├── LogRecordConstants.java │ │ ├── common │ │ └── ErpBizTypeEnum.java │ │ └── stock │ │ └── ErpStockRecordBizTypeEnum.java └── yudao-module-erp-biz │ ├── pom.xml │ └── src │ └── main │ ├── java │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── module │ │ └── erp │ │ ├── controller │ │ ├── admin │ │ │ ├── finance │ │ │ │ ├── ErpAccountController.java │ │ │ │ ├── ErpFinancePaymentController.java │ │ │ │ ├── ErpFinanceReceiptController.java │ │ │ │ └── vo │ │ │ │ │ ├── account │ │ │ │ │ ├── ErpAccountPageReqVO.java │ │ │ │ │ ├── ErpAccountRespVO.java │ │ │ │ │ └── ErpAccountSaveReqVO.java │ │ │ │ │ ├── payment │ │ │ │ │ ├── ErpFinancePaymentPageReqVO.java │ │ │ │ │ ├── ErpFinancePaymentRespVO.java │ │ │ │ │ └── ErpFinancePaymentSaveReqVO.java │ │ │ │ │ └── receipt │ │ │ │ │ ├── ErpFinanceReceiptPageReqVO.java │ │ │ │ │ ├── ErpFinanceReceiptRespVO.java │ │ │ │ │ └── ErpFinanceReceiptSaveReqVO.java │ │ │ ├── product │ │ │ │ ├── ErpProductCategoryController.java │ │ │ │ ├── ErpProductController.java │ │ │ │ ├── ErpProductUnitController.java │ │ │ │ └── vo │ │ │ │ │ ├── category │ │ │ │ │ ├── ErpProductCategoryListReqVO.java │ │ │ │ │ ├── ErpProductCategoryRespVO.java │ │ │ │ │ └── ErpProductCategorySaveReqVO.java │ │ │ │ │ ├── product │ │ │ │ │ ├── ErpProductPageReqVO.java │ │ │ │ │ ├── ErpProductRespVO.java │ │ │ │ │ └── ProductSaveReqVO.java │ │ │ │ │ └── unit │ │ │ │ │ ├── ErpProductUnitPageReqVO.java │ │ │ │ │ ├── ErpProductUnitRespVO.java │ │ │ │ │ └── ErpProductUnitSaveReqVO.java │ │ │ ├── purchase │ │ │ │ ├── ErpPurchaseInController.java │ │ │ │ ├── ErpPurchaseOrderController.java │ │ │ │ ├── ErpPurchaseReturnController.java │ │ │ │ ├── ErpSupplierController.java │ │ │ │ └── vo │ │ │ │ │ ├── in │ │ │ │ │ ├── ErpPurchaseInPageReqVO.java │ │ │ │ │ ├── ErpPurchaseInRespVO.java │ │ │ │ │ └── ErpPurchaseInSaveReqVO.java │ │ │ │ │ ├── order │ │ │ │ │ ├── ErpPurchaseOrderPageReqVO.java │ │ │ │ │ ├── ErpPurchaseOrderRespVO.java │ │ │ │ │ └── ErpPurchaseOrderSaveReqVO.java │ │ │ │ │ ├── returns │ │ │ │ │ ├── ErpPurchaseReturnPageReqVO.java │ │ │ │ │ ├── ErpPurchaseReturnRespVO.java │ │ │ │ │ └── ErpPurchaseReturnSaveReqVO.java │ │ │ │ │ └── supplier │ │ │ │ │ ├── ErpSupplierPageReqVO.java │ │ │ │ │ ├── ErpSupplierRespVO.java │ │ │ │ │ └── ErpSupplierSaveReqVO.java │ │ │ ├── sale │ │ │ │ ├── ErpCustomerController.java │ │ │ │ ├── ErpSaleOrderController.java │ │ │ │ ├── ErpSaleOutController.java │ │ │ │ ├── ErpSaleReturnController.java │ │ │ │ └── vo │ │ │ │ │ ├── customer │ │ │ │ │ ├── ErpCustomerPageReqVO.java │ │ │ │ │ ├── ErpCustomerRespVO.java │ │ │ │ │ └── ErpCustomerSaveReqVO.java │ │ │ │ │ ├── order │ │ │ │ │ ├── ErpSaleOrderPageReqVO.java │ │ │ │ │ ├── ErpSaleOrderRespVO.java │ │ │ │ │ └── ErpSaleOrderSaveReqVO.java │ │ │ │ │ ├── out │ │ │ │ │ ├── ErpSaleOutPageReqVO.java │ │ │ │ │ ├── ErpSaleOutRespVO.java │ │ │ │ │ └── ErpSaleOutSaveReqVO.java │ │ │ │ │ └── returns │ │ │ │ │ ├── ErpSaleReturnPageReqVO.java │ │ │ │ │ ├── ErpSaleReturnRespVO.java │ │ │ │ │ └── ErpSaleReturnSaveReqVO.java │ │ │ ├── statistics │ │ │ │ ├── ErpPurchaseStatisticsController.java │ │ │ │ ├── ErpSaleStatisticsController.http │ │ │ │ ├── ErpSaleStatisticsController.java │ │ │ │ └── vo │ │ │ │ │ ├── purchase │ │ │ │ │ ├── ErpPurchaseSummaryRespVO.java │ │ │ │ │ └── ErpPurchaseTimeSummaryRespVO.java │ │ │ │ │ └── sale │ │ │ │ │ ├── ErpSaleSummaryRespVO.java │ │ │ │ │ └── ErpSaleTimeSummaryRespVO.java │ │ │ └── stock │ │ │ │ ├── ErpStockCheckController.java │ │ │ │ ├── ErpStockController.java │ │ │ │ ├── ErpStockInController.java │ │ │ │ ├── ErpStockMoveController.java │ │ │ │ ├── ErpStockOutController.java │ │ │ │ ├── ErpStockRecordController.java │ │ │ │ ├── ErpWarehouseController.java │ │ │ │ └── vo │ │ │ │ ├── check │ │ │ │ ├── ErpStockCheckPageReqVO.java │ │ │ │ ├── ErpStockCheckRespVO.java │ │ │ │ └── ErpStockCheckSaveReqVO.java │ │ │ │ ├── in │ │ │ │ ├── ErpStockInPageReqVO.java │ │ │ │ ├── ErpStockInRespVO.java │ │ │ │ └── ErpStockInSaveReqVO.java │ │ │ │ ├── move │ │ │ │ ├── ErpStockMovePageReqVO.java │ │ │ │ ├── ErpStockMoveRespVO.java │ │ │ │ └── ErpStockMoveSaveReqVO.java │ │ │ │ ├── out │ │ │ │ ├── ErpStockOutPageReqVO.java │ │ │ │ ├── ErpStockOutRespVO.java │ │ │ │ └── ErpStockOutSaveReqVO.java │ │ │ │ ├── record │ │ │ │ ├── ErpStockRecordPageReqVO.java │ │ │ │ └── ErpStockRecordRespVO.java │ │ │ │ ├── stock │ │ │ │ ├── ErpStockPageReqVO.java │ │ │ │ └── ErpStockRespVO.java │ │ │ │ └── warehouse │ │ │ │ ├── ErpWarehousePageReqVO.java │ │ │ │ ├── ErpWarehouseRespVO.java │ │ │ │ └── ErpWarehouseSaveReqVO.java │ │ └── package-info.java │ │ ├── dal │ │ ├── dataobject │ │ │ ├── finance │ │ │ │ ├── ErpAccountDO.java │ │ │ │ ├── ErpFinancePaymentDO.java │ │ │ │ ├── ErpFinancePaymentItemDO.java │ │ │ │ ├── ErpFinanceReceiptDO.java │ │ │ │ └── ErpFinanceReceiptItemDO.java │ │ │ ├── product │ │ │ │ ├── ErpProductCategoryDO.java │ │ │ │ ├── ErpProductDO.java │ │ │ │ └── ErpProductUnitDO.java │ │ │ ├── purchase │ │ │ │ ├── ErpPurchaseInDO.java │ │ │ │ ├── ErpPurchaseInItemDO.java │ │ │ │ ├── ErpPurchaseOrderDO.java │ │ │ │ ├── ErpPurchaseOrderItemDO.java │ │ │ │ ├── ErpPurchaseReturnDO.java │ │ │ │ ├── ErpPurchaseReturnItemDO.java │ │ │ │ └── ErpSupplierDO.java │ │ │ ├── sale │ │ │ │ ├── ErpCustomerDO.java │ │ │ │ ├── ErpSaleOrderDO.java │ │ │ │ ├── ErpSaleOrderItemDO.java │ │ │ │ ├── ErpSaleOutDO.java │ │ │ │ ├── ErpSaleOutItemDO.java │ │ │ │ ├── ErpSaleReturnDO.java │ │ │ │ └── ErpSaleReturnItemDO.java │ │ │ └── stock │ │ │ │ ├── ErpStockCheckDO.java │ │ │ │ ├── ErpStockCheckItemDO.java │ │ │ │ ├── ErpStockDO.java │ │ │ │ ├── ErpStockInDO.java │ │ │ │ ├── ErpStockInItemDO.java │ │ │ │ ├── ErpStockMoveDO.java │ │ │ │ ├── ErpStockMoveItemDO.java │ │ │ │ ├── ErpStockOutDO.java │ │ │ │ ├── ErpStockOutItemDO.java │ │ │ │ ├── ErpStockRecordDO.java │ │ │ │ └── ErpWarehouseDO.java │ │ ├── mysql │ │ │ ├── finance │ │ │ │ ├── ErpAccountMapper.java │ │ │ │ ├── ErpFinancePaymentItemMapper.java │ │ │ │ ├── ErpFinancePaymentMapper.java │ │ │ │ ├── ErpFinanceReceiptItemMapper.java │ │ │ │ └── ErpFinanceReceiptMapper.java │ │ │ ├── product │ │ │ │ ├── ErpProductCategoryMapper.java │ │ │ │ ├── ErpProductMapper.java │ │ │ │ └── ErpProductUnitMapper.java │ │ │ ├── purchase │ │ │ │ ├── ErpPurchaseInItemMapper.java │ │ │ │ ├── ErpPurchaseInMapper.java │ │ │ │ ├── ErpPurchaseOrderItemMapper.java │ │ │ │ ├── ErpPurchaseOrderMapper.java │ │ │ │ ├── ErpPurchaseReturnItemMapper.java │ │ │ │ ├── ErpPurchaseReturnMapper.java │ │ │ │ └── ErpSupplierMapper.java │ │ │ ├── sale │ │ │ │ ├── ErpCustomerMapper.java │ │ │ │ ├── ErpSaleOrderItemMapper.java │ │ │ │ ├── ErpSaleOrderMapper.java │ │ │ │ ├── ErpSaleOutItemMapper.java │ │ │ │ ├── ErpSaleOutMapper.java │ │ │ │ ├── ErpSaleReturnItemMapper.java │ │ │ │ └── ErpSaleReturnMapper.java │ │ │ ├── statistics │ │ │ │ ├── ErpPurchaseStatisticsMapper.java │ │ │ │ └── ErpSaleStatisticsMapper.java │ │ │ └── stock │ │ │ │ ├── ErpStockCheckItemMapper.java │ │ │ │ ├── ErpStockCheckMapper.java │ │ │ │ ├── ErpStockInItemMapper.java │ │ │ │ ├── ErpStockInMapper.java │ │ │ │ ├── ErpStockMapper.java │ │ │ │ ├── ErpStockMoveItemMapper.java │ │ │ │ ├── ErpStockMoveMapper.java │ │ │ │ ├── ErpStockOutItemMapper.java │ │ │ │ ├── ErpStockOutMapper.java │ │ │ │ ├── ErpStockRecordMapper.java │ │ │ │ └── ErpWarehouseMapper.java │ │ └── redis │ │ │ ├── RedisKeyConstants.java │ │ │ └── no │ │ │ └── ErpNoRedisDAO.java │ │ ├── framework │ │ ├── package-info.java │ │ └── web │ │ │ ├── config │ │ │ └── ErpWebConfiguration.java │ │ │ └── package-info.java │ │ ├── package-info.java │ │ └── service │ │ ├── finance │ │ ├── ErpAccountService.java │ │ ├── ErpAccountServiceImpl.java │ │ ├── ErpFinancePaymentService.java │ │ ├── ErpFinancePaymentServiceImpl.java │ │ ├── ErpFinanceReceiptService.java │ │ └── ErpFinanceReceiptServiceImpl.java │ │ ├── product │ │ ├── ErpProductCategoryService.java │ │ ├── ErpProductCategoryServiceImpl.java │ │ ├── ErpProductService.java │ │ ├── ErpProductServiceImpl.java │ │ ├── ErpProductUnitService.java │ │ └── ErpProductUnitServiceImpl.java │ │ ├── purchase │ │ ├── ErpPurchaseInService.java │ │ ├── ErpPurchaseInServiceImpl.java │ │ ├── ErpPurchaseOrderService.java │ │ ├── ErpPurchaseOrderServiceImpl.java │ │ ├── ErpPurchaseReturnService.java │ │ ├── ErpPurchaseReturnServiceImpl.java │ │ ├── ErpSupplierService.java │ │ └── ErpSupplierServiceImpl.java │ │ ├── sale │ │ ├── ErpCustomerService.java │ │ ├── ErpCustomerServiceImpl.java │ │ ├── ErpSaleOrderService.java │ │ ├── ErpSaleOrderServiceImpl.java │ │ ├── ErpSaleOutService.java │ │ ├── ErpSaleOutServiceImpl.java │ │ ├── ErpSaleReturnService.java │ │ └── ErpSaleReturnServiceImpl.java │ │ ├── statistics │ │ ├── ErpPurchaseStatisticsService.java │ │ ├── ErpPurchaseStatisticsServiceImpl.java │ │ ├── ErpSaleStatisticsService.java │ │ └── ErpSaleStatisticsServiceImpl.java │ │ └── stock │ │ ├── ErpStockCheckService.java │ │ ├── ErpStockCheckServiceImpl.java │ │ ├── ErpStockInService.java │ │ ├── ErpStockInServiceImpl.java │ │ ├── ErpStockMoveService.java │ │ ├── ErpStockMoveServiceImpl.java │ │ ├── ErpStockOutService.java │ │ ├── ErpStockOutServiceImpl.java │ │ ├── ErpStockRecordService.java │ │ ├── ErpStockRecordServiceImpl.java │ │ ├── ErpStockService.java │ │ ├── ErpStockServiceImpl.java │ │ ├── ErpWarehouseService.java │ │ ├── ErpWarehouseServiceImpl.java │ │ └── bo │ │ └── ErpStockRecordCreateReqBO.java │ └── resources │ └── mapper │ └── statistics │ ├── ErpPurchaseStatisticsMapper.xml │ └── ErpSaleStatisticsMapper.xml ├── yudao-module-infra ├── pom.xml ├── yudao-module-infra-api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── module │ │ └── infra │ │ ├── api │ │ ├── file │ │ │ └── FileApi.java │ │ ├── logger │ │ │ ├── ApiAccessLogApi.java │ │ │ ├── ApiErrorLogApi.java │ │ │ └── dto │ │ │ │ ├── ApiAccessLogCreateReqDTO.java │ │ │ │ └── ApiErrorLogCreateReqDTO.java │ │ ├── package-info.java │ │ └── websocket │ │ │ └── WebSocketSenderApi.java │ │ └── enums │ │ ├── DictTypeConstants.java │ │ └── ErrorCodeConstants.java └── yudao-module-infra-biz │ ├── pom.xml │ └── src │ ├── main │ ├── java │ │ └── cn │ │ │ └── iocoder │ │ │ └── yudao │ │ │ └── module │ │ │ └── infra │ │ │ ├── api │ │ │ ├── file │ │ │ │ └── FileApiImpl.java │ │ │ ├── logger │ │ │ │ ├── ApiAccessLogApiImpl.java │ │ │ │ └── ApiErrorLogApiImpl.java │ │ │ ├── package-info.java │ │ │ └── websocket │ │ │ │ └── WebSocketSenderApiImpl.java │ │ │ ├── controller │ │ │ ├── admin │ │ │ │ ├── codegen │ │ │ │ │ ├── CodegenController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── CodegenCreateListReqVO.java │ │ │ │ │ │ ├── CodegenDetailRespVO.java │ │ │ │ │ │ ├── CodegenPreviewRespVO.java │ │ │ │ │ │ ├── CodegenUpdateReqVO.java │ │ │ │ │ │ ├── column │ │ │ │ │ │ ├── CodegenColumnRespVO.java │ │ │ │ │ │ └── CodegenColumnSaveReqVO.java │ │ │ │ │ │ └── table │ │ │ │ │ │ ├── CodegenTablePageReqVO.java │ │ │ │ │ │ ├── CodegenTableRespVO.java │ │ │ │ │ │ ├── CodegenTableSaveReqVO.java │ │ │ │ │ │ └── DatabaseTableRespVO.java │ │ │ │ ├── config │ │ │ │ │ ├── ConfigController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── ConfigPageReqVO.java │ │ │ │ │ │ ├── ConfigRespVO.java │ │ │ │ │ │ └── ConfigSaveReqVO.java │ │ │ │ ├── db │ │ │ │ │ ├── DataSourceConfigController.java │ │ │ │ │ ├── DatabaseDocController.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 │ │ │ │ │ └── package-info.java │ │ │ │ ├── file │ │ │ │ │ ├── FileConfigController.http │ │ │ │ │ ├── FileConfigController.java │ │ │ │ │ ├── FileController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── config │ │ │ │ │ │ ├── FileConfigPageReqVO.java │ │ │ │ │ │ ├── FileConfigRespVO.java │ │ │ │ │ │ └── FileConfigSaveReqVO.java │ │ │ │ │ │ └── file │ │ │ │ │ │ ├── FileCreateReqVO.java │ │ │ │ │ │ ├── FilePageReqVO.java │ │ │ │ │ │ ├── FilePresignedUrlRespVO.java │ │ │ │ │ │ ├── FileRespVO.java │ │ │ │ │ │ └── FileUploadReqVO.java │ │ │ │ ├── job │ │ │ │ │ ├── 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 │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ │ ├── convert │ │ │ ├── codegen │ │ │ │ └── CodegenConvert.java │ │ │ ├── config │ │ │ │ └── ConfigConvert.java │ │ │ ├── file │ │ │ │ └── FileConfigConvert.java │ │ │ ├── package-info.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 │ │ │ └── package-info.java │ │ │ ├── framework │ │ │ ├── codegen │ │ │ │ ├── config │ │ │ │ │ ├── CodegenConfiguration.java │ │ │ │ │ └── CodegenProperties.java │ │ │ │ └── package-info.java │ │ │ ├── file │ │ │ │ ├── config │ │ │ │ │ └── YudaoFileAutoConfiguration.java │ │ │ │ ├── core │ │ │ │ │ ├── client │ │ │ │ │ │ ├── AbstractFileClient.java │ │ │ │ │ │ ├── FileClient.java │ │ │ │ │ │ ├── FileClientConfig.java │ │ │ │ │ │ ├── FileClientFactory.java │ │ │ │ │ │ ├── FileClientFactoryImpl.java │ │ │ │ │ │ ├── db │ │ │ │ │ │ │ ├── DBFileClient.java │ │ │ │ │ │ │ └── DBFileClientConfig.java │ │ │ │ │ │ ├── ftp │ │ │ │ │ │ │ ├── FtpFileClient.java │ │ │ │ │ │ │ └── FtpFileClientConfig.java │ │ │ │ │ │ ├── local │ │ │ │ │ │ │ ├── LocalFileClient.java │ │ │ │ │ │ │ └── LocalFileClientConfig.java │ │ │ │ │ │ ├── s3 │ │ │ │ │ │ │ ├── FilePresignedUrlRespDTO.java │ │ │ │ │ │ │ ├── S3FileClient.java │ │ │ │ │ │ │ └── S3FileClientConfig.java │ │ │ │ │ │ └── sftp │ │ │ │ │ │ │ ├── SftpFileClient.java │ │ │ │ │ │ │ └── SftpFileClientConfig.java │ │ │ │ │ ├── enums │ │ │ │ │ │ └── FileStorageEnum.java │ │ │ │ │ └── utils │ │ │ │ │ │ └── FileTypeUtils.java │ │ │ │ └── package-info.java │ │ │ ├── monitor │ │ │ │ ├── config │ │ │ │ │ └── AdminServerConfiguration.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── security │ │ │ │ ├── config │ │ │ │ │ └── SecurityConfiguration.java │ │ │ │ └── core │ │ │ │ │ └── package-info.java │ │ │ └── web │ │ │ │ ├── config │ │ │ │ └── InfraWebConfiguration.java │ │ │ │ └── package-info.java │ │ │ ├── job │ │ │ ├── job │ │ │ │ └── JobLogCleanJob.java │ │ │ └── logger │ │ │ │ ├── AccessLogCleanJob.java │ │ │ │ └── ErrorLogCleanJob.java │ │ │ ├── mq │ │ │ ├── consumer │ │ │ │ └── package-info.java │ │ │ ├── message │ │ │ │ └── package-info.java │ │ │ └── producer │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── service │ │ │ ├── codegen │ │ │ │ ├── CodegenService.java │ │ │ │ ├── CodegenServiceImpl.java │ │ │ │ └── inner │ │ │ │ │ ├── CodegenBuilder.java │ │ │ │ │ └── CodegenEngine.java │ │ │ ├── config │ │ │ │ ├── ConfigService.java │ │ │ │ └── ConfigServiceImpl.java │ │ │ ├── db │ │ │ │ ├── DataSourceConfigService.java │ │ │ │ ├── DataSourceConfigServiceImpl.java │ │ │ │ ├── DatabaseTableService.java │ │ │ │ └── DatabaseTableServiceImpl.java │ │ │ ├── demo │ │ │ │ ├── demo01 │ │ │ │ │ ├── Demo01ContactService.java │ │ │ │ │ └── Demo01ContactServiceImpl.java │ │ │ │ ├── demo02 │ │ │ │ │ ├── Demo02CategoryService.java │ │ │ │ │ └── Demo02CategoryServiceImpl.java │ │ │ │ └── demo03 │ │ │ │ │ ├── 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 │ │ └── file │ │ └── erweima.jpg │ └── test │ ├── java │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── module │ │ └── infra │ │ ├── framework │ │ └── file │ │ │ └── core │ │ │ ├── ftp │ │ │ └── FtpFileClientTest.java │ │ │ ├── local │ │ │ └── LocalFileClientTest.java │ │ │ ├── s3 │ │ │ └── S3FileClientTest.java │ │ │ └── sftp │ │ │ └── SftpFileClientTest.java │ │ └── service │ │ ├── DefaultDatabaseQueryTest.java │ │ ├── codegen │ │ ├── CodegenServiceImplTest.java │ │ └── inner │ │ │ ├── CodegenBuilderTest.java │ │ │ ├── CodegenEngineAbstractTest.java │ │ │ ├── CodegenEngineVue2Test.java │ │ │ └── CodegenEngineVue3Test.java │ │ ├── config │ │ └── ConfigServiceImplTest.java │ │ ├── db │ │ ├── DataSourceConfigServiceImplTest.java │ │ └── DatabaseTableServiceImplTest.java │ │ ├── file │ │ ├── FileConfigServiceImplTest.java │ │ └── FileServiceImplTest.java │ │ ├── job │ │ ├── JobLogServiceImplTest.java │ │ └── JobServiceImplTest.java │ │ └── logger │ │ ├── ApiAccessLogServiceImplTest.java │ │ └── ApiErrorLogServiceImplTest.java │ └── resources │ ├── application-unit-test.yaml │ ├── codegen │ ├── table │ │ ├── category.json │ │ ├── contact.json │ │ ├── student.json │ │ └── teacher.json │ └── windows10 │ │ ├── vue2_master_erp │ │ ├── assert.json │ │ ├── java │ │ │ ├── ErrorCodeConstants_手动操作 │ │ │ ├── InfraStudentContactDO │ │ │ ├── InfraStudentContactMapper │ │ │ ├── InfraStudentController │ │ │ ├── InfraStudentDO │ │ │ ├── InfraStudentMapper │ │ │ ├── InfraStudentPageReqVO │ │ │ ├── InfraStudentRespVO │ │ │ ├── InfraStudentSaveReqVO │ │ │ ├── InfraStudentService │ │ │ ├── InfraStudentServiceImpl │ │ │ ├── InfraStudentServiceImplTest │ │ │ ├── InfraStudentTeacherDO │ │ │ └── InfraStudentTeacherMapper │ │ ├── js │ │ │ └── index │ │ ├── sql │ │ │ ├── h2 │ │ │ └── sql │ │ ├── vue │ │ │ ├── StudentContactForm │ │ │ ├── StudentContactList │ │ │ ├── StudentForm │ │ │ ├── StudentTeacherForm │ │ │ ├── StudentTeacherList │ │ │ └── index │ │ └── xml │ │ │ └── InfraStudentMapper │ │ ├── vue2_master_inner │ │ ├── assert.json │ │ ├── java │ │ │ ├── ErrorCodeConstants_手动操作 │ │ │ ├── InfraStudentContactDO │ │ │ ├── InfraStudentContactMapper │ │ │ ├── InfraStudentController │ │ │ ├── InfraStudentDO │ │ │ ├── InfraStudentMapper │ │ │ ├── InfraStudentPageReqVO │ │ │ ├── InfraStudentRespVO │ │ │ ├── InfraStudentSaveReqVO │ │ │ ├── InfraStudentService │ │ │ ├── InfraStudentServiceImpl │ │ │ ├── InfraStudentServiceImplTest │ │ │ ├── InfraStudentTeacherDO │ │ │ └── InfraStudentTeacherMapper │ │ ├── js │ │ │ └── index │ │ ├── sql │ │ │ ├── h2 │ │ │ └── sql │ │ ├── vue │ │ │ ├── StudentContactForm │ │ │ ├── StudentContactList │ │ │ ├── StudentForm │ │ │ ├── StudentTeacherForm │ │ │ ├── StudentTeacherList │ │ │ └── index │ │ └── xml │ │ │ └── InfraStudentMapper │ │ ├── vue2_master_normal │ │ ├── assert.json │ │ ├── java │ │ │ ├── ErrorCodeConstants_手动操作 │ │ │ ├── InfraStudentContactDO │ │ │ ├── InfraStudentContactMapper │ │ │ ├── InfraStudentController │ │ │ ├── InfraStudentDO │ │ │ ├── InfraStudentMapper │ │ │ ├── InfraStudentPageReqVO │ │ │ ├── InfraStudentRespVO │ │ │ ├── InfraStudentSaveReqVO │ │ │ ├── InfraStudentService │ │ │ ├── InfraStudentServiceImpl │ │ │ ├── InfraStudentServiceImplTest │ │ │ ├── InfraStudentTeacherDO │ │ │ └── InfraStudentTeacherMapper │ │ ├── js │ │ │ └── index │ │ ├── sql │ │ │ ├── h2 │ │ │ └── sql │ │ ├── vue │ │ │ ├── StudentContactForm │ │ │ ├── StudentForm │ │ │ ├── StudentTeacherForm │ │ │ └── index │ │ └── xml │ │ │ └── InfraStudentMapper │ │ ├── vue2_one │ │ ├── assert.json │ │ ├── java │ │ │ ├── ErrorCodeConstants_手动操作 │ │ │ ├── InfraStudentController │ │ │ ├── InfraStudentDO │ │ │ ├── InfraStudentMapper │ │ │ ├── InfraStudentPageReqVO │ │ │ ├── InfraStudentRespVO │ │ │ ├── InfraStudentSaveReqVO │ │ │ ├── InfraStudentService │ │ │ ├── InfraStudentServiceImpl │ │ │ └── InfraStudentServiceImplTest │ │ ├── js │ │ │ └── index │ │ ├── sql │ │ │ ├── h2 │ │ │ └── sql │ │ ├── vue │ │ │ ├── StudentForm │ │ │ └── index │ │ └── xml │ │ │ └── InfraStudentMapper │ │ ├── vue2_tree │ │ ├── assert.json │ │ ├── java │ │ │ ├── ErrorCodeConstants_手动操作 │ │ │ ├── InfraCategoryController │ │ │ ├── InfraCategoryDO │ │ │ ├── InfraCategoryListReqVO │ │ │ ├── InfraCategoryMapper │ │ │ ├── InfraCategoryRespVO │ │ │ ├── InfraCategorySaveReqVO │ │ │ ├── InfraCategoryService │ │ │ ├── InfraCategoryServiceImpl │ │ │ └── InfraCategoryServiceImplTest │ │ ├── js │ │ │ └── index │ │ ├── sql │ │ │ ├── h2 │ │ │ └── sql │ │ ├── vue │ │ │ ├── CategoryForm │ │ │ └── index │ │ └── xml │ │ │ └── InfraCategoryMapper │ │ ├── vue3_master_erp │ │ ├── assert.json │ │ ├── java │ │ │ ├── ErrorCodeConstants_手动操作 │ │ │ ├── InfraStudentContactDO │ │ │ ├── InfraStudentContactMapper │ │ │ ├── InfraStudentController │ │ │ ├── InfraStudentDO │ │ │ ├── InfraStudentMapper │ │ │ ├── InfraStudentPageReqVO │ │ │ ├── InfraStudentRespVO │ │ │ ├── InfraStudentSaveReqVO │ │ │ ├── InfraStudentService │ │ │ ├── InfraStudentServiceImpl │ │ │ ├── InfraStudentServiceImplTest │ │ │ ├── InfraStudentTeacherDO │ │ │ └── InfraStudentTeacherMapper │ │ ├── sql │ │ │ ├── h2 │ │ │ └── sql │ │ ├── ts │ │ │ └── index │ │ ├── vue │ │ │ ├── StudentContactForm │ │ │ ├── StudentContactList │ │ │ ├── StudentForm │ │ │ ├── StudentTeacherForm │ │ │ ├── StudentTeacherList │ │ │ └── index │ │ └── xml │ │ │ └── InfraStudentMapper │ │ ├── vue3_master_inner │ │ ├── assert.json │ │ ├── java │ │ │ ├── ErrorCodeConstants_手动操作 │ │ │ ├── InfraStudentContactDO │ │ │ ├── InfraStudentContactMapper │ │ │ ├── InfraStudentController │ │ │ ├── InfraStudentDO │ │ │ ├── InfraStudentMapper │ │ │ ├── InfraStudentPageReqVO │ │ │ ├── InfraStudentRespVO │ │ │ ├── InfraStudentSaveReqVO │ │ │ ├── InfraStudentService │ │ │ ├── InfraStudentServiceImpl │ │ │ ├── InfraStudentServiceImplTest │ │ │ ├── InfraStudentTeacherDO │ │ │ └── InfraStudentTeacherMapper │ │ ├── sql │ │ │ ├── h2 │ │ │ └── sql │ │ ├── ts │ │ │ └── index │ │ ├── vue │ │ │ ├── StudentContactForm │ │ │ ├── StudentContactList │ │ │ ├── StudentForm │ │ │ ├── StudentTeacherForm │ │ │ ├── StudentTeacherList │ │ │ └── index │ │ └── xml │ │ │ └── InfraStudentMapper │ │ ├── vue3_master_normal │ │ ├── assert.json │ │ ├── java │ │ │ ├── ErrorCodeConstants_手动操作 │ │ │ ├── InfraStudentContactDO │ │ │ ├── InfraStudentContactMapper │ │ │ ├── InfraStudentController │ │ │ ├── InfraStudentDO │ │ │ ├── InfraStudentMapper │ │ │ ├── InfraStudentPageReqVO │ │ │ ├── InfraStudentRespVO │ │ │ ├── InfraStudentSaveReqVO │ │ │ ├── InfraStudentService │ │ │ ├── InfraStudentServiceImpl │ │ │ ├── InfraStudentServiceImplTest │ │ │ ├── InfraStudentTeacherDO │ │ │ └── InfraStudentTeacherMapper │ │ ├── sql │ │ │ ├── h2 │ │ │ └── sql │ │ ├── ts │ │ │ └── index │ │ ├── vue │ │ │ ├── StudentContactForm │ │ │ ├── StudentForm │ │ │ ├── StudentTeacherForm │ │ │ └── index │ │ └── xml │ │ │ └── InfraStudentMapper │ │ ├── vue3_one │ │ ├── assert.json │ │ ├── java │ │ │ ├── ErrorCodeConstants_手动操作 │ │ │ ├── InfraStudentController │ │ │ ├── InfraStudentDO │ │ │ ├── InfraStudentMapper │ │ │ ├── InfraStudentPageReqVO │ │ │ ├── InfraStudentRespVO │ │ │ ├── InfraStudentSaveReqVO │ │ │ ├── InfraStudentService │ │ │ ├── InfraStudentServiceImpl │ │ │ └── InfraStudentServiceImplTest │ │ ├── sql │ │ │ ├── h2 │ │ │ └── sql │ │ ├── ts │ │ │ └── index │ │ ├── vue │ │ │ ├── StudentForm │ │ │ └── index │ │ └── xml │ │ │ └── InfraStudentMapper │ │ └── vue3_tree │ │ ├── assert.json │ │ ├── java │ │ ├── ErrorCodeConstants_手动操作 │ │ ├── InfraCategoryController │ │ ├── InfraCategoryDO │ │ ├── InfraCategoryListReqVO │ │ ├── InfraCategoryMapper │ │ ├── InfraCategoryRespVO │ │ ├── InfraCategorySaveReqVO │ │ ├── InfraCategoryService │ │ ├── InfraCategoryServiceImpl │ │ └── InfraCategoryServiceImplTest │ │ ├── sql │ │ ├── h2 │ │ └── sql │ │ ├── ts │ │ └── index │ │ ├── vue │ │ ├── CategoryForm │ │ └── index │ │ └── xml │ │ └── InfraCategoryMapper │ ├── logback.xml │ └── sql │ ├── clean.sql │ └── create_tables.sql ├── yudao-module-mall ├── pom.xml ├── yudao-module-product-api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── module │ │ └── product │ │ ├── api │ │ ├── category │ │ │ └── ProductCategoryApi.java │ │ ├── comment │ │ │ ├── ProductCommentApi.java │ │ │ └── dto │ │ │ │ └── ProductCommentCreateReqDTO.java │ │ ├── package-info.java │ │ ├── property │ │ │ └── dto │ │ │ │ └── ProductPropertyValueDetailRespDTO.java │ │ ├── sku │ │ │ ├── ProductSkuApi.java │ │ │ └── dto │ │ │ │ ├── ProductSkuRespDTO.java │ │ │ │ └── ProductSkuUpdateStockReqDTO.java │ │ └── spu │ │ │ ├── ProductSpuApi.java │ │ │ └── dto │ │ │ └── ProductSpuRespDTO.java │ │ └── enums │ │ ├── DictTypeConstants.java │ │ ├── ErrorCodeConstants.java │ │ ├── ProductConstants.java │ │ ├── comment │ │ ├── ProductCommentAuditStatusEnum.java │ │ └── ProductCommentScoresEnum.java │ │ └── spu │ │ └── ProductSpuStatusEnum.java ├── yudao-module-product-biz │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── cn │ │ │ └── iocoder │ │ │ └── yudao │ │ │ └── module │ │ │ └── product │ │ │ ├── api │ │ │ ├── category │ │ │ │ └── ProductCategoryApiImpl.java │ │ │ ├── comment │ │ │ │ └── ProductCommentApiImpl.java │ │ │ ├── package-info.java │ │ │ ├── sku │ │ │ │ └── ProductSkuApiImpl.java │ │ │ └── spu │ │ │ │ └── ProductSpuApiImpl.java │ │ │ ├── controller │ │ │ ├── admin │ │ │ │ ├── brand │ │ │ │ │ ├── ProductBrandController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── ProductBrandBaseVO.java │ │ │ │ │ │ ├── ProductBrandCreateReqVO.java │ │ │ │ │ │ ├── ProductBrandListReqVO.java │ │ │ │ │ │ ├── ProductBrandPageReqVO.java │ │ │ │ │ │ ├── ProductBrandRespVO.java │ │ │ │ │ │ ├── ProductBrandSimpleRespVO.java │ │ │ │ │ │ └── ProductBrandUpdateReqVO.java │ │ │ │ ├── category │ │ │ │ │ ├── ProductCategoryController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── ProductCategoryListReqVO.java │ │ │ │ │ │ ├── ProductCategoryRespVO.java │ │ │ │ │ │ └── ProductCategorySaveReqVO.java │ │ │ │ ├── comment │ │ │ │ │ ├── ProductCommentController.http │ │ │ │ │ ├── ProductCommentController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── ProductCommentCreateReqVO.java │ │ │ │ │ │ ├── ProductCommentPageReqVO.java │ │ │ │ │ │ ├── ProductCommentReplyReqVO.java │ │ │ │ │ │ ├── ProductCommentRespVO.java │ │ │ │ │ │ └── ProductCommentUpdateVisibleReqVO.java │ │ │ │ ├── favorite │ │ │ │ │ ├── ProductFavoriteController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── ProductFavoriteBaseVO.java │ │ │ │ │ │ ├── ProductFavoritePageReqVO.java │ │ │ │ │ │ ├── ProductFavoriteReqVO.java │ │ │ │ │ │ └── ProductFavoriteRespVO.java │ │ │ │ ├── history │ │ │ │ │ ├── ProductBrowseHistoryController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── ProductBrowseHistoryPageReqVO.java │ │ │ │ │ │ └── ProductBrowseHistoryRespVO.java │ │ │ │ ├── property │ │ │ │ │ ├── ProductPropertyController.java │ │ │ │ │ ├── ProductPropertyValueController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── property │ │ │ │ │ │ ├── ProductPropertyPageReqVO.java │ │ │ │ │ │ ├── ProductPropertyRespVO.java │ │ │ │ │ │ └── ProductPropertySaveReqVO.java │ │ │ │ │ │ └── value │ │ │ │ │ │ ├── ProductPropertyValuePageReqVO.java │ │ │ │ │ │ ├── ProductPropertyValueRespVO.java │ │ │ │ │ │ └── ProductPropertyValueSaveReqVO.java │ │ │ │ └── spu │ │ │ │ │ ├── ProductSpuController.http │ │ │ │ │ ├── ProductSpuController.java │ │ │ │ │ └── vo │ │ │ │ │ ├── ProductSkuRespVO.java │ │ │ │ │ ├── ProductSkuSaveReqVO.java │ │ │ │ │ ├── ProductSpuPageReqVO.java │ │ │ │ │ ├── ProductSpuRespVO.java │ │ │ │ │ ├── ProductSpuSaveReqVO.java │ │ │ │ │ ├── ProductSpuSimpleRespVO.java │ │ │ │ │ └── ProductSpuUpdateStatusReqVO.java │ │ │ └── app │ │ │ │ ├── category │ │ │ │ ├── AppCategoryController.java │ │ │ │ └── vo │ │ │ │ │ └── AppCategoryRespVO.java │ │ │ │ ├── comment │ │ │ │ ├── AppCommentController.http │ │ │ │ ├── AppProductCommentController.java │ │ │ │ └── vo │ │ │ │ │ ├── AppCommentPageReqVO.java │ │ │ │ │ └── AppProductCommentRespVO.java │ │ │ │ ├── favorite │ │ │ │ ├── AppFavoriteController.java │ │ │ │ └── vo │ │ │ │ │ ├── AppFavoriteBatchReqVO.java │ │ │ │ │ ├── AppFavoritePageReqVO.java │ │ │ │ │ ├── AppFavoriteReqVO.java │ │ │ │ │ └── AppFavoriteRespVO.java │ │ │ │ ├── history │ │ │ │ ├── AppProductBrowseHistoryController.java │ │ │ │ └── vo │ │ │ │ │ ├── AppProductBrowseHistoryDeleteReqVO.java │ │ │ │ │ ├── AppProductBrowseHistoryPageReqVO.java │ │ │ │ │ └── AppProductBrowseHistoryRespVO.java │ │ │ │ ├── property │ │ │ │ ├── package-info.java │ │ │ │ └── vo │ │ │ │ │ ├── property │ │ │ │ │ └── package-info.java │ │ │ │ │ └── value │ │ │ │ │ └── AppProductPropertyValueDetailRespVO.java │ │ │ │ └── spu │ │ │ │ ├── AppProductSpuController.http │ │ │ │ ├── AppProductSpuController.java │ │ │ │ └── vo │ │ │ │ ├── AppProductSpuDetailRespVO.java │ │ │ │ ├── AppProductSpuPageReqVO.java │ │ │ │ └── AppProductSpuRespVO.java │ │ │ ├── convert │ │ │ ├── brand │ │ │ │ └── ProductBrandConvert.java │ │ │ ├── comment │ │ │ │ └── ProductCommentConvert.java │ │ │ ├── favorite │ │ │ │ └── ProductFavoriteConvert.java │ │ │ ├── sku │ │ │ │ └── ProductSkuConvert.java │ │ │ └── spu │ │ │ │ └── ProductSpuConvert.java │ │ │ ├── dal │ │ │ ├── dataobject │ │ │ │ ├── brand │ │ │ │ │ └── ProductBrandDO.java │ │ │ │ ├── category │ │ │ │ │ └── ProductCategoryDO.java │ │ │ │ ├── comment │ │ │ │ │ └── ProductCommentDO.java │ │ │ │ ├── favorite │ │ │ │ │ └── ProductFavoriteDO.java │ │ │ │ ├── history │ │ │ │ │ └── ProductBrowseHistoryDO.java │ │ │ │ ├── property │ │ │ │ │ ├── ProductPropertyDO.java │ │ │ │ │ └── ProductPropertyValueDO.java │ │ │ │ ├── sku │ │ │ │ │ └── ProductSkuDO.java │ │ │ │ └── spu │ │ │ │ │ └── ProductSpuDO.java │ │ │ └── mysql │ │ │ │ ├── brand │ │ │ │ └── ProductBrandMapper.java │ │ │ │ ├── category │ │ │ │ └── ProductCategoryMapper.java │ │ │ │ ├── comment │ │ │ │ └── ProductCommentMapper.java │ │ │ │ ├── favorite │ │ │ │ └── ProductFavoriteMapper.java │ │ │ │ ├── history │ │ │ │ └── ProductBrowseHistoryMapper.java │ │ │ │ ├── property │ │ │ │ ├── ProductPropertyMapper.java │ │ │ │ └── ProductPropertyValueMapper.java │ │ │ │ ├── sku │ │ │ │ └── ProductSkuMapper.java │ │ │ │ └── spu │ │ │ │ └── ProductSpuMapper.java │ │ │ ├── framework │ │ │ ├── package-info.java │ │ │ └── web │ │ │ │ ├── config │ │ │ │ └── ProductWebConfiguration.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ └── service │ │ │ ├── brand │ │ │ ├── ProductBrandService.java │ │ │ └── ProductBrandServiceImpl.java │ │ │ ├── category │ │ │ ├── ProductCategoryService.java │ │ │ └── ProductCategoryServiceImpl.java │ │ │ ├── comment │ │ │ ├── ProductCommentService.java │ │ │ └── ProductCommentServiceImpl.java │ │ │ ├── favorite │ │ │ ├── ProductFavoriteService.java │ │ │ └── ProductFavoriteServiceImpl.java │ │ │ ├── history │ │ │ ├── ProductBrowseHistoryService.java │ │ │ └── ProductBrowseHistoryServiceImpl.java │ │ │ ├── property │ │ │ ├── ProductPropertyService.java │ │ │ ├── ProductPropertyServiceImpl.java │ │ │ ├── ProductPropertyValueService.java │ │ │ └── ProductPropertyValueServiceImpl.java │ │ │ ├── sku │ │ │ ├── ProductSkuService.java │ │ │ └── ProductSkuServiceImpl.java │ │ │ └── spu │ │ │ ├── ProductSpuService.java │ │ │ └── ProductSpuServiceImpl.java │ │ └── test │ │ ├── java │ │ └── cn │ │ │ └── iocoder │ │ │ └── yudao │ │ │ └── module │ │ │ └── product │ │ │ └── service │ │ │ ├── brand │ │ │ └── ProductBrandServiceImplTest.java │ │ │ ├── category │ │ │ └── ProductCategoryServiceImplTest.java │ │ │ ├── comment │ │ │ └── ProductCommentServiceImplTest.java │ │ │ ├── sku │ │ │ └── ProductSkuServiceTest.java │ │ │ └── spu │ │ │ └── ProductSpuServiceImplTest.java │ │ └── resources │ │ ├── application-unit-test.yaml │ │ ├── logback.xml │ │ └── sql │ │ ├── clean.sql │ │ └── create_tables.sql ├── yudao-module-promotion-api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── module │ │ └── promotion │ │ ├── api │ │ ├── bargain │ │ │ ├── BargainActivityApi.java │ │ │ ├── BargainRecordApi.java │ │ │ └── dto │ │ │ │ └── BargainValidateJoinRespDTO.java │ │ ├── combination │ │ │ ├── CombinationRecordApi.java │ │ │ └── dto │ │ │ │ ├── CombinationRecordCreateReqDTO.java │ │ │ │ ├── CombinationRecordCreateRespDTO.java │ │ │ │ └── CombinationValidateJoinRespDTO.java │ │ ├── coupon │ │ │ ├── CouponApi.java │ │ │ └── dto │ │ │ │ ├── CouponRespDTO.java │ │ │ │ ├── CouponUseReqDTO.java │ │ │ │ └── CouponValidReqDTO.java │ │ ├── discount │ │ │ ├── DiscountActivityApi.java │ │ │ └── dto │ │ │ │ └── DiscountProductRespDTO.java │ │ ├── reward │ │ │ ├── RewardActivityApi.java │ │ │ └── dto │ │ │ │ └── RewardActivityMatchRespDTO.java │ │ └── seckill │ │ │ ├── SeckillActivityApi.java │ │ │ └── dto │ │ │ └── SeckillValidateJoinRespDTO.java │ │ └── enums │ │ ├── DictTypeConstants.java │ │ ├── ErrorCodeConstants.java │ │ ├── banner │ │ └── BannerPositionEnum.java │ │ ├── bargain │ │ └── BargainRecordStatusEnum.java │ │ ├── combination │ │ └── CombinationRecordStatusEnum.java │ │ ├── common │ │ ├── PromotionActivityStatusEnum.java │ │ ├── PromotionConditionTypeEnum.java │ │ ├── PromotionDiscountTypeEnum.java │ │ ├── PromotionProductScopeEnum.java │ │ └── PromotionTypeEnum.java │ │ ├── coupon │ │ ├── CouponStatusEnum.java │ │ ├── CouponTakeTypeEnum.java │ │ └── CouponTemplateValidityTypeEnum.java │ │ └── diy │ │ └── DiyPageEnum.java ├── yudao-module-promotion-biz │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── cn │ │ │ │ └── iocoder │ │ │ │ └── yudao │ │ │ │ └── module │ │ │ │ └── promotion │ │ │ │ ├── api │ │ │ │ ├── bargain │ │ │ │ │ ├── BargainActivityApiImpl.java │ │ │ │ │ └── BargainRecordApiImpl.java │ │ │ │ ├── combination │ │ │ │ │ └── CombinationRecordApiImpl.java │ │ │ │ ├── coupon │ │ │ │ │ └── CouponApiImpl.java │ │ │ │ ├── discount │ │ │ │ │ └── DiscountActivityApiImpl.java │ │ │ │ ├── reward │ │ │ │ │ └── RewardActivityApiImpl.java │ │ │ │ └── seckill │ │ │ │ │ └── SeckillActivityApiImpl.java │ │ │ │ ├── controller │ │ │ │ ├── admin │ │ │ │ │ ├── article │ │ │ │ │ │ ├── ArticleCategoryController.java │ │ │ │ │ │ ├── ArticleController.java │ │ │ │ │ │ └── vo │ │ │ │ │ │ │ ├── article │ │ │ │ │ │ │ ├── ArticleBaseVO.java │ │ │ │ │ │ │ ├── ArticleCreateReqVO.java │ │ │ │ │ │ │ ├── ArticlePageReqVO.java │ │ │ │ │ │ │ ├── ArticleRespVO.java │ │ │ │ │ │ │ └── ArticleUpdateReqVO.java │ │ │ │ │ │ │ └── category │ │ │ │ │ │ │ ├── ArticleCategoryBaseVO.java │ │ │ │ │ │ │ ├── ArticleCategoryCreateReqVO.java │ │ │ │ │ │ │ ├── ArticleCategoryPageReqVO.java │ │ │ │ │ │ │ ├── ArticleCategoryRespVO.java │ │ │ │ │ │ │ ├── ArticleCategorySimpleRespVO.java │ │ │ │ │ │ │ └── ArticleCategoryUpdateReqVO.java │ │ │ │ │ ├── banner │ │ │ │ │ │ ├── BannerController.java │ │ │ │ │ │ └── vo │ │ │ │ │ │ │ ├── BannerBaseVO.java │ │ │ │ │ │ │ ├── BannerCreateReqVO.java │ │ │ │ │ │ │ ├── BannerPageReqVO.java │ │ │ │ │ │ │ ├── BannerRespVO.java │ │ │ │ │ │ │ └── BannerUpdateReqVO.java │ │ │ │ │ ├── bargain │ │ │ │ │ │ ├── BargainActivityController.java │ │ │ │ │ │ ├── BargainHelpController.java │ │ │ │ │ │ ├── BargainRecordController.java │ │ │ │ │ │ └── vo │ │ │ │ │ │ │ ├── activity │ │ │ │ │ │ │ ├── BargainActivityBaseVO.java │ │ │ │ │ │ │ ├── BargainActivityCreateReqVO.java │ │ │ │ │ │ │ ├── BargainActivityPageItemRespVO.java │ │ │ │ │ │ │ ├── BargainActivityPageReqVO.java │ │ │ │ │ │ │ ├── BargainActivityRespVO.java │ │ │ │ │ │ │ └── BargainActivityUpdateReqVO.java │ │ │ │ │ │ │ ├── help │ │ │ │ │ │ │ ├── BargainHelpBaseVO.java │ │ │ │ │ │ │ ├── BargainHelpPageReqVO.java │ │ │ │ │ │ │ └── BargainHelpRespVO.java │ │ │ │ │ │ │ └── recrod │ │ │ │ │ │ │ ├── BargainRecordBaseVO.java │ │ │ │ │ │ │ ├── BargainRecordPageItemRespVO.java │ │ │ │ │ │ │ └── BargainRecordPageReqVO.java │ │ │ │ │ ├── combination │ │ │ │ │ │ ├── CombinationActivityController.java │ │ │ │ │ │ ├── CombinationRecordController.java │ │ │ │ │ │ └── vo │ │ │ │ │ │ │ ├── activity │ │ │ │ │ │ │ ├── CombinationActivityBaseVO.java │ │ │ │ │ │ │ ├── CombinationActivityCreateReqVO.java │ │ │ │ │ │ │ ├── CombinationActivityPageItemRespVO.java │ │ │ │ │ │ │ ├── CombinationActivityPageReqVO.java │ │ │ │ │ │ │ ├── CombinationActivityRespVO.java │ │ │ │ │ │ │ └── CombinationActivityUpdateReqVO.java │ │ │ │ │ │ │ ├── product │ │ │ │ │ │ │ ├── CombinationProductBaseVO.java │ │ │ │ │ │ │ ├── CombinationProductPageReqVO.java │ │ │ │ │ │ │ └── CombinationProductRespVO.java │ │ │ │ │ │ │ └── recrod │ │ │ │ │ │ │ ├── CombinationRecordBaseVO.java │ │ │ │ │ │ │ ├── CombinationRecordPageItemRespVO.java │ │ │ │ │ │ │ ├── CombinationRecordReqPage2VO.java │ │ │ │ │ │ │ ├── CombinationRecordReqPageVO.java │ │ │ │ │ │ │ └── CombinationRecordSummaryVO.java │ │ │ │ │ ├── coupon │ │ │ │ │ │ ├── CouponController.java │ │ │ │ │ │ ├── CouponTemplateController.java │ │ │ │ │ │ └── vo │ │ │ │ │ │ │ ├── coupon │ │ │ │ │ │ │ ├── CouponBaseVO.java │ │ │ │ │ │ │ ├── CouponPageItemRespVO.java │ │ │ │ │ │ │ ├── CouponPageReqVO.java │ │ │ │ │ │ │ ├── CouponRespVO.java │ │ │ │ │ │ │ └── CouponSendReqVO.java │ │ │ │ │ │ │ └── template │ │ │ │ │ │ │ ├── CouponTemplateBaseVO.java │ │ │ │ │ │ │ ├── CouponTemplateCreateReqVO.java │ │ │ │ │ │ │ ├── CouponTemplatePageReqVO.java │ │ │ │ │ │ │ ├── CouponTemplateRespVO.java │ │ │ │ │ │ │ ├── CouponTemplateUpdateReqVO.java │ │ │ │ │ │ │ └── CouponTemplateUpdateStatusReqVO.java │ │ │ │ │ ├── discount │ │ │ │ │ │ ├── DiscountActivityController.java │ │ │ │ │ │ └── vo │ │ │ │ │ │ │ ├── DiscountActivityBaseVO.java │ │ │ │ │ │ │ ├── DiscountActivityCreateReqVO.java │ │ │ │ │ │ │ ├── DiscountActivityDetailRespVO.java │ │ │ │ │ │ │ ├── DiscountActivityPageReqVO.java │ │ │ │ │ │ │ ├── DiscountActivityRespVO.java │ │ │ │ │ │ │ └── DiscountActivityUpdateReqVO.java │ │ │ │ │ ├── diy │ │ │ │ │ │ ├── DiyPageController.java │ │ │ │ │ │ ├── DiyTemplateController.java │ │ │ │ │ │ └── vo │ │ │ │ │ │ │ ├── page │ │ │ │ │ │ │ ├── DiyPageBaseVO.java │ │ │ │ │ │ │ ├── DiyPageCreateReqVO.java │ │ │ │ │ │ │ ├── DiyPagePageReqVO.java │ │ │ │ │ │ │ ├── DiyPagePropertyRespVO.java │ │ │ │ │ │ │ ├── DiyPagePropertyUpdateRequestVO.java │ │ │ │ │ │ │ ├── DiyPageRespVO.java │ │ │ │ │ │ │ └── DiyPageUpdateReqVO.java │ │ │ │ │ │ │ └── template │ │ │ │ │ │ │ ├── DiyTemplateBaseVO.java │ │ │ │ │ │ │ ├── DiyTemplateCreateReqVO.java │ │ │ │ │ │ │ ├── DiyTemplatePageReqVO.java │ │ │ │ │ │ │ ├── DiyTemplatePropertyRespVO.java │ │ │ │ │ │ │ ├── DiyTemplatePropertyUpdateRequestVO.java │ │ │ │ │ │ │ ├── DiyTemplateRespVO.java │ │ │ │ │ │ │ └── DiyTemplateUpdateReqVO.java │ │ │ │ │ ├── reward │ │ │ │ │ │ ├── RewardActivityController.java │ │ │ │ │ │ └── vo │ │ │ │ │ │ │ ├── RewardActivityBaseVO.java │ │ │ │ │ │ │ ├── RewardActivityCreateReqVO.java │ │ │ │ │ │ │ ├── RewardActivityPageReqVO.java │ │ │ │ │ │ │ ├── RewardActivityRespVO.java │ │ │ │ │ │ │ └── RewardActivityUpdateReqVO.java │ │ │ │ │ └── seckill │ │ │ │ │ │ ├── SeckillActivityController.java │ │ │ │ │ │ ├── SeckillConfigController.java │ │ │ │ │ │ └── vo │ │ │ │ │ │ ├── activity │ │ │ │ │ │ ├── SeckillActivityBaseVO.java │ │ │ │ │ │ ├── SeckillActivityCreateReqVO.java │ │ │ │ │ │ ├── SeckillActivityDetailRespVO.java │ │ │ │ │ │ ├── SeckillActivityPageReqVO.java │ │ │ │ │ │ ├── SeckillActivityRespVO.java │ │ │ │ │ │ └── SeckillActivityUpdateReqVO.java │ │ │ │ │ │ ├── config │ │ │ │ │ │ ├── SeckillConfigBaseVO.java │ │ │ │ │ │ ├── SeckillConfigCreateReqVO.java │ │ │ │ │ │ ├── SeckillConfigPageReqVO.java │ │ │ │ │ │ ├── SeckillConfigRespVO.java │ │ │ │ │ │ ├── SeckillConfigSimpleRespVO.java │ │ │ │ │ │ ├── SeckillConfigUpdateReqVO.java │ │ │ │ │ │ └── SeckillConfigUpdateStatusReqVo.java │ │ │ │ │ │ └── product │ │ │ │ │ │ ├── SeckillProductBaseVO.java │ │ │ │ │ │ └── SeckillProductRespVO.java │ │ │ │ └── app │ │ │ │ │ ├── activity │ │ │ │ │ ├── AppActivityController.http │ │ │ │ │ ├── AppActivityController.java │ │ │ │ │ └── vo │ │ │ │ │ │ └── AppActivityRespVO.java │ │ │ │ │ ├── article │ │ │ │ │ ├── AppArticleCategoryController.java │ │ │ │ │ ├── AppArticleController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── article │ │ │ │ │ │ ├── AppArticlePageReqVO.java │ │ │ │ │ │ └── AppArticleRespVO.java │ │ │ │ │ │ └── category │ │ │ │ │ │ └── AppArticleCategoryRespVO.java │ │ │ │ │ ├── banner │ │ │ │ │ ├── AppBannerController.java │ │ │ │ │ └── vo │ │ │ │ │ │ └── AppBannerRespVO.java │ │ │ │ │ ├── bargain │ │ │ │ │ ├── AppBargainActivityController.java │ │ │ │ │ ├── AppBargainHelpController.http │ │ │ │ │ ├── AppBargainHelpController.java │ │ │ │ │ ├── AppBargainRecordController.http │ │ │ │ │ ├── AppBargainRecordController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── activity │ │ │ │ │ │ ├── AppBargainActivityDetailRespVO.java │ │ │ │ │ │ └── AppBargainActivityRespVO.java │ │ │ │ │ │ ├── help │ │ │ │ │ │ ├── AppBargainHelpCreateReqVO.java │ │ │ │ │ │ └── AppBargainHelpRespVO.java │ │ │ │ │ │ └── record │ │ │ │ │ │ ├── AppBargainRecordCreateReqVO.java │ │ │ │ │ │ ├── AppBargainRecordDetailRespVO.java │ │ │ │ │ │ ├── AppBargainRecordRespVO.java │ │ │ │ │ │ └── AppBargainRecordSummaryRespVO.java │ │ │ │ │ ├── combination │ │ │ │ │ ├── AppCombinationActivityController.java │ │ │ │ │ ├── AppCombinationRecordController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── activity │ │ │ │ │ │ ├── AppCombinationActivityDetailRespVO.java │ │ │ │ │ │ └── AppCombinationActivityRespVO.java │ │ │ │ │ │ └── record │ │ │ │ │ │ ├── AppCombinationRecordDetailRespVO.java │ │ │ │ │ │ ├── AppCombinationRecordPageReqVO.java │ │ │ │ │ │ ├── AppCombinationRecordRespVO.java │ │ │ │ │ │ └── AppCombinationRecordSummaryRespVO.java │ │ │ │ │ ├── coupon │ │ │ │ │ ├── AppCouponController.java │ │ │ │ │ ├── AppCouponTemplateController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── coupon │ │ │ │ │ │ ├── AppCouponMatchReqVO.java │ │ │ │ │ │ ├── AppCouponMatchRespVO.java │ │ │ │ │ │ ├── AppCouponPageReqVO.java │ │ │ │ │ │ ├── AppCouponRespVO.java │ │ │ │ │ │ └── AppCouponTakeReqVO.java │ │ │ │ │ │ └── template │ │ │ │ │ │ ├── AppCouponTemplatePageReqVO.java │ │ │ │ │ │ └── AppCouponTemplateRespVO.java │ │ │ │ │ ├── diy │ │ │ │ │ ├── AppDiyPageController.java │ │ │ │ │ ├── AppDiyTemplateController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── AppDiyPagePropertyRespVO.java │ │ │ │ │ │ └── AppDiyTemplatePropertyRespVO.java │ │ │ │ │ ├── reward │ │ │ │ │ ├── AppRewardActivityController.java │ │ │ │ │ └── vo │ │ │ │ │ │ └── AppRewardActivityRespVO.java │ │ │ │ │ └── seckill │ │ │ │ │ ├── AppSeckillActivityController.java │ │ │ │ │ ├── AppSeckillConfigController.java │ │ │ │ │ └── vo │ │ │ │ │ ├── activity │ │ │ │ │ ├── AppSeckillActivityDetailRespVO.java │ │ │ │ │ ├── AppSeckillActivityNowRespVO.java │ │ │ │ │ ├── AppSeckillActivityPageReqVO.java │ │ │ │ │ └── AppSeckillActivityRespVO.java │ │ │ │ │ └── config │ │ │ │ │ └── AppSeckillConfigRespVO.java │ │ │ │ ├── convert │ │ │ │ ├── article │ │ │ │ │ ├── ArticleCategoryConvert.java │ │ │ │ │ └── ArticleConvert.java │ │ │ │ ├── banner │ │ │ │ │ └── BannerConvert.java │ │ │ │ ├── bargain │ │ │ │ │ ├── BargainActivityConvert.java │ │ │ │ │ ├── BargainHelpConvert.java │ │ │ │ │ └── BargainRecordConvert.java │ │ │ │ ├── combination │ │ │ │ │ └── CombinationActivityConvert.java │ │ │ │ ├── coupon │ │ │ │ │ ├── CouponConvert.java │ │ │ │ │ └── CouponTemplateConvert.java │ │ │ │ ├── discount │ │ │ │ │ └── DiscountActivityConvert.java │ │ │ │ ├── diy │ │ │ │ │ ├── DiyPageConvert.java │ │ │ │ │ └── DiyTemplateConvert.java │ │ │ │ ├── reward │ │ │ │ │ └── RewardActivityConvert.java │ │ │ │ └── seckill │ │ │ │ │ ├── seckillactivity │ │ │ │ │ └── SeckillActivityConvert.java │ │ │ │ │ └── seckillconfig │ │ │ │ │ └── SeckillConfigConvert.java │ │ │ │ ├── dal │ │ │ │ ├── dataobject │ │ │ │ │ ├── article │ │ │ │ │ │ ├── ArticleCategoryDO.java │ │ │ │ │ │ └── ArticleDO.java │ │ │ │ │ ├── banner │ │ │ │ │ │ └── BannerDO.java │ │ │ │ │ ├── bargain │ │ │ │ │ │ ├── BargainActivityDO.java │ │ │ │ │ │ ├── BargainHelpDO.java │ │ │ │ │ │ └── BargainRecordDO.java │ │ │ │ │ ├── combination │ │ │ │ │ │ ├── CombinationActivityDO.java │ │ │ │ │ │ ├── CombinationProductDO.java │ │ │ │ │ │ └── CombinationRecordDO.java │ │ │ │ │ ├── coupon │ │ │ │ │ │ ├── CouponDO.java │ │ │ │ │ │ └── CouponTemplateDO.java │ │ │ │ │ ├── discount │ │ │ │ │ │ ├── DiscountActivityDO.java │ │ │ │ │ │ └── DiscountProductDO.java │ │ │ │ │ ├── diy │ │ │ │ │ │ ├── DiyPageDO.java │ │ │ │ │ │ └── DiyTemplateDO.java │ │ │ │ │ ├── reward │ │ │ │ │ │ └── RewardActivityDO.java │ │ │ │ │ └── seckill │ │ │ │ │ │ ├── SeckillActivityDO.java │ │ │ │ │ │ ├── SeckillConfigDO.java │ │ │ │ │ │ └── SeckillProductDO.java │ │ │ │ └── mysql │ │ │ │ │ ├── article │ │ │ │ │ ├── ArticleCategoryMapper.java │ │ │ │ │ └── ArticleMapper.java │ │ │ │ │ ├── banner │ │ │ │ │ └── BannerMapper.java │ │ │ │ │ ├── bargain │ │ │ │ │ ├── BargainActivityMapper.java │ │ │ │ │ ├── BargainHelpMapper.java │ │ │ │ │ └── BargainRecordMapper.java │ │ │ │ │ ├── combination │ │ │ │ │ ├── CombinationActivityMapper.java │ │ │ │ │ ├── CombinationProductMapper.java │ │ │ │ │ └── CombinationRecordMapper.java │ │ │ │ │ ├── coupon │ │ │ │ │ ├── CouponMapper.java │ │ │ │ │ └── CouponTemplateMapper.java │ │ │ │ │ ├── discount │ │ │ │ │ ├── DiscountActivityMapper.java │ │ │ │ │ └── DiscountProductMapper.java │ │ │ │ │ ├── diy │ │ │ │ │ ├── DiyPageMapper.java │ │ │ │ │ └── DiyTemplateMapper.java │ │ │ │ │ ├── reward │ │ │ │ │ └── RewardActivityMapper.java │ │ │ │ │ └── seckill │ │ │ │ │ ├── seckillactivity │ │ │ │ │ ├── SeckillActivityMapper.java │ │ │ │ │ └── SeckillProductMapper.java │ │ │ │ │ └── seckillconfig │ │ │ │ │ └── SeckillConfigMapper.java │ │ │ │ ├── framework │ │ │ │ ├── package-info.java │ │ │ │ └── web │ │ │ │ │ ├── config │ │ │ │ │ └── PromotionWebConfiguration.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── job │ │ │ │ ├── combination │ │ │ │ │ └── CombinationRecordExpireJob.java │ │ │ │ ├── coupon │ │ │ │ │ └── CouponExpireJob.java │ │ │ │ └── package-info.java │ │ │ │ ├── mq │ │ │ │ ├── consumer │ │ │ │ │ ├── coupon │ │ │ │ │ │ └── CouponTakeByRegisterConsumer.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── message │ │ │ │ │ └── package-info.java │ │ │ │ └── producer │ │ │ │ │ └── package-info.java │ │ │ │ ├── package-info.java │ │ │ │ ├── service │ │ │ │ ├── article │ │ │ │ │ ├── ArticleCategoryService.java │ │ │ │ │ ├── ArticleCategoryServiceImpl.java │ │ │ │ │ ├── ArticleService.java │ │ │ │ │ └── ArticleServiceImpl.java │ │ │ │ ├── banner │ │ │ │ │ ├── BannerService.java │ │ │ │ │ └── BannerServiceImpl.java │ │ │ │ ├── bargain │ │ │ │ │ ├── BargainActivityService.java │ │ │ │ │ ├── BargainActivityServiceImpl.java │ │ │ │ │ ├── BargainHelpService.java │ │ │ │ │ ├── BargainHelpServiceImpl.java │ │ │ │ │ ├── BargainRecordService.java │ │ │ │ │ └── BargainRecordServiceImpl.java │ │ │ │ ├── combination │ │ │ │ │ ├── CombinationActivityService.java │ │ │ │ │ ├── CombinationActivityServiceImpl.java │ │ │ │ │ ├── CombinationRecordService.java │ │ │ │ │ └── CombinationRecordServiceImpl.java │ │ │ │ ├── coupon │ │ │ │ │ ├── CouponService.java │ │ │ │ │ ├── CouponServiceImpl.java │ │ │ │ │ ├── CouponTemplateService.java │ │ │ │ │ └── CouponTemplateServiceImpl.java │ │ │ │ ├── discount │ │ │ │ │ ├── DiscountActivityService.java │ │ │ │ │ └── DiscountActivityServiceImpl.java │ │ │ │ ├── diy │ │ │ │ │ ├── DiyPageService.java │ │ │ │ │ ├── DiyPageServiceImpl.java │ │ │ │ │ ├── DiyTemplateService.java │ │ │ │ │ └── DiyTemplateServiceImpl.java │ │ │ │ ├── reward │ │ │ │ │ ├── RewardActivityService.java │ │ │ │ │ └── RewardActivityServiceImpl.java │ │ │ │ └── seckill │ │ │ │ │ ├── SeckillActivityService.java │ │ │ │ │ ├── SeckillActivityServiceImpl.java │ │ │ │ │ ├── SeckillConfigService.java │ │ │ │ │ └── SeckillConfigServiceImpl.java │ │ │ │ └── util │ │ │ │ └── PromotionUtils.java │ │ └── resources │ │ │ └── mapper │ │ │ └── discount │ │ │ └── DiscountProductMapper.xml │ │ └── test │ │ ├── java │ │ └── cn │ │ │ └── iocoder │ │ │ └── yudao │ │ │ └── module │ │ │ └── promotion │ │ │ └── service │ │ │ ├── article │ │ │ ├── ArticleCategoryServiceImplTest.java │ │ │ └── ArticleServiceImplTest.java │ │ │ ├── combination │ │ │ └── CombinationActivityServiceImplTest.java │ │ │ ├── coupon │ │ │ └── CouponTemplateServiceImplTest.java │ │ │ ├── discount │ │ │ └── DiscountActivityServiceImplTest.java │ │ │ ├── diy │ │ │ ├── DiyPageServiceImplTest.java │ │ │ └── DiyTemplateServiceImplTest.java │ │ │ ├── reward │ │ │ └── RewardActivityServiceImplTest.java │ │ │ ├── seckillactivity │ │ │ └── SeckillActivityServiceImplTest.java │ │ │ └── seckillconfig │ │ │ └── SeckillConfigServiceImplTest.java │ │ └── resources │ │ ├── application-unit-test.yaml │ │ ├── logback.xml │ │ └── sql │ │ ├── clean.sql │ │ └── create_tables.sql ├── yudao-module-statistics-api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── module │ │ └── statistics │ │ ├── api │ │ └── package-info.java │ │ └── enums │ │ ├── TimeRangeTypeEnum.java │ │ └── package-info.java ├── yudao-module-statistics-biz │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── cn │ │ │ └── iocoder │ │ │ └── yudao │ │ │ └── module │ │ │ └── statistics │ │ │ ├── controller │ │ │ ├── admin │ │ │ │ ├── common │ │ │ │ │ └── vo │ │ │ │ │ │ └── DataComparisonRespVO.java │ │ │ │ ├── member │ │ │ │ │ ├── MemberStatisticsController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── MemberAnalyseDataRespVO.java │ │ │ │ │ │ ├── MemberAnalyseReqVO.java │ │ │ │ │ │ ├── MemberAnalyseRespVO.java │ │ │ │ │ │ ├── MemberAreaStatisticsRespVO.java │ │ │ │ │ │ ├── MemberCountRespVO.java │ │ │ │ │ │ ├── MemberRegisterCountRespVO.java │ │ │ │ │ │ ├── MemberSexStatisticsRespVO.java │ │ │ │ │ │ ├── MemberSummaryRespVO.java │ │ │ │ │ │ └── MemberTerminalStatisticsRespVO.java │ │ │ │ ├── pay │ │ │ │ │ ├── PayStatisticsController.java │ │ │ │ │ └── vo │ │ │ │ │ │ └── PaySummaryRespVO.java │ │ │ │ ├── product │ │ │ │ │ ├── ProductStatisticsController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── ProductStatisticsReqVO.java │ │ │ │ │ │ └── ProductStatisticsRespVO.java │ │ │ │ └── trade │ │ │ │ │ ├── TradeStatisticsController.java │ │ │ │ │ └── vo │ │ │ │ │ ├── TradeOrderCountRespVO.java │ │ │ │ │ ├── TradeOrderSummaryRespVO.java │ │ │ │ │ ├── TradeOrderTrendReqVO.java │ │ │ │ │ ├── TradeOrderTrendRespVO.java │ │ │ │ │ ├── TradeSummaryRespVO.java │ │ │ │ │ ├── TradeTrendReqVO.java │ │ │ │ │ ├── TradeTrendSummaryExcelVO.java │ │ │ │ │ └── TradeTrendSummaryRespVO.java │ │ │ └── app │ │ │ │ └── package-info.java │ │ │ ├── convert │ │ │ ├── member │ │ │ │ └── MemberStatisticsConvert.java │ │ │ ├── pay │ │ │ │ └── PayStatisticsConvert.java │ │ │ └── trade │ │ │ │ └── TradeStatisticsConvert.java │ │ │ ├── dal │ │ │ ├── dataobject │ │ │ │ ├── package-info.java │ │ │ │ ├── product │ │ │ │ │ └── ProductStatisticsDO.java │ │ │ │ └── trade │ │ │ │ │ └── TradeStatisticsDO.java │ │ │ └── mysql │ │ │ │ ├── infra │ │ │ │ └── ApiAccessLogStatisticsMapper.java │ │ │ │ ├── member │ │ │ │ └── MemberStatisticsMapper.java │ │ │ │ ├── pay │ │ │ │ └── PayWalletStatisticsMapper.java │ │ │ │ ├── product │ │ │ │ └── ProductStatisticsMapper.java │ │ │ │ └── trade │ │ │ │ ├── AfterSaleStatisticsMapper.java │ │ │ │ ├── BrokerageStatisticsMapper.java │ │ │ │ ├── TradeOrderStatisticsMapper.java │ │ │ │ └── TradeStatisticsMapper.java │ │ │ ├── job │ │ │ ├── package-info.java │ │ │ ├── product │ │ │ │ └── ProductStatisticsJob.java │ │ │ └── trade │ │ │ │ └── TradeStatisticsJob.java │ │ │ ├── package-info.java │ │ │ └── service │ │ │ ├── infra │ │ │ ├── ApiAccessLogStatisticsService.java │ │ │ └── ApiAccessLogStatisticsServiceImpl.java │ │ │ ├── member │ │ │ ├── MemberStatisticsService.java │ │ │ ├── MemberStatisticsServiceImpl.java │ │ │ └── bo │ │ │ │ └── MemberAreaStatisticsRespBO.java │ │ │ ├── pay │ │ │ ├── PayWalletStatisticsService.java │ │ │ ├── PayWalletStatisticsServiceImpl.java │ │ │ └── bo │ │ │ │ └── RechargeSummaryRespBO.java │ │ │ ├── product │ │ │ ├── ProductStatisticsService.java │ │ │ └── ProductStatisticsServiceImpl.java │ │ │ └── trade │ │ │ ├── AfterSaleStatisticsService.java │ │ │ ├── AfterSaleStatisticsServiceImpl.java │ │ │ ├── BrokerageStatisticsService.java │ │ │ ├── BrokerageStatisticsServiceImpl.java │ │ │ ├── TradeOrderStatisticsService.java │ │ │ ├── TradeOrderStatisticsServiceImpl.java │ │ │ ├── TradeStatisticsService.java │ │ │ ├── TradeStatisticsServiceImpl.java │ │ │ └── bo │ │ │ ├── AfterSaleSummaryRespBO.java │ │ │ ├── MemberAreaStatisticsRespBO.java │ │ │ ├── TradeOrderSummaryRespBO.java │ │ │ ├── TradeSummaryRespBO.java │ │ │ └── WalletSummaryRespBO.java │ │ └── resources │ │ └── mapper │ │ ├── infra │ │ └── ApiAccessLogStatisticsMapper.xml │ │ ├── member │ │ └── MemberStatisticsMapper.xml │ │ ├── pay │ │ └── PayWalletStatisticsMapper.xml │ │ ├── product │ │ └── ProductStatisticsMapper.xml │ │ └── trade │ │ ├── AfterSaleStatisticsMapper.xml │ │ ├── BrokerageStatisticsMapper.xml │ │ ├── TradeOrderStatisticsMapper.xml │ │ └── TradeStatisticsMapper.xml ├── yudao-module-trade-api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── module │ │ └── trade │ │ ├── api │ │ ├── order │ │ │ ├── TradeOrderApi.java │ │ │ └── dto │ │ │ │ └── TradeOrderRespDTO.java │ │ └── package-info.java │ │ └── enums │ │ ├── DictTypeConstants.java │ │ ├── ErrorCodeConstants.java │ │ ├── MessageTemplateConstants.java │ │ ├── aftersale │ │ ├── AfterSaleOperateTypeEnum.java │ │ ├── AfterSaleStatusEnum.java │ │ ├── AfterSaleTypeEnum.java │ │ └── AfterSaleWayEnum.java │ │ ├── brokerage │ │ ├── BrokerageBindModeEnum.java │ │ ├── BrokerageEnabledConditionEnum.java │ │ ├── BrokerageRecordBizTypeEnum.java │ │ ├── BrokerageRecordStatusEnum.java │ │ ├── BrokerageWithdrawStatusEnum.java │ │ └── BrokerageWithdrawTypeEnum.java │ │ ├── delivery │ │ ├── DeliveryExpressChargeModeEnum.java │ │ └── DeliveryTypeEnum.java │ │ ├── notify │ │ └── TradeNotifyEnums.java │ │ └── order │ │ ├── TradeOrderCancelTypeEnum.java │ │ ├── TradeOrderItemAfterSaleStatusEnum.java │ │ ├── TradeOrderOperateTypeEnum.java │ │ ├── TradeOrderRefundStatusEnum.java │ │ ├── TradeOrderStatusEnum.java │ │ └── TradeOrderTypeEnum.java └── yudao-module-trade-biz │ ├── pom.xml │ └── src │ ├── main │ ├── java │ │ └── cn │ │ │ └── iocoder │ │ │ └── yudao │ │ │ └── module │ │ │ └── trade │ │ │ ├── api │ │ │ ├── order │ │ │ │ └── TradeOrderApiImpl.java │ │ │ └── package-info.java │ │ │ ├── controller │ │ │ ├── admin │ │ │ │ ├── aftersale │ │ │ │ │ ├── AfterSaleController.java │ │ │ │ │ ├── TradeAfterSaleController.http │ │ │ │ │ └── vo │ │ │ │ │ │ ├── AfterSaleBaseVO.java │ │ │ │ │ │ ├── AfterSaleDetailRespVO.java │ │ │ │ │ │ ├── AfterSaleDisagreeReqVO.java │ │ │ │ │ │ ├── AfterSalePageReqVO.java │ │ │ │ │ │ ├── AfterSaleRefuseReqVO.java │ │ │ │ │ │ ├── AfterSaleRespPageItemVO.java │ │ │ │ │ │ └── log │ │ │ │ │ │ └── AfterSaleLogRespVO.java │ │ │ │ ├── base │ │ │ │ │ ├── member │ │ │ │ │ │ ├── package-info.java │ │ │ │ │ │ └── user │ │ │ │ │ │ │ └── MemberUserRespVO.java │ │ │ │ │ ├── package-info.java │ │ │ │ │ └── product │ │ │ │ │ │ └── property │ │ │ │ │ │ └── ProductPropertyValueDetailRespVO.java │ │ │ │ ├── brokerage │ │ │ │ │ ├── BrokerageRecordController.java │ │ │ │ │ ├── BrokerageUserController.java │ │ │ │ │ ├── BrokerageWithdrawController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── record │ │ │ │ │ │ ├── BrokerageRecordBaseVO.java │ │ │ │ │ │ ├── BrokerageRecordPageReqVO.java │ │ │ │ │ │ └── BrokerageRecordRespVO.java │ │ │ │ │ │ ├── user │ │ │ │ │ │ ├── BrokerageUserBaseVO.java │ │ │ │ │ │ ├── BrokerageUserClearBrokerageUserReqVO.java │ │ │ │ │ │ ├── BrokerageUserPageReqVO.java │ │ │ │ │ │ ├── BrokerageUserRespVO.java │ │ │ │ │ │ ├── BrokerageUserUpdateBrokerageEnabledReqVO.java │ │ │ │ │ │ └── BrokerageUserUpdateBrokerageUserReqVO.java │ │ │ │ │ │ └── withdraw │ │ │ │ │ │ ├── BrokerageWithdrawBaseVO.java │ │ │ │ │ │ ├── BrokerageWithdrawPageReqVO.java │ │ │ │ │ │ ├── BrokerageWithdrawRejectReqVO.java │ │ │ │ │ │ └── BrokerageWithdrawRespVO.java │ │ │ │ ├── config │ │ │ │ │ ├── TradeConfigController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── TradeConfigBaseVO.java │ │ │ │ │ │ ├── TradeConfigRespVO.java │ │ │ │ │ │ └── TradeConfigSaveReqVO.java │ │ │ │ ├── delivery │ │ │ │ │ ├── DeliveryExpressController.java │ │ │ │ │ ├── DeliveryExpressTemplateController.java │ │ │ │ │ ├── DeliveryPickUpStoreController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── express │ │ │ │ │ │ ├── DeliveryExpressBaseVO.java │ │ │ │ │ │ ├── DeliveryExpressCreateReqVO.java │ │ │ │ │ │ ├── DeliveryExpressExcelVO.java │ │ │ │ │ │ ├── DeliveryExpressExportReqVO.java │ │ │ │ │ │ ├── DeliveryExpressPageReqVO.java │ │ │ │ │ │ ├── DeliveryExpressRespVO.java │ │ │ │ │ │ ├── DeliveryExpressSimpleRespVO.java │ │ │ │ │ │ └── DeliveryExpressUpdateReqVO.java │ │ │ │ │ │ ├── expresstemplate │ │ │ │ │ │ ├── DeliveryExpressTemplateBaseVO.java │ │ │ │ │ │ ├── DeliveryExpressTemplateChargeBaseVO.java │ │ │ │ │ │ ├── DeliveryExpressTemplateCreateReqVO.java │ │ │ │ │ │ ├── DeliveryExpressTemplateDetailRespVO.java │ │ │ │ │ │ ├── DeliveryExpressTemplateFreeBaseVO.java │ │ │ │ │ │ ├── DeliveryExpressTemplatePageReqVO.java │ │ │ │ │ │ ├── DeliveryExpressTemplateRespVO.java │ │ │ │ │ │ ├── DeliveryExpressTemplateSimpleRespVO.java │ │ │ │ │ │ └── DeliveryExpressTemplateUpdateReqVO.java │ │ │ │ │ │ └── pickup │ │ │ │ │ │ ├── DeliveryPickUpStoreBaseVO.java │ │ │ │ │ │ ├── DeliveryPickUpStoreCreateReqVO.java │ │ │ │ │ │ ├── DeliveryPickUpStorePageReqVO.java │ │ │ │ │ │ ├── DeliveryPickUpStoreRespVO.java │ │ │ │ │ │ ├── DeliveryPickUpStoreSimpleRespVO.java │ │ │ │ │ │ └── DeliveryPickUpStoreUpdateReqVO.java │ │ │ │ └── order │ │ │ │ │ ├── TradeOrderController.http │ │ │ │ │ ├── TradeOrderController.java │ │ │ │ │ └── vo │ │ │ │ │ ├── TradeOrderBaseVO.java │ │ │ │ │ ├── TradeOrderDeliveryReqVO.java │ │ │ │ │ ├── TradeOrderDetailRespVO.java │ │ │ │ │ ├── TradeOrderItemBaseVO.java │ │ │ │ │ ├── TradeOrderPageItemRespVO.java │ │ │ │ │ ├── TradeOrderPageReqVO.java │ │ │ │ │ ├── TradeOrderRemarkReqVO.java │ │ │ │ │ ├── TradeOrderSummaryRespVO.java │ │ │ │ │ ├── TradeOrderUpdateAddressReqVO.java │ │ │ │ │ └── TradeOrderUpdatePriceReqVO.java │ │ │ ├── app │ │ │ │ ├── aftersale │ │ │ │ │ ├── AppAfterSaleController.java │ │ │ │ │ ├── AppAfterSaleLogController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── AppAfterSaleCreateReqVO.java │ │ │ │ │ │ ├── AppAfterSaleDeliveryReqVO.java │ │ │ │ │ │ ├── AppAfterSaleRespVO.java │ │ │ │ │ │ └── log │ │ │ │ │ │ └── AppAfterSaleLogRespVO.java │ │ │ │ ├── base │ │ │ │ │ ├── package-info.java │ │ │ │ │ ├── property │ │ │ │ │ │ └── AppProductPropertyValueDetailRespVO.java │ │ │ │ │ ├── sku │ │ │ │ │ │ └── AppProductSkuBaseRespVO.java │ │ │ │ │ └── spu │ │ │ │ │ │ └── AppProductSpuBaseRespVO.java │ │ │ │ ├── brokerage │ │ │ │ │ ├── AppBrokerageRecordController.java │ │ │ │ │ ├── AppBrokerageUserController.java │ │ │ │ │ ├── AppBrokerageWithdrawController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── record │ │ │ │ │ │ ├── AppBrokerageProductPriceRespVO.java │ │ │ │ │ │ ├── AppBrokerageRecordPageReqVO.java │ │ │ │ │ │ └── AppBrokerageRecordRespVO.java │ │ │ │ │ │ ├── user │ │ │ │ │ │ ├── AppBrokerageUserBindReqVO.java │ │ │ │ │ │ ├── AppBrokerageUserChildSummaryPageReqVO.java │ │ │ │ │ │ ├── AppBrokerageUserChildSummaryRespVO.java │ │ │ │ │ │ ├── AppBrokerageUserMySummaryRespVO.java │ │ │ │ │ │ ├── AppBrokerageUserRankByPriceRespVO.java │ │ │ │ │ │ ├── AppBrokerageUserRankByUserCountRespVO.java │ │ │ │ │ │ ├── AppBrokerageUserRankPageReqVO.java │ │ │ │ │ │ └── AppBrokerageUserRespVO.java │ │ │ │ │ │ └── withdraw │ │ │ │ │ │ ├── AppBrokerageWithdrawCreateReqVO.java │ │ │ │ │ │ ├── AppBrokerageWithdrawPageReqVO.java │ │ │ │ │ │ └── AppBrokerageWithdrawRespVO.java │ │ │ │ ├── cart │ │ │ │ │ ├── AppCartController.http │ │ │ │ │ ├── AppCartController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── AppCartAddReqVO.java │ │ │ │ │ │ ├── AppCartDetailRespVO.java │ │ │ │ │ │ ├── AppCartListRespVO.java │ │ │ │ │ │ ├── AppCartResetReqVO.java │ │ │ │ │ │ ├── AppCartUpdateCountReqVO.java │ │ │ │ │ │ └── AppCartUpdateSelectedReqVO.java │ │ │ │ ├── config │ │ │ │ │ ├── AppTradeConfigController.java │ │ │ │ │ └── vo │ │ │ │ │ │ └── AppTradeConfigRespVO.java │ │ │ │ ├── delivery │ │ │ │ │ ├── AppDeliverConfigController.java │ │ │ │ │ ├── AppDeliverExpressController.java │ │ │ │ │ ├── AppDeliverPickUpStoreController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── config │ │ │ │ │ │ └── AppDeliveryConfigRespVO.java │ │ │ │ │ │ ├── express │ │ │ │ │ │ └── AppDeliveryExpressRespVO.java │ │ │ │ │ │ └── pickup │ │ │ │ │ │ └── AppDeliveryPickUpStoreRespVO.java │ │ │ │ └── order │ │ │ │ │ ├── AppTradeOrderController.http │ │ │ │ │ ├── AppTradeOrderController.java │ │ │ │ │ └── vo │ │ │ │ │ ├── AppOrderExpressTrackRespDTO.java │ │ │ │ │ ├── AppTradeOrderCreateReqVO.java │ │ │ │ │ ├── AppTradeOrderCreateRespVO.java │ │ │ │ │ ├── AppTradeOrderDetailRespVO.java │ │ │ │ │ ├── AppTradeOrderPageItemRespVO.java │ │ │ │ │ ├── AppTradeOrderPageReqVO.java │ │ │ │ │ ├── AppTradeOrderSettlementReqVO.java │ │ │ │ │ ├── AppTradeOrderSettlementRespVO.java │ │ │ │ │ └── item │ │ │ │ │ ├── AppTradeOrderItemCommentCreateReqVO.java │ │ │ │ │ └── AppTradeOrderItemRespVO.java │ │ │ └── package-info.java │ │ │ ├── convert │ │ │ ├── aftersale │ │ │ │ ├── AfterSaleConvert.java │ │ │ │ └── AfterSaleLogConvert.java │ │ │ ├── brokerage │ │ │ │ ├── BrokerageRecordConvert.java │ │ │ │ ├── BrokerageUserConvert.java │ │ │ │ └── BrokerageWithdrawConvert.java │ │ │ ├── cart │ │ │ │ └── TradeCartConvert.java │ │ │ ├── config │ │ │ │ └── TradeConfigConvert.java │ │ │ ├── delivery │ │ │ │ ├── DeliveryExpressConvert.java │ │ │ │ ├── DeliveryExpressTemplateConvert.java │ │ │ │ └── DeliveryPickUpStoreConvert.java │ │ │ └── order │ │ │ │ ├── TradeOrderConvert.java │ │ │ │ └── TradeOrderLogConvert.java │ │ │ ├── dal │ │ │ ├── dataobject │ │ │ │ ├── aftersale │ │ │ │ │ ├── AfterSaleDO.java │ │ │ │ │ └── AfterSaleLogDO.java │ │ │ │ ├── brokerage │ │ │ │ │ ├── BrokerageRecordDO.java │ │ │ │ │ ├── BrokerageUserDO.java │ │ │ │ │ └── BrokerageWithdrawDO.java │ │ │ │ ├── cart │ │ │ │ │ └── CartDO.java │ │ │ │ ├── config │ │ │ │ │ └── TradeConfigDO.java │ │ │ │ ├── delivery │ │ │ │ │ ├── DeliveryExpressDO.java │ │ │ │ │ ├── DeliveryExpressTemplateChargeDO.java │ │ │ │ │ ├── DeliveryExpressTemplateDO.java │ │ │ │ │ ├── DeliveryExpressTemplateFreeDO.java │ │ │ │ │ ├── DeliveryPickUpStoreDO.java │ │ │ │ │ └── DeliveryPickUpStoreStaffDO.java │ │ │ │ └── order │ │ │ │ │ ├── TradeOrderDO.java │ │ │ │ │ ├── TradeOrderItemDO.java │ │ │ │ │ └── TradeOrderLogDO.java │ │ │ ├── mysql │ │ │ │ ├── aftersale │ │ │ │ │ ├── AfterSaleLogMapper.java │ │ │ │ │ └── AfterSaleMapper.java │ │ │ │ ├── brokerage │ │ │ │ │ ├── BrokerageRecordMapper.java │ │ │ │ │ ├── BrokerageUserMapper.java │ │ │ │ │ └── BrokerageWithdrawMapper.java │ │ │ │ ├── cart │ │ │ │ │ └── CartMapper.java │ │ │ │ ├── config │ │ │ │ │ └── TradeConfigMapper.java │ │ │ │ ├── delivery │ │ │ │ │ ├── DeliveryExpressMapper.java │ │ │ │ │ ├── DeliveryExpressTemplateChargeMapper.java │ │ │ │ │ ├── DeliveryExpressTemplateFreeMapper.java │ │ │ │ │ ├── DeliveryExpressTemplateMapper.java │ │ │ │ │ ├── DeliveryPickUpStoreMapper.java │ │ │ │ │ └── DeliveryPickUpStoreStaffMapper.java │ │ │ │ ├── order │ │ │ │ │ ├── TradeOrderItemMapper.java │ │ │ │ │ ├── TradeOrderLogMapper.java │ │ │ │ │ └── TradeOrderMapper.java │ │ │ │ └── package-info.java │ │ │ └── redis │ │ │ │ ├── RedisKeyConstants.java │ │ │ │ └── no │ │ │ │ └── TradeNoRedisDAO.java │ │ │ ├── framework │ │ │ ├── aftersale │ │ │ │ ├── config │ │ │ │ │ └── AfterSaleLogConfiguration.java │ │ │ │ └── core │ │ │ │ │ ├── annotations │ │ │ │ │ └── AfterSaleLog.java │ │ │ │ │ ├── aop │ │ │ │ │ └── AfterSaleLogAspect.java │ │ │ │ │ └── utils │ │ │ │ │ └── AfterSaleLogUtils.java │ │ │ ├── delivery │ │ │ │ ├── config │ │ │ │ │ ├── ExpressClientConfig.java │ │ │ │ │ └── TradeExpressProperties.java │ │ │ │ └── core │ │ │ │ │ ├── client │ │ │ │ │ ├── ExpressClient.java │ │ │ │ │ ├── ExpressClientFactory.java │ │ │ │ │ ├── convert │ │ │ │ │ │ └── ExpressQueryConvert.java │ │ │ │ │ ├── dto │ │ │ │ │ │ ├── ExpressTrackQueryReqDTO.java │ │ │ │ │ │ ├── ExpressTrackRespDTO.java │ │ │ │ │ │ ├── kd100 │ │ │ │ │ │ │ ├── Kd100ExpressQueryReqDTO.java │ │ │ │ │ │ │ └── Kd100ExpressQueryRespDTO.java │ │ │ │ │ │ └── kdniao │ │ │ │ │ │ │ ├── KdNiaoExpressQueryReqDTO.java │ │ │ │ │ │ │ └── KdNiaoExpressQueryRespDTO.java │ │ │ │ │ └── impl │ │ │ │ │ │ ├── ExpressClientFactoryImpl.java │ │ │ │ │ │ ├── NoProvideExpressClient.java │ │ │ │ │ │ ├── kd100 │ │ │ │ │ │ └── Kd100ExpressClient.java │ │ │ │ │ │ └── kdniao │ │ │ │ │ │ └── KdNiaoExpressClient.java │ │ │ │ │ └── enums │ │ │ │ │ └── ExpressClientEnum.java │ │ │ ├── order │ │ │ │ ├── config │ │ │ │ │ ├── TradeOrderConfig.java │ │ │ │ │ └── TradeOrderProperties.java │ │ │ │ └── core │ │ │ │ │ ├── annotations │ │ │ │ │ └── TradeOrderLog.java │ │ │ │ │ ├── aop │ │ │ │ │ └── TradeOrderLogAspect.java │ │ │ │ │ └── utils │ │ │ │ │ └── TradeOrderLogUtils.java │ │ │ ├── package-info.java │ │ │ └── web │ │ │ │ ├── config │ │ │ │ └── TradeWebConfiguration.java │ │ │ │ └── package-info.java │ │ │ ├── job │ │ │ ├── brokerage │ │ │ │ └── BrokerageRecordUnfreezeJob.java │ │ │ └── order │ │ │ │ ├── TradeOrderAutoCancelJob.java │ │ │ │ ├── TradeOrderAutoCommentJob.java │ │ │ │ └── TradeOrderAutoReceiveJob.java │ │ │ ├── package-info.java │ │ │ └── service │ │ │ ├── aftersale │ │ │ ├── AfterSaleLogService.java │ │ │ ├── AfterSaleLogServiceImpl.java │ │ │ ├── AfterSaleService.java │ │ │ ├── AfterSaleServiceImpl.java │ │ │ └── bo │ │ │ │ └── AfterSaleLogCreateReqBO.java │ │ │ ├── brokerage │ │ │ ├── BrokerageRecordService.java │ │ │ ├── BrokerageRecordServiceImpl.java │ │ │ ├── BrokerageUserService.java │ │ │ ├── BrokerageUserServiceImpl.java │ │ │ ├── BrokerageWithdrawService.java │ │ │ ├── BrokerageWithdrawServiceImpl.java │ │ │ └── bo │ │ │ │ ├── BrokerageAddReqBO.java │ │ │ │ ├── BrokerageWithdrawSummaryRespBO.java │ │ │ │ └── UserBrokerageSummaryRespBO.java │ │ │ ├── cart │ │ │ ├── CartService.java │ │ │ └── CartServiceImpl.java │ │ │ ├── config │ │ │ ├── TradeConfigService.java │ │ │ └── TradeConfigServiceImpl.java │ │ │ ├── delivery │ │ │ ├── DeliveryExpressService.java │ │ │ ├── DeliveryExpressServiceImpl.java │ │ │ ├── DeliveryExpressTemplateService.java │ │ │ ├── DeliveryExpressTemplateServiceImpl.java │ │ │ ├── DeliveryPickUpStoreService.java │ │ │ ├── DeliveryPickUpStoreServiceImpl.java │ │ │ └── bo │ │ │ │ └── DeliveryExpressTemplateRespBO.java │ │ │ ├── message │ │ │ ├── TradeMessageService.java │ │ │ ├── TradeMessageServiceImpl.java │ │ │ └── bo │ │ │ │ └── TradeOrderMessageWhenDeliveryOrderReqBO.java │ │ │ ├── order │ │ │ ├── TradeOrderLogService.java │ │ │ ├── TradeOrderLogServiceImpl.java │ │ │ ├── TradeOrderQueryService.java │ │ │ ├── TradeOrderQueryServiceImpl.java │ │ │ ├── TradeOrderUpdateService.java │ │ │ ├── TradeOrderUpdateServiceImpl.java │ │ │ ├── bo │ │ │ │ └── TradeOrderLogCreateReqBO.java │ │ │ └── handler │ │ │ │ ├── TradeBargainOrderHandler.java │ │ │ │ ├── TradeBrokerageOrderHandler.java │ │ │ │ ├── TradeCombinationOrderHandler.java │ │ │ │ ├── TradeCouponOrderHandler.java │ │ │ │ ├── TradeMemberPointOrderHandler.java │ │ │ │ ├── TradeOrderHandler.java │ │ │ │ ├── TradeProductSkuOrderHandler.java │ │ │ │ └── TradeSeckillOrderHandler.java │ │ │ └── price │ │ │ ├── TradePriceService.java │ │ │ ├── TradePriceServiceImpl.java │ │ │ ├── bo │ │ │ ├── TradePriceCalculateReqBO.java │ │ │ └── TradePriceCalculateRespBO.java │ │ │ └── calculator │ │ │ ├── TradeBargainActivityPriceCalculator.java │ │ │ ├── TradeCombinationActivityPriceCalculator.java │ │ │ ├── TradeCouponPriceCalculator.java │ │ │ ├── TradeDeliveryPriceCalculator.java │ │ │ ├── TradeDiscountActivityPriceCalculator.java │ │ │ ├── TradeMemberLevelPriceCalculator.java │ │ │ ├── TradePointGiveCalculator.java │ │ │ ├── TradePointUsePriceCalculator.java │ │ │ ├── TradePriceCalculator.java │ │ │ ├── TradePriceCalculatorHelper.java │ │ │ ├── TradeRewardActivityPriceCalculator.java │ │ │ └── TradeSeckillActivityPriceCalculator.java │ └── resources │ │ └── mapper │ │ └── brokerage │ │ └── BrokerageUserMapper.xml │ └── test │ ├── java │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── module │ │ └── trade │ │ ├── framework │ │ └── delivery │ │ │ └── core │ │ │ └── client │ │ │ └── impl │ │ │ ├── Kd100ExpressClientIntegrationTest.java │ │ │ └── KdNiaoExpressClientIntegrationTest.java │ │ └── service │ │ ├── aftersale │ │ └── AfterSaleServiceTest.java │ │ ├── brokerage │ │ ├── BrokerageRecordServiceImplTest.java │ │ ├── BrokerageUserServiceImplTest.java │ │ └── BrokerageWithdrawServiceImplTest.java │ │ ├── order │ │ └── TradeOrderUpdateServiceTest.java │ │ └── price │ │ ├── TradePriceServiceImplTest.java │ │ └── calculator │ │ ├── TradeCouponPriceCalculatorTest.java │ │ ├── TradeDeliveryPriceCalculatorTest.java │ │ ├── TradeDiscountActivityPriceCalculatorTest.java │ │ ├── TradeMemberLevelPriceCalculatorTest.java │ │ ├── TradePointGiveCalculatorTest.java │ │ ├── TradePointUsePriceCalculatorTest.java │ │ └── TradeRewardActivityPriceCalculatorTest.java │ └── resources │ ├── application-unit-test.yaml │ ├── logback.xml │ └── sql │ ├── clean.sql │ └── create_tables.sql ├── yudao-module-member ├── pom.xml ├── yudao-module-member-api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── module │ │ └── member │ │ ├── api │ │ ├── address │ │ │ ├── MemberAddressApi.java │ │ │ └── dto │ │ │ │ └── MemberAddressRespDTO.java │ │ ├── config │ │ │ ├── MemberConfigApi.java │ │ │ └── dto │ │ │ │ └── MemberConfigRespDTO.java │ │ ├── level │ │ │ ├── MemberLevelApi.java │ │ │ └── dto │ │ │ │ └── MemberLevelRespDTO.java │ │ ├── package-info.java │ │ ├── point │ │ │ └── MemberPointApi.java │ │ └── user │ │ │ ├── MemberUserApi.java │ │ │ └── dto │ │ │ └── MemberUserRespDTO.java │ │ ├── enums │ │ ├── DictTypeConstants.java │ │ ├── ErrorCodeConstants.java │ │ ├── MemberExperienceBizTypeEnum.java │ │ └── point │ │ │ └── MemberPointBizTypeEnum.java │ │ └── message │ │ ├── package-info.java │ │ └── user │ │ └── MemberUserCreateMessage.java └── yudao-module-member-biz │ ├── pom.xml │ └── src │ ├── main │ └── java │ │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── module │ │ └── member │ │ ├── api │ │ ├── address │ │ │ └── MemberAddressApiImpl.java │ │ ├── config │ │ │ └── MemberConfigApiImpl.java │ │ ├── level │ │ │ └── MemberLevelApiImpl.java │ │ ├── package-info.java │ │ ├── point │ │ │ └── MemberPointApiImpl.java │ │ └── user │ │ │ └── MemberUserApiImpl.java │ │ ├── controller │ │ ├── admin │ │ │ ├── address │ │ │ │ ├── AddressController.java │ │ │ │ ├── package-info.java │ │ │ │ └── vo │ │ │ │ │ ├── AddressBaseVO.java │ │ │ │ │ └── AddressRespVO.java │ │ │ ├── config │ │ │ │ ├── MemberConfigController.java │ │ │ │ └── vo │ │ │ │ │ ├── MemberConfigBaseVO.java │ │ │ │ │ ├── MemberConfigRespVO.java │ │ │ │ │ └── MemberConfigSaveReqVO.java │ │ │ ├── group │ │ │ │ ├── MemberGroupController.java │ │ │ │ └── vo │ │ │ │ │ ├── MemberGroupBaseVO.java │ │ │ │ │ ├── MemberGroupCreateReqVO.java │ │ │ │ │ ├── MemberGroupPageReqVO.java │ │ │ │ │ ├── MemberGroupRespVO.java │ │ │ │ │ ├── MemberGroupSimpleRespVO.java │ │ │ │ │ └── MemberGroupUpdateReqVO.java │ │ │ ├── level │ │ │ │ ├── MemberExperienceRecordController.java │ │ │ │ ├── MemberLevelController.java │ │ │ │ ├── MemberLevelRecordController.java │ │ │ │ └── vo │ │ │ │ │ ├── experience │ │ │ │ │ ├── MemberExperienceRecordBaseVO.java │ │ │ │ │ ├── MemberExperienceRecordPageReqVO.java │ │ │ │ │ └── MemberExperienceRecordRespVO.java │ │ │ │ │ ├── level │ │ │ │ │ ├── MemberLevelBaseVO.java │ │ │ │ │ ├── MemberLevelCreateReqVO.java │ │ │ │ │ ├── MemberLevelListReqVO.java │ │ │ │ │ ├── MemberLevelRespVO.java │ │ │ │ │ ├── MemberLevelSimpleRespVO.java │ │ │ │ │ └── MemberLevelUpdateReqVO.java │ │ │ │ │ └── record │ │ │ │ │ ├── MemberLevelRecordBaseVO.java │ │ │ │ │ ├── MemberLevelRecordPageReqVO.java │ │ │ │ │ └── MemberLevelRecordRespVO.java │ │ │ ├── point │ │ │ │ ├── MemberPointRecordController.java │ │ │ │ └── vo │ │ │ │ │ └── recrod │ │ │ │ │ ├── MemberPointRecordPageReqVO.java │ │ │ │ │ └── MemberPointRecordRespVO.java │ │ │ ├── signin │ │ │ │ ├── MemberSignInConfigController.java │ │ │ │ ├── MemberSignInRecordController.java │ │ │ │ └── vo │ │ │ │ │ ├── config │ │ │ │ │ ├── MemberSignInConfigBaseVO.java │ │ │ │ │ ├── MemberSignInConfigCreateReqVO.java │ │ │ │ │ ├── MemberSignInConfigRespVO.java │ │ │ │ │ └── MemberSignInConfigUpdateReqVO.java │ │ │ │ │ └── record │ │ │ │ │ ├── MemberSignInRecordPageReqVO.java │ │ │ │ │ └── MemberSignInRecordRespVO.java │ │ │ ├── tag │ │ │ │ ├── MemberTagController.java │ │ │ │ └── vo │ │ │ │ │ ├── MemberTagBaseVO.java │ │ │ │ │ ├── MemberTagCreateReqVO.java │ │ │ │ │ ├── MemberTagPageReqVO.java │ │ │ │ │ ├── MemberTagRespVO.java │ │ │ │ │ └── MemberTagUpdateReqVO.java │ │ │ └── user │ │ │ │ ├── MemberUserController.java │ │ │ │ └── vo │ │ │ │ ├── MemberUserBaseVO.java │ │ │ │ ├── MemberUserPageReqVO.java │ │ │ │ ├── MemberUserRespVO.java │ │ │ │ ├── MemberUserUpdateLevelReqVO.java │ │ │ │ ├── MemberUserUpdatePointReqVO.java │ │ │ │ └── MemberUserUpdateReqVO.java │ │ ├── app │ │ │ ├── address │ │ │ │ ├── AppAddressController.http │ │ │ │ ├── AppAddressController.java │ │ │ │ └── vo │ │ │ │ │ ├── AppAddressBaseVO.java │ │ │ │ │ ├── AppAddressCreateReqVO.java │ │ │ │ │ ├── AppAddressRespVO.java │ │ │ │ │ └── AppAddressUpdateReqVO.java │ │ │ ├── auth │ │ │ │ ├── AppAuthController.http │ │ │ │ ├── AppAuthController.java │ │ │ │ └── vo │ │ │ │ │ ├── AppAuthCheckCodeReqVO.java │ │ │ │ │ ├── AppAuthLoginReqVO.java │ │ │ │ │ ├── AppAuthLoginRespVO.java │ │ │ │ │ ├── AppAuthSmsLoginReqVO.java │ │ │ │ │ ├── AppAuthSmsSendReqVO.java │ │ │ │ │ ├── AppAuthSmsValidateReqVO.java │ │ │ │ │ ├── AppAuthSocialLoginReqVO.java │ │ │ │ │ ├── AppAuthWeixinMiniAppLoginReqVO.java │ │ │ │ │ └── AuthWeixinJsapiSignatureRespVO.java │ │ │ ├── level │ │ │ │ ├── AppMemberExperienceRecordController.java │ │ │ │ ├── AppMemberLevelController.java │ │ │ │ └── vo │ │ │ │ │ ├── experience │ │ │ │ │ └── AppMemberExperienceRecordRespVO.java │ │ │ │ │ └── level │ │ │ │ │ └── AppMemberLevelRespVO.java │ │ │ ├── point │ │ │ │ ├── AppMemberPointRecordController.java │ │ │ │ └── vo │ │ │ │ │ ├── AppMemberPointRecordPageReqVO.java │ │ │ │ │ └── AppMemberPointRecordRespVO.java │ │ │ ├── signin │ │ │ │ ├── AppMemberSignInConfigController.java │ │ │ │ ├── AppMemberSignInRecordController.java │ │ │ │ └── vo │ │ │ │ │ ├── config │ │ │ │ │ └── AppMemberSignInConfigRespVO.java │ │ │ │ │ └── record │ │ │ │ │ ├── AppMemberSignInRecordRespVO.java │ │ │ │ │ └── AppMemberSignInRecordSummaryRespVO.java │ │ │ ├── social │ │ │ │ ├── AppSocialUserController.java │ │ │ │ └── vo │ │ │ │ │ ├── AppSocialUserBindReqVO.java │ │ │ │ │ ├── AppSocialUserRespVO.java │ │ │ │ │ └── AppSocialUserUnbindReqVO.java │ │ │ └── user │ │ │ │ ├── AppMemberUserController.http │ │ │ │ ├── AppMemberUserController.java │ │ │ │ └── vo │ │ │ │ ├── AppMemberUserInfoRespVO.java │ │ │ │ ├── AppMemberUserResetPasswordReqVO.java │ │ │ │ ├── AppMemberUserUpdateMobileByWeixinReqVO.java │ │ │ │ ├── AppMemberUserUpdateMobileReqVO.java │ │ │ │ ├── AppMemberUserUpdatePasswordReqVO.java │ │ │ │ └── AppMemberUserUpdateReqVO.java │ │ └── package-info.java │ │ ├── convert │ │ ├── address │ │ │ └── AddressConvert.java │ │ ├── auth │ │ │ └── AuthConvert.java │ │ ├── config │ │ │ └── MemberConfigConvert.java │ │ ├── group │ │ │ └── MemberGroupConvert.java │ │ ├── level │ │ │ ├── MemberExperienceRecordConvert.java │ │ │ ├── MemberLevelConvert.java │ │ │ └── MemberLevelRecordConvert.java │ │ ├── package-info.java │ │ ├── point │ │ │ └── MemberPointRecordConvert.java │ │ ├── signin │ │ │ ├── MemberSignInConfigConvert.java │ │ │ └── MemberSignInRecordConvert.java │ │ ├── tag │ │ │ └── MemberTagConvert.java │ │ └── user │ │ │ └── MemberUserConvert.java │ │ ├── dal │ │ ├── dataobject │ │ │ ├── address │ │ │ │ └── MemberAddressDO.java │ │ │ ├── config │ │ │ │ └── MemberConfigDO.java │ │ │ ├── group │ │ │ │ └── MemberGroupDO.java │ │ │ ├── level │ │ │ │ ├── MemberExperienceRecordDO.java │ │ │ │ ├── MemberLevelDO.java │ │ │ │ └── MemberLevelRecordDO.java │ │ │ ├── point │ │ │ │ └── MemberPointRecordDO.java │ │ │ ├── signin │ │ │ │ ├── MemberSignInConfigDO.java │ │ │ │ └── MemberSignInRecordDO.java │ │ │ ├── tag │ │ │ │ └── MemberTagDO.java │ │ │ └── user │ │ │ │ └── MemberUserDO.java │ │ ├── mysql │ │ │ ├── address │ │ │ │ └── MemberAddressMapper.java │ │ │ ├── config │ │ │ │ └── MemberConfigMapper.java │ │ │ ├── group │ │ │ │ └── MemberGroupMapper.java │ │ │ ├── level │ │ │ │ ├── MemberExperienceRecordMapper.java │ │ │ │ ├── MemberLevelMapper.java │ │ │ │ └── MemberLevelRecordMapper.java │ │ │ ├── point │ │ │ │ └── MemberPointRecordMapper.java │ │ │ ├── signin │ │ │ │ ├── MemberSignInConfigMapper.java │ │ │ │ └── MemberSignInRecordMapper.java │ │ │ ├── tag │ │ │ │ └── MemberTagMapper.java │ │ │ └── user │ │ │ │ └── MemberUserMapper.java │ │ ├── package-info.java │ │ └── redis │ │ │ └── package-info.java │ │ ├── framework │ │ ├── package-info.java │ │ └── web │ │ │ ├── config │ │ │ └── MemberWebConfiguration.java │ │ │ └── package-info.java │ │ ├── mq │ │ ├── consumer │ │ │ └── package-info.java │ │ ├── message │ │ │ └── package-info.java │ │ └── producer │ │ │ ├── package-info.java │ │ │ └── user │ │ │ └── MemberUserProducer.java │ │ ├── package-info.java │ │ └── service │ │ ├── address │ │ ├── AddressService.java │ │ └── AddressServiceImpl.java │ │ ├── auth │ │ ├── MemberAuthService.java │ │ └── MemberAuthServiceImpl.java │ │ ├── config │ │ ├── MemberConfigService.java │ │ └── MemberConfigServiceImpl.java │ │ ├── group │ │ ├── MemberGroupService.java │ │ └── MemberGroupServiceImpl.java │ │ ├── level │ │ ├── MemberExperienceRecordService.java │ │ ├── MemberExperienceRecordServiceImpl.java │ │ ├── MemberLevelRecordService.java │ │ ├── MemberLevelRecordServiceImpl.java │ │ ├── MemberLevelService.java │ │ └── MemberLevelServiceImpl.java │ │ ├── point │ │ ├── MemberPointRecordService.java │ │ └── MemberPointRecordServiceImpl.java │ │ ├── signin │ │ ├── MemberSignInConfigService.java │ │ ├── MemberSignInConfigServiceImpl.java │ │ ├── MemberSignInRecordService.java │ │ └── MemberSignInRecordServiceImpl.java │ │ ├── tag │ │ ├── MemberTagService.java │ │ └── MemberTagServiceImpl.java │ │ └── user │ │ ├── MemberUserService.java │ │ └── MemberUserServiceImpl.java │ └── test │ ├── java │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── module │ │ └── member │ │ └── service │ │ ├── address │ │ └── MemberAddressServiceImplTest.java │ │ ├── auth │ │ └── MemberAuthServiceTest.java │ │ ├── group │ │ └── MemberGroupServiceImplTest.java │ │ ├── level │ │ └── MemberLevelServiceImplTest.java │ │ ├── tag │ │ └── MemberTagServiceImplTest.java │ │ └── user │ │ └── MemberUserServiceImplTest.java │ └── resources │ ├── application-unit-test.yaml │ ├── logback.xml │ └── sql │ ├── clean.sql │ └── create_tables.sql ├── yudao-module-mp ├── pom.xml ├── yudao-module-mp-api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── module │ │ └── mp │ │ ├── enums │ │ ├── ErrorCodeConstants.java │ │ └── message │ │ │ ├── MpAutoReplyMatchEnum.java │ │ │ ├── MpAutoReplyTypeEnum.java │ │ │ └── MpMessageSendFromEnum.java │ │ └── package-info.java └── yudao-module-mp-biz │ ├── pom.xml │ └── src │ └── main │ └── java │ └── cn │ └── iocoder │ └── yudao │ └── module │ └── mp │ ├── controller │ ├── admin │ │ ├── account │ │ │ ├── MpAccountController.java │ │ │ └── vo │ │ │ │ ├── MpAccountBaseVO.java │ │ │ │ ├── MpAccountCreateReqVO.java │ │ │ │ ├── MpAccountPageReqVO.java │ │ │ │ ├── MpAccountRespVO.java │ │ │ │ ├── MpAccountSimpleRespVO.java │ │ │ │ └── MpAccountUpdateReqVO.java │ │ ├── material │ │ │ ├── MpMaterialController.http │ │ │ ├── MpMaterialController.java │ │ │ └── vo │ │ │ │ ├── MpMaterialPageReqVO.java │ │ │ │ ├── MpMaterialRespVO.java │ │ │ │ ├── MpMaterialUploadNewsImageReqVO.java │ │ │ │ ├── MpMaterialUploadPermanentReqVO.java │ │ │ │ ├── MpMaterialUploadRespVO.java │ │ │ │ └── MpMaterialUploadTemporaryReqVO.java │ │ ├── menu │ │ │ ├── MpMenuController.http │ │ │ ├── MpMenuController.java │ │ │ └── vo │ │ │ │ ├── MpMenuBaseVO.java │ │ │ │ ├── MpMenuRespVO.java │ │ │ │ └── MpMenuSaveReqVO.java │ │ ├── message │ │ │ ├── MpAutoReplyController.http │ │ │ ├── MpAutoReplyController.java │ │ │ ├── MpMessageController.http │ │ │ ├── MpMessageController.java │ │ │ └── vo │ │ │ │ ├── autoreply │ │ │ │ ├── MpAutoReplyBaseVO.java │ │ │ │ ├── MpAutoReplyCreateReqVO.java │ │ │ │ ├── MpAutoReplyPageReqVO.java │ │ │ │ ├── MpAutoReplyRespVO.java │ │ │ │ └── MpAutoReplyUpdateReqVO.java │ │ │ │ └── message │ │ │ │ ├── MpMessagePageReqVO.java │ │ │ │ ├── MpMessageRespVO.java │ │ │ │ └── MpMessageSendReqVO.java │ │ ├── news │ │ │ ├── MpDraftController.http │ │ │ ├── MpDraftController.java │ │ │ ├── MpFreePublishController.http │ │ │ ├── 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.http │ │ │ ├── MpTagController.java │ │ │ └── vo │ │ │ │ ├── MpTagBaseVO.java │ │ │ │ ├── MpTagCreateReqVO.java │ │ │ │ ├── MpTagPageReqVO.java │ │ │ │ ├── MpTagRespVO.java │ │ │ │ ├── MpTagSimpleRespVO.java │ │ │ │ └── MpTagUpdateReqVO.java │ │ └── user │ │ │ ├── MpUserController.http │ │ │ ├── MpUserController.java │ │ │ └── vo │ │ │ ├── MpUserPageReqVO.java │ │ │ ├── MpUserRespVO.java │ │ │ └── MpUserUpdateReqVO.java │ └── package-info.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 │ ├── package-info.java │ └── web │ │ ├── config │ │ └── MpWebConfiguration.java │ │ └── package-info.java │ ├── package-info.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 ├── yudao-module-pay ├── pom.xml ├── yudao-module-pay-api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── module │ │ └── pay │ │ ├── api │ │ ├── notify │ │ │ ├── dto │ │ │ │ ├── PayOrderNotifyReqDTO.java │ │ │ │ ├── PayRefundNotifyReqDTO.java │ │ │ │ └── PayTransferNotifyReqDTO.java │ │ │ └── package-info.java │ │ ├── order │ │ │ ├── PayOrderApi.java │ │ │ └── dto │ │ │ │ ├── PayOrderCreateReqDTO.java │ │ │ │ └── PayOrderRespDTO.java │ │ ├── refund │ │ │ ├── PayRefundApi.java │ │ │ └── dto │ │ │ │ ├── PayRefundCreateReqDTO.java │ │ │ │ └── PayRefundRespDTO.java │ │ └── transfer │ │ │ ├── PayTransferApi.java │ │ │ └── dto │ │ │ └── PayTransferCreateReqDTO.java │ │ └── enums │ │ ├── DictTypeConstants.java │ │ ├── ErrorCodeConstants.java │ │ ├── notify │ │ ├── PayNotifyStatusEnum.java │ │ └── PayNotifyTypeEnum.java │ │ ├── order │ │ └── PayOrderStatusEnum.java │ │ ├── refund │ │ └── PayRefundStatusEnum.java │ │ ├── transfer │ │ ├── PayTransferStatusEnum.java │ │ └── PayTransferTypeEnum.java │ │ └── wallet │ │ └── PayWalletBizTypeEnum.java ├── yudao-module-pay-biz │ ├── pom.xml │ └── src │ │ ├── main │ │ └── java │ │ │ └── cn │ │ │ └── iocoder │ │ │ └── yudao │ │ │ └── module │ │ │ └── pay │ │ │ ├── api │ │ │ ├── order │ │ │ │ └── PayOrderApiImpl.java │ │ │ ├── refund │ │ │ │ └── PayRefundApiImpl.java │ │ │ └── transfer │ │ │ │ └── PayTransferApiImpl.java │ │ │ ├── controller │ │ │ ├── admin │ │ │ │ ├── app │ │ │ │ │ ├── PayAppController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── PayAppBaseVO.java │ │ │ │ │ │ ├── PayAppCreateReqVO.java │ │ │ │ │ │ ├── PayAppPageItemRespVO.java │ │ │ │ │ │ ├── PayAppPageReqVO.java │ │ │ │ │ │ ├── PayAppRespVO.java │ │ │ │ │ │ ├── PayAppUpdateReqVO.java │ │ │ │ │ │ └── PayAppUpdateStatusReqVO.java │ │ │ │ ├── channel │ │ │ │ │ ├── PayChannelController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── PayChannelBaseVO.java │ │ │ │ │ │ ├── PayChannelCreateReqVO.java │ │ │ │ │ │ ├── PayChannelRespVO.java │ │ │ │ │ │ └── PayChannelUpdateReqVO.java │ │ │ │ ├── demo │ │ │ │ │ ├── PayDemoOrderController.java │ │ │ │ │ ├── PayDemoTransferController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── order │ │ │ │ │ │ ├── PayDemoOrderCreateReqVO.java │ │ │ │ │ │ └── PayDemoOrderRespVO.java │ │ │ │ │ │ └── transfer │ │ │ │ │ │ ├── PayDemoTransferCreateReqVO.java │ │ │ │ │ │ └── PayDemoTransferRespVO.java │ │ │ │ ├── notify │ │ │ │ │ ├── PayNotifyController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── PayNotifyTaskBaseVO.java │ │ │ │ │ │ ├── PayNotifyTaskDetailRespVO.java │ │ │ │ │ │ ├── PayNotifyTaskPageReqVO.java │ │ │ │ │ │ └── PayNotifyTaskRespVO.java │ │ │ │ ├── order │ │ │ │ │ ├── PayOrderController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── PayOrderBaseVO.java │ │ │ │ │ │ ├── PayOrderDetailsRespVO.java │ │ │ │ │ │ ├── PayOrderExcelVO.java │ │ │ │ │ │ ├── PayOrderExportReqVO.java │ │ │ │ │ │ ├── PayOrderPageItemRespVO.java │ │ │ │ │ │ ├── PayOrderPageReqVO.java │ │ │ │ │ │ ├── PayOrderRespVO.java │ │ │ │ │ │ ├── PayOrderSubmitReqVO.java │ │ │ │ │ │ └── PayOrderSubmitRespVO.java │ │ │ │ ├── refund │ │ │ │ │ ├── PayRefundController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── PayRefundBaseVO.java │ │ │ │ │ │ ├── PayRefundDetailsRespVO.java │ │ │ │ │ │ ├── PayRefundExcelVO.java │ │ │ │ │ │ ├── PayRefundExportReqVO.java │ │ │ │ │ │ ├── PayRefundPageItemRespVO.java │ │ │ │ │ │ └── PayRefundPageReqVO.java │ │ │ │ ├── transfer │ │ │ │ │ ├── PayTransferController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── PayTransferCreateReqVO.java │ │ │ │ │ │ ├── PayTransferCreateRespVO.java │ │ │ │ │ │ ├── PayTransferPageItemRespVO.java │ │ │ │ │ │ ├── PayTransferPageReqVO.java │ │ │ │ │ │ └── PayTransferRespVO.java │ │ │ │ └── wallet │ │ │ │ │ ├── PayWalletController.java │ │ │ │ │ ├── PayWalletRechargeController.java │ │ │ │ │ ├── PayWalletRechargePackageController.java │ │ │ │ │ ├── PayWalletTransactionController.java │ │ │ │ │ └── vo │ │ │ │ │ ├── rechargepackage │ │ │ │ │ ├── WalletRechargePackageBaseVO.java │ │ │ │ │ ├── WalletRechargePackageCreateReqVO.java │ │ │ │ │ ├── WalletRechargePackagePageReqVO.java │ │ │ │ │ ├── WalletRechargePackageRespVO.java │ │ │ │ │ └── WalletRechargePackageUpdateReqVO.java │ │ │ │ │ ├── transaction │ │ │ │ │ ├── PayWalletTransactionPageReqVO.java │ │ │ │ │ └── PayWalletTransactionRespVO.java │ │ │ │ │ └── wallet │ │ │ │ │ ├── PayWalletBaseVO.java │ │ │ │ │ ├── PayWalletPageReqVO.java │ │ │ │ │ ├── PayWalletRespVO.java │ │ │ │ │ └── PayWalletUserReqVO.java │ │ │ ├── app │ │ │ │ ├── channel │ │ │ │ │ └── AppPayChannelController.java │ │ │ │ ├── order │ │ │ │ │ ├── AppPayOrderController.http │ │ │ │ │ ├── AppPayOrderController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── AppPayOrderSubmitReqVO.java │ │ │ │ │ │ └── AppPayOrderSubmitRespVO.java │ │ │ │ ├── refund │ │ │ │ │ └── package-info.java │ │ │ │ └── wallet │ │ │ │ │ ├── AppPayWalletController.java │ │ │ │ │ ├── AppPayWalletRechargeController.java │ │ │ │ │ ├── AppPayWalletRechargePackageController.java │ │ │ │ │ ├── AppPayWalletTransactionController.java │ │ │ │ │ └── vo │ │ │ │ │ ├── recharge │ │ │ │ │ ├── AppPayWalletPackageRespVO.java │ │ │ │ │ ├── AppPayWalletRechargeCreateReqVO.java │ │ │ │ │ ├── AppPayWalletRechargeCreateRespVO.java │ │ │ │ │ └── AppPayWalletRechargeRespVO.java │ │ │ │ │ ├── transaction │ │ │ │ │ ├── AppPayWalletTransactionPageReqVO.java │ │ │ │ │ ├── AppPayWalletTransactionRespVO.java │ │ │ │ │ └── AppPayWalletTransactionSummaryRespVO.java │ │ │ │ │ └── wallet │ │ │ │ │ └── AppPayWalletRespVO.java │ │ │ └── package-info.java │ │ │ ├── convert │ │ │ ├── app │ │ │ │ └── PayAppConvert.java │ │ │ ├── channel │ │ │ │ └── PayChannelConvert.java │ │ │ ├── demo │ │ │ │ ├── PayDemoOrderConvert.java │ │ │ │ └── PayDemoTransferConvert.java │ │ │ ├── notify │ │ │ │ └── PayNotifyTaskConvert.java │ │ │ ├── order │ │ │ │ └── PayOrderConvert.java │ │ │ ├── package-info.java │ │ │ ├── refund │ │ │ │ └── PayRefundConvert.java │ │ │ ├── transfer │ │ │ │ └── PayTransferConvert.java │ │ │ └── wallet │ │ │ │ ├── PayWalletConvert.java │ │ │ │ ├── PayWalletRechargeConvert.java │ │ │ │ ├── PayWalletRechargePackageConvert.java │ │ │ │ └── PayWalletTransactionConvert.java │ │ │ ├── dal │ │ │ ├── dataobject │ │ │ │ ├── app │ │ │ │ │ └── PayAppDO.java │ │ │ │ ├── channel │ │ │ │ │ └── PayChannelDO.java │ │ │ │ ├── demo │ │ │ │ │ ├── PayDemoOrderDO.java │ │ │ │ │ └── PayDemoTransferDO.java │ │ │ │ ├── notify │ │ │ │ │ ├── PayNotifyLogDO.java │ │ │ │ │ └── PayNotifyTaskDO.java │ │ │ │ ├── order │ │ │ │ │ ├── PayOrderDO.java │ │ │ │ │ └── PayOrderExtensionDO.java │ │ │ │ ├── refund │ │ │ │ │ └── PayRefundDO.java │ │ │ │ ├── transfer │ │ │ │ │ └── PayTransferDO.java │ │ │ │ └── wallet │ │ │ │ │ ├── PayWalletDO.java │ │ │ │ │ ├── PayWalletRechargeDO.java │ │ │ │ │ ├── PayWalletRechargePackageDO.java │ │ │ │ │ └── PayWalletTransactionDO.java │ │ │ ├── mysql │ │ │ │ ├── app │ │ │ │ │ └── PayAppMapper.java │ │ │ │ ├── channel │ │ │ │ │ └── PayChannelMapper.java │ │ │ │ ├── demo │ │ │ │ │ ├── PayDemoOrderMapper.java │ │ │ │ │ └── PayDemoTransferMapper.java │ │ │ │ ├── notify │ │ │ │ │ ├── PayNotifyLogMapper.java │ │ │ │ │ └── PayNotifyTaskMapper.java │ │ │ │ ├── order │ │ │ │ │ ├── PayOrderExtensionMapper.java │ │ │ │ │ └── PayOrderMapper.java │ │ │ │ ├── refund │ │ │ │ │ └── PayRefundMapper.java │ │ │ │ ├── transfer │ │ │ │ │ └── PayTransferMapper.java │ │ │ │ └── wallet │ │ │ │ │ ├── PayWalletMapper.java │ │ │ │ │ ├── PayWalletRechargeMapper.java │ │ │ │ │ ├── PayWalletRechargePackageMapper.java │ │ │ │ │ └── PayWalletTransactionMapper.java │ │ │ └── redis │ │ │ │ ├── RedisKeyConstants.java │ │ │ │ ├── no │ │ │ │ └── PayNoRedisDAO.java │ │ │ │ └── notify │ │ │ │ └── PayNotifyLockRedisDAO.java │ │ │ ├── framework │ │ │ ├── job │ │ │ │ ├── config │ │ │ │ │ └── PayJobConfiguration.java │ │ │ │ └── core │ │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── pay │ │ │ │ ├── config │ │ │ │ │ ├── PayConfiguration.java │ │ │ │ │ └── PayProperties.java │ │ │ │ └── core │ │ │ │ │ └── WalletPayClient.java │ │ │ └── web │ │ │ │ ├── config │ │ │ │ └── PayWebConfiguration.java │ │ │ │ └── package-info.java │ │ │ ├── job │ │ │ ├── notify │ │ │ │ └── PayNotifyJob.java │ │ │ ├── order │ │ │ │ ├── PayOrderExpireJob.java │ │ │ │ └── PayOrderSyncJob.java │ │ │ ├── refund │ │ │ │ └── PayRefundSyncJob.java │ │ │ └── transfer │ │ │ │ └── PayTransferSyncJob.java │ │ │ ├── package-info.java │ │ │ └── service │ │ │ ├── app │ │ │ ├── PayAppService.java │ │ │ └── PayAppServiceImpl.java │ │ │ ├── channel │ │ │ ├── PayChannelService.java │ │ │ └── PayChannelServiceImpl.java │ │ │ ├── demo │ │ │ ├── PayDemoOrderService.java │ │ │ ├── PayDemoOrderServiceImpl.java │ │ │ ├── PayDemoTransferService.java │ │ │ └── PayDemoTransferServiceImpl.java │ │ │ ├── notify │ │ │ ├── PayNotifyService.java │ │ │ └── PayNotifyServiceImpl.java │ │ │ ├── order │ │ │ ├── PayOrderService.java │ │ │ └── PayOrderServiceImpl.java │ │ │ ├── refund │ │ │ ├── PayRefundService.java │ │ │ └── PayRefundServiceImpl.java │ │ │ ├── transfer │ │ │ ├── PayTransferService.java │ │ │ └── PayTransferServiceImpl.java │ │ │ └── wallet │ │ │ ├── PayWalletRechargePackageService.java │ │ │ ├── PayWalletRechargePackageServiceImpl.java │ │ │ ├── PayWalletRechargeService.java │ │ │ ├── PayWalletRechargeServiceImpl.java │ │ │ ├── PayWalletService.java │ │ │ ├── PayWalletServiceImpl.java │ │ │ ├── PayWalletTransactionService.java │ │ │ ├── PayWalletTransactionServiceImpl.java │ │ │ └── bo │ │ │ └── WalletTransactionCreateReqBO.java │ │ ├── test-integration │ │ ├── java │ │ │ └── cn │ │ │ │ └── iocoder │ │ │ │ └── yudao │ │ │ │ └── module │ │ │ │ └── pay │ │ │ │ ├── dal │ │ │ │ ├── dataobject │ │ │ │ │ └── merchant │ │ │ │ │ │ └── PayChannelDOTest.java │ │ │ │ └── mysql │ │ │ │ │ └── merchant │ │ │ │ │ └── PayChannelMapperIntegrationTest.java │ │ │ │ ├── service │ │ │ │ ├── order │ │ │ │ │ └── PayOrderServiceIntegrationTest.java │ │ │ │ └── package-info.java │ │ │ │ └── test │ │ │ │ ├── BaseDbAndRedisIntegrationTest.java │ │ │ │ ├── BaseDbIntegrationTest.java │ │ │ │ └── BaseRedisIntegrationTest.java │ │ └── resources │ │ │ └── application-integration-test.yaml │ │ └── test │ │ ├── java │ │ └── cn │ │ │ └── iocoder │ │ │ └── yudao │ │ │ └── module │ │ │ └── pay │ │ │ └── service │ │ │ ├── app │ │ │ └── PayAppServiceTest.java │ │ │ ├── channel │ │ │ └── PayChannelServiceTest.java │ │ │ ├── notify │ │ │ └── PayNotifyServiceTest.java │ │ │ ├── order │ │ │ └── PayOrderServiceTest.java │ │ │ └── refund │ │ │ └── PayRefundServiceTest.java │ │ └── resources │ │ ├── application-unit-test.yaml │ │ ├── logback.xml │ │ └── sql │ │ ├── clean.sql │ │ └── create_tables.sql └── yudao-spring-boot-starter-biz-pay │ ├── pom.xml │ └── src │ ├── main │ ├── java │ │ └── cn │ │ │ └── iocoder │ │ │ └── yudao │ │ │ └── framework │ │ │ └── pay │ │ │ ├── config │ │ │ └── YudaoPayAutoConfiguration.java │ │ │ └── core │ │ │ ├── client │ │ │ ├── PayClient.java │ │ │ ├── PayClientConfig.java │ │ │ ├── PayClientFactory.java │ │ │ ├── dto │ │ │ │ ├── order │ │ │ │ │ ├── PayOrderRespDTO.java │ │ │ │ │ └── PayOrderUnifiedReqDTO.java │ │ │ │ ├── refund │ │ │ │ │ ├── PayRefundRespDTO.java │ │ │ │ │ └── PayRefundUnifiedReqDTO.java │ │ │ │ └── transfer │ │ │ │ │ ├── PayTransferRespDTO.java │ │ │ │ │ └── PayTransferUnifiedReqDTO.java │ │ │ ├── exception │ │ │ │ └── PayException.java │ │ │ └── impl │ │ │ │ ├── AbstractPayClient.java │ │ │ │ ├── NonePayClientConfig.java │ │ │ │ ├── PayClientFactoryImpl.java │ │ │ │ ├── alipay │ │ │ │ ├── AbstractAlipayPayClient.java │ │ │ │ ├── AlipayAppPayClient.java │ │ │ │ ├── AlipayBarPayClient.java │ │ │ │ ├── AlipayPayClientConfig.java │ │ │ │ ├── AlipayPcPayClient.java │ │ │ │ ├── AlipayQrPayClient.java │ │ │ │ └── AlipayWapPayClient.java │ │ │ │ ├── mock │ │ │ │ └── MockPayClient.java │ │ │ │ └── weixin │ │ │ │ ├── AbstractWxPayClient.java │ │ │ │ ├── WxAppPayClient.java │ │ │ │ ├── WxBarPayClient.java │ │ │ │ ├── WxLitePayClient.java │ │ │ │ ├── WxNativePayClient.java │ │ │ │ ├── WxPayClientConfig.java │ │ │ │ ├── WxPubPayClient.java │ │ │ │ └── WxWapPayClient.java │ │ │ └── enums │ │ │ ├── channel │ │ │ └── PayChannelEnum.java │ │ │ ├── order │ │ │ ├── PayOrderDisplayModeEnum.java │ │ │ └── PayOrderStatusRespEnum.java │ │ │ ├── refund │ │ │ └── PayRefundStatusRespEnum.java │ │ │ └── transfer │ │ │ ├── PayTransferStatusRespEnum.java │ │ │ └── PayTransferTypeEnum.java │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ └── test │ └── java │ └── cn │ └── iocoder │ └── yudao │ └── framework │ └── pay │ └── core │ └── client │ └── impl │ ├── PayClientFactoryImplIntegrationTest.java │ ├── alipay │ ├── AbstractAlipayClientTest.java │ ├── AlipayBarPayClientTest.java │ ├── AlipayPcPayClientTest.java │ ├── AlipayQrPayClientTest.java │ └── AlipayWapPayClientTest.java │ └── weixin │ ├── WxBarPayClientIntegrationTest.java │ └── WxNativePayClientIntegrationTest.java ├── yudao-module-report ├── pom.xml ├── yudao-module-report-api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── module │ │ └── report │ │ ├── api │ │ └── package-info.java │ │ └── enums │ │ └── ErrorCodeConstants.java └── yudao-module-report-biz │ ├── pom.xml │ └── src │ ├── main │ └── java │ │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── module │ │ └── report │ │ ├── controller │ │ ├── admin │ │ │ ├── ajreport │ │ │ │ └── package-info.java │ │ │ └── goview │ │ │ │ ├── GoViewDataController.java │ │ │ │ ├── GoViewProjectController.java │ │ │ │ └── vo │ │ │ │ ├── data │ │ │ │ ├── GoViewDataGetBySqlReqVO.java │ │ │ │ └── GoViewDataRespVO.java │ │ │ │ └── project │ │ │ │ ├── GoViewProjectCreateReqVO.java │ │ │ │ ├── GoViewProjectRespVO.java │ │ │ │ └── GoViewProjectUpdateReqVO.java │ │ └── package-info.java │ │ ├── convert │ │ ├── ajreport │ │ │ └── package-info.java │ │ └── goview │ │ │ └── GoViewProjectConvert.java │ │ ├── dal │ │ ├── dataobject │ │ │ ├── ajreport │ │ │ │ └── package-info.java │ │ │ └── goview │ │ │ │ └── GoViewProjectDO.java │ │ └── mysql │ │ │ ├── ajreport │ │ │ └── package-info.java │ │ │ └── goview │ │ │ └── GoViewProjectMapper.java │ │ ├── framework │ │ ├── jmreport │ │ │ ├── config │ │ │ │ └── JmReportConfiguration.java │ │ │ └── core │ │ │ │ ├── service │ │ │ │ └── JmReportTokenServiceImpl.java │ │ │ │ └── web │ │ │ │ └── package-info.java │ │ ├── package-info.java │ │ └── security │ │ │ ├── config │ │ │ └── SecurityConfiguration.java │ │ │ └── core │ │ │ └── package-info.java │ │ ├── package-info.java │ │ └── service │ │ ├── ajreport │ │ └── package-info.java │ │ └── goview │ │ ├── GoViewDataService.java │ │ ├── GoViewDataServiceImpl.java │ │ ├── GoViewProjectService.java │ │ └── GoViewProjectServiceImpl.java │ └── test │ ├── java │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── module │ │ └── report │ │ └── service │ │ └── goview │ │ ├── GoViewDataServiceImplTest.java │ │ └── GoViewProjectServiceImplTest.java │ └── resources │ ├── application-unit-test.yaml │ ├── logback.xml │ └── sql │ ├── clean.sql │ └── create_tables.sql ├── yudao-module-system ├── pom.xml ├── yudao-module-system-api │ ├── pom.xml │ └── src │ │ └── main │ │ └── java │ │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── module │ │ └── system │ │ ├── api │ │ ├── dept │ │ │ ├── DeptApi.java │ │ │ ├── PostApi.java │ │ │ └── dto │ │ │ │ ├── DeptRespDTO.java │ │ │ │ └── PostRespDTO.java │ │ ├── dict │ │ │ ├── DictDataApi.java │ │ │ └── dto │ │ │ │ └── DictDataRespDTO.java │ │ ├── errorcode │ │ │ ├── ErrorCodeApi.java │ │ │ └── dto │ │ │ │ ├── ErrorCodeAutoGenerateReqDTO.java │ │ │ │ └── ErrorCodeRespDTO.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 │ │ ├── package-info.java │ │ ├── permission │ │ │ ├── PermissionApi.java │ │ │ ├── RoleApi.java │ │ │ └── dto │ │ │ │ └── DeptDataPermissionRespDTO.java │ │ ├── sensitiveword │ │ │ └── SensitiveWordApi.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 │ │ ├── errorcode │ │ └── ErrorCodeTypeEnum.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 └── yudao-module-system-biz │ ├── pom.xml │ └── src │ ├── main │ ├── java │ │ └── cn │ │ │ └── iocoder │ │ │ └── yudao │ │ │ └── module │ │ │ └── system │ │ │ ├── api │ │ │ ├── dept │ │ │ │ ├── DeptApiImpl.java │ │ │ │ └── PostApiImpl.java │ │ │ ├── dict │ │ │ │ └── DictDataApiImpl.java │ │ │ ├── errorcode │ │ │ │ └── ErrorCodeApiImpl.java │ │ │ ├── logger │ │ │ │ ├── LoginLogApiImpl.java │ │ │ │ └── OperateLogApiImpl.java │ │ │ ├── mail │ │ │ │ └── MailSendApiImpl.java │ │ │ ├── notify │ │ │ │ └── NotifyMessageSendApiImpl.java │ │ │ ├── oauth2 │ │ │ │ └── OAuth2TokenApiImpl.java │ │ │ ├── permission │ │ │ │ ├── PermissionApiImpl.java │ │ │ │ └── RoleApiImpl.java │ │ │ ├── sensitiveword │ │ │ │ └── SensitiveWordApiImpl.java │ │ │ ├── sms │ │ │ │ ├── SmsCodeApiImpl.java │ │ │ │ └── SmsSendApiImpl.java │ │ │ ├── social │ │ │ │ ├── SocialClientApiImpl.java │ │ │ │ └── SocialUserApiImpl.java │ │ │ ├── tenant │ │ │ │ └── TenantApiImpl.java │ │ │ └── user │ │ │ │ └── AdminUserApiImpl.java │ │ │ ├── controller │ │ │ ├── admin │ │ │ │ ├── auth │ │ │ │ │ ├── AuthController.http │ │ │ │ │ ├── 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.http │ │ │ │ │ ├── DictDataController.java │ │ │ │ │ ├── DictTypeController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── data │ │ │ │ │ │ ├── DictDataPageReqVO.java │ │ │ │ │ │ ├── DictDataRespVO.java │ │ │ │ │ │ ├── DictDataSaveReqVO.java │ │ │ │ │ │ └── DictDataSimpleRespVO.java │ │ │ │ │ │ └── type │ │ │ │ │ │ ├── DictTypePageReqVO.java │ │ │ │ │ │ ├── DictTypeRespVO.java │ │ │ │ │ │ ├── DictTypeSaveReqVO.java │ │ │ │ │ │ └── DictTypeSimpleRespVO.java │ │ │ │ ├── errorcode │ │ │ │ │ ├── ErrorCodeController.http │ │ │ │ │ ├── ErrorCodeController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── ErrorCodePageReqVO.java │ │ │ │ │ │ ├── ErrorCodeRespVO.java │ │ │ │ │ │ └── ErrorCodeSaveReqVO.java │ │ │ │ ├── ip │ │ │ │ │ ├── AreaController.http │ │ │ │ │ ├── AreaController.java │ │ │ │ │ └── vo │ │ │ │ │ │ └── AreaNodeRespVO.java │ │ │ │ ├── logger │ │ │ │ │ ├── LoginLogController.java │ │ │ │ │ ├── OperateLogController.http │ │ │ │ │ ├── OperateLogController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── loginlog │ │ │ │ │ │ ├── LoginLogPageReqVO.java │ │ │ │ │ │ └── LoginLogRespVO.java │ │ │ │ │ │ └── operatelog │ │ │ │ │ │ ├── OperateLogPageReqVO.java │ │ │ │ │ │ └── OperateLogRespVO.java │ │ │ │ ├── mail │ │ │ │ │ ├── MailAccountController.java │ │ │ │ │ ├── MailLogController.java │ │ │ │ │ ├── MailTemplateController.http │ │ │ │ │ ├── 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.http │ │ │ │ │ ├── OAuth2ClientController.java │ │ │ │ │ ├── OAuth2OpenController.http │ │ │ │ │ ├── OAuth2OpenController.java │ │ │ │ │ ├── OAuth2TokenController.java │ │ │ │ │ ├── OAuth2UserController.http │ │ │ │ │ ├── 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.http │ │ │ │ │ ├── MenuController.java │ │ │ │ │ ├── PermissionController.java │ │ │ │ │ ├── RoleController.http │ │ │ │ │ ├── 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 │ │ │ │ ├── sensitiveword │ │ │ │ │ ├── SensitiveWordController.http │ │ │ │ │ ├── SensitiveWordController.java │ │ │ │ │ └── vo │ │ │ │ │ │ ├── SensitiveWordPageReqVO.java │ │ │ │ │ │ ├── SensitiveWordRespVO.java │ │ │ │ │ │ └── SensitiveWordSaveVO.java │ │ │ │ ├── sms │ │ │ │ │ ├── SmsCallbackController.java │ │ │ │ │ ├── SmsChannelController.java │ │ │ │ │ ├── SmsLogController.java │ │ │ │ │ ├── SmsTemplateController.http │ │ │ │ │ ├── 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.http │ │ │ │ │ ├── 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.http │ │ │ │ │ ├── UserController.java │ │ │ │ │ ├── UserProfileController.http │ │ │ │ │ ├── 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 │ │ │ └── package-info.java │ │ │ ├── convert │ │ │ ├── auth │ │ │ │ └── AuthConvert.java │ │ │ ├── mail │ │ │ │ └── MailAccountConvert.java │ │ │ ├── oauth2 │ │ │ │ └── OAuth2OpenConvert.java │ │ │ ├── package-info.java │ │ │ ├── social │ │ │ │ └── SocialUserConvert.java │ │ │ ├── tenant │ │ │ │ └── TenantConvert.java │ │ │ └── user │ │ │ │ └── UserConvert.java │ │ │ ├── dal │ │ │ ├── dataobject │ │ │ │ ├── dept │ │ │ │ │ ├── DeptDO.java │ │ │ │ │ ├── PostDO.java │ │ │ │ │ └── UserPostDO.java │ │ │ │ ├── dict │ │ │ │ │ ├── DictDataDO.java │ │ │ │ │ └── DictTypeDO.java │ │ │ │ ├── errorcode │ │ │ │ │ └── ErrorCodeDO.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 │ │ │ │ ├── sensitiveword │ │ │ │ │ └── SensitiveWordDO.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 │ │ │ │ ├── errorcode │ │ │ │ │ └── ErrorCodeMapper.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 │ │ │ │ ├── package-info.java │ │ │ │ ├── permission │ │ │ │ │ ├── MenuMapper.java │ │ │ │ │ ├── RoleMapper.java │ │ │ │ │ ├── RoleMenuMapper.java │ │ │ │ │ └── UserRoleMapper.java │ │ │ │ ├── sensitiveword │ │ │ │ │ └── SensitiveWordMapper.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 │ │ │ │ │ └── YudaoCaptchaConfiguration.java │ │ │ │ ├── core │ │ │ │ │ └── RedisCaptchaServiceImpl.java │ │ │ │ └── package-info.java │ │ │ ├── datapermission │ │ │ │ ├── config │ │ │ │ │ └── DataPermissionConfiguration.java │ │ │ │ └── package-info.java │ │ │ ├── operatelog │ │ │ │ ├── core │ │ │ │ │ ├── AdminUserParseFunction.java │ │ │ │ │ ├── AreaParseFunction.java │ │ │ │ │ ├── BooleanParseFunction.java │ │ │ │ │ ├── DeptParseFunction.java │ │ │ │ │ ├── PostParseFunction.java │ │ │ │ │ └── SexParseFunction.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── sms │ │ │ │ ├── config │ │ │ │ │ ├── SmsCodeProperties.java │ │ │ │ │ └── SmsConfiguration.java │ │ │ │ └── core │ │ │ │ │ ├── client │ │ │ │ │ ├── SmsClient.java │ │ │ │ │ ├── SmsClientFactory.java │ │ │ │ │ ├── dto │ │ │ │ │ │ ├── SmsReceiveRespDTO.java │ │ │ │ │ │ ├── SmsSendRespDTO.java │ │ │ │ │ │ └── SmsTemplateRespDTO.java │ │ │ │ │ └── impl │ │ │ │ │ │ ├── AbstractSmsClient.java │ │ │ │ │ │ ├── AliyunSmsClient.java │ │ │ │ │ │ ├── DebugDingTalkSmsClient.java │ │ │ │ │ │ ├── SmsClientFactoryImpl.java │ │ │ │ │ │ └── TencentSmsClient.java │ │ │ │ │ ├── enums │ │ │ │ │ ├── SmsChannelEnum.java │ │ │ │ │ └── SmsTemplateAuditStatusEnum.java │ │ │ │ │ └── property │ │ │ │ │ └── SmsChannelProperties.java │ │ │ └── web │ │ │ │ ├── config │ │ │ │ └── SystemWebConfiguration.java │ │ │ │ └── package-info.java │ │ │ ├── job │ │ │ ├── DemoJob.java │ │ │ └── package-info.java │ │ │ ├── mq │ │ │ ├── consumer │ │ │ │ ├── mail │ │ │ │ │ └── MailSendConsumer.java │ │ │ │ └── sms │ │ │ │ │ └── SmsSendConsumer.java │ │ │ ├── message │ │ │ │ ├── mail │ │ │ │ │ └── MailSendMessage.java │ │ │ │ └── sms │ │ │ │ │ └── SmsSendMessage.java │ │ │ └── producer │ │ │ │ ├── mail │ │ │ │ └── MailProducer.java │ │ │ │ └── sms │ │ │ │ └── SmsProducer.java │ │ │ ├── package-info.java │ │ │ ├── service │ │ │ ├── auth │ │ │ │ ├── AdminAuthService.java │ │ │ │ └── AdminAuthServiceImpl.java │ │ │ ├── dept │ │ │ │ ├── DeptService.java │ │ │ │ ├── DeptServiceImpl.java │ │ │ │ ├── PostService.java │ │ │ │ └── PostServiceImpl.java │ │ │ ├── dict │ │ │ │ ├── DictDataService.java │ │ │ │ ├── DictDataServiceImpl.java │ │ │ │ ├── DictTypeService.java │ │ │ │ └── DictTypeServiceImpl.java │ │ │ ├── errorcode │ │ │ │ ├── ErrorCodeService.java │ │ │ │ └── ErrorCodeServiceImpl.java │ │ │ ├── logger │ │ │ │ ├── LoginLogService.java │ │ │ │ ├── LoginLogServiceImpl.java │ │ │ │ ├── OperateLogService.java │ │ │ │ └── OperateLogServiceImpl.java │ │ │ ├── mail │ │ │ │ ├── MailAccountService.java │ │ │ │ ├── MailAccountServiceImpl.java │ │ │ │ ├── MailLogService.java │ │ │ │ ├── MailLogServiceImpl.java │ │ │ │ ├── MailSendService.java │ │ │ │ ├── MailSendServiceImpl.java │ │ │ │ ├── MailTemplateService.java │ │ │ │ └── MailTemplateServiceImpl.java │ │ │ ├── member │ │ │ │ ├── MemberService.java │ │ │ │ ├── MemberServiceImpl.java │ │ │ │ └── package-info.java │ │ │ ├── notice │ │ │ │ ├── NoticeService.java │ │ │ │ └── NoticeServiceImpl.java │ │ │ ├── notify │ │ │ │ ├── NotifyMessageService.java │ │ │ │ ├── NotifyMessageServiceImpl.java │ │ │ │ ├── NotifySendService.java │ │ │ │ ├── NotifySendServiceImpl.java │ │ │ │ ├── NotifyTemplateService.java │ │ │ │ └── NotifyTemplateServiceImpl.java │ │ │ ├── oauth2 │ │ │ │ ├── OAuth2ApproveService.java │ │ │ │ ├── OAuth2ApproveServiceImpl.java │ │ │ │ ├── OAuth2ClientService.java │ │ │ │ ├── OAuth2ClientServiceImpl.java │ │ │ │ ├── OAuth2CodeService.java │ │ │ │ ├── OAuth2CodeServiceImpl.java │ │ │ │ ├── OAuth2GrantService.java │ │ │ │ ├── OAuth2GrantServiceImpl.java │ │ │ │ ├── OAuth2TokenService.java │ │ │ │ └── OAuth2TokenServiceImpl.java │ │ │ ├── permission │ │ │ │ ├── MenuService.java │ │ │ │ ├── MenuServiceImpl.java │ │ │ │ ├── PermissionService.java │ │ │ │ ├── PermissionServiceImpl.java │ │ │ │ ├── RoleService.java │ │ │ │ └── RoleServiceImpl.java │ │ │ ├── sensitiveword │ │ │ │ ├── SensitiveWordService.java │ │ │ │ └── SensitiveWordServiceImpl.java │ │ │ ├── sms │ │ │ │ ├── SmsChannelService.java │ │ │ │ ├── SmsChannelServiceImpl.java │ │ │ │ ├── SmsCodeService.java │ │ │ │ ├── SmsCodeServiceImpl.java │ │ │ │ ├── SmsLogService.java │ │ │ │ ├── SmsLogServiceImpl.java │ │ │ │ ├── SmsSendService.java │ │ │ │ ├── SmsSendServiceImpl.java │ │ │ │ ├── SmsTemplateService.java │ │ │ │ └── SmsTemplateServiceImpl.java │ │ │ ├── social │ │ │ │ ├── SocialClientService.java │ │ │ │ ├── SocialClientServiceImpl.java │ │ │ │ ├── SocialUserService.java │ │ │ │ └── SocialUserServiceImpl.java │ │ │ ├── tenant │ │ │ │ ├── TenantPackageService.java │ │ │ │ ├── TenantPackageServiceImpl.java │ │ │ │ ├── TenantService.java │ │ │ │ ├── TenantServiceImpl.java │ │ │ │ └── handler │ │ │ │ │ ├── TenantInfoHandler.java │ │ │ │ │ └── TenantMenuHandler.java │ │ │ └── user │ │ │ │ ├── AdminUserService.java │ │ │ │ └── AdminUserServiceImpl.java │ │ │ └── util │ │ │ ├── collection │ │ │ └── SimpleTrie.java │ │ │ ├── oauth2 │ │ │ └── OAuth2Utils.java │ │ │ └── package-info.java │ └── resources │ │ ├── META-INF │ │ └── services │ │ │ └── com.xingyuv.captcha.service.CaptchaCacheService │ │ └── images │ │ ├── jigsaw │ │ ├── original │ │ │ ├── bg1.png │ │ │ ├── bg2.png │ │ │ ├── bg3.png │ │ │ ├── bg4.png │ │ │ ├── bg5.png │ │ │ ├── bg6.png │ │ │ ├── bg7.png │ │ │ ├── bg8.png │ │ │ └── bg9.png │ │ └── slidingBlock │ │ │ ├── 11 │ │ │ ├── 10.png │ │ │ ├── 11.png │ │ │ ├── 12.png │ │ │ ├── 13.png │ │ │ ├── 14.png │ │ │ ├── 15.png │ │ │ ├── 16.png │ │ │ ├── 17.png │ │ │ ├── 18.png │ │ │ ├── 19.png │ │ │ ├── 8.png │ │ │ └── 9.png │ │ │ ├── 1.png │ │ │ ├── 2.png │ │ │ ├── 3.png │ │ │ └── 4.png │ │ └── pic-click │ │ ├── bg1.png │ │ ├── bg10.png │ │ ├── bg2.png │ │ ├── bg3.png │ │ ├── bg4.png │ │ ├── bg5.png │ │ ├── bg6.png │ │ ├── bg7.png │ │ ├── bg8.png │ │ └── bg9.png │ ├── test-integration │ ├── java │ │ └── cn │ │ │ └── iocoder │ │ │ └── yudao │ │ │ └── module │ │ │ └── system │ │ │ ├── job │ │ │ └── SchedulerManagerTest.java │ │ │ ├── mq │ │ │ └── RedisStreamTest.java │ │ │ ├── service │ │ │ ├── package-info.java │ │ │ └── sms │ │ │ │ └── SmsServiceIntegrationTest.java │ │ │ └── test │ │ │ ├── BaseDbAndRedisIntegrationTest.java │ │ │ └── BaseRedisIntegrationTest.java │ └── resources │ │ └── application-integration-test.yaml │ └── test │ ├── java │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── module │ │ └── system │ │ ├── controller │ │ └── admin │ │ │ └── oauth2 │ │ │ └── OAuth2OpenControllerTest.java │ │ ├── framework │ │ └── sms │ │ │ └── core │ │ │ └── client │ │ │ └── impl │ │ │ ├── AliyunSmsClientTest.java │ │ │ └── TencentSmsClientTest.java │ │ └── service │ │ ├── auth │ │ └── AdminAuthServiceImplTest.java │ │ ├── dept │ │ ├── DeptServiceImplTest.java │ │ └── PostServiceImplTest.java │ │ ├── dict │ │ ├── DictDataServiceImplTest.java │ │ └── DictTypeServiceImplTest.java │ │ ├── errorcode │ │ └── ErrorCodeServiceTest.java │ │ ├── logger │ │ ├── LoginLogServiceImplTest.java │ │ └── OperateLogServiceImplTest.java │ │ ├── mail │ │ ├── MailAccountServiceImplTest.java │ │ ├── MailLogServiceImplTest.java │ │ ├── MailSendServiceImplTest.java │ │ └── MailTemplateServiceImplTest.java │ │ ├── notice │ │ └── NoticeServiceImplTest.java │ │ ├── notify │ │ ├── NotifyMessageServiceImplTest.java │ │ ├── NotifySendServiceImplTest.java │ │ └── NotifyTemplateServiceImplTest.java │ │ ├── oauth2 │ │ ├── OAuth2ApproveServiceImplTest.java │ │ ├── OAuth2ClientServiceImplTest.java │ │ ├── OAuth2CodeServiceImplTest.java │ │ ├── OAuth2GrantServiceImplTest.java │ │ └── OAuth2TokenServiceImplTest.java │ │ ├── permission │ │ ├── MenuServiceImplTest.java │ │ ├── PermissionServiceTest.java │ │ └── RoleServiceImplTest.java │ │ ├── sensitiveword │ │ └── SensitiveWordServiceImplTest.java │ │ ├── sms │ │ ├── SmsChannelServiceTest.java │ │ ├── SmsCodeServiceImplTest.java │ │ ├── SmsLogServiceImplTest.java │ │ ├── SmsSendServiceImplTest.java │ │ └── SmsTemplateServiceImplTest.java │ │ ├── social │ │ ├── SocialClientServiceImplTest.java │ │ └── SocialUserServiceImplTest.java │ │ ├── tenant │ │ ├── TenantPackageServiceImplTest.java │ │ └── TenantServiceImplTest.java │ │ └── user │ │ └── AdminUserServiceImplTest.java │ └── resources │ ├── application-unit-test.yaml │ ├── logback.xml │ └── sql │ ├── clean.sql │ └── create_tables.sql └── yudao-server ├── Dockerfile ├── pom.xml └── src ├── main ├── java │ └── cn │ │ └── iocoder │ │ └── yudao │ │ └── server │ │ ├── YudaoServerApplication.java │ │ └── controller │ │ └── DefaultController.java └── resources │ ├── application-dev.yaml │ ├── application-local.yaml │ ├── application.yaml │ └── logback-spring.xml └── test └── java └── cn └── iocoder └── yudao └── ProjectReactor.java /image/123.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/image/123.png -------------------------------------------------------------------------------- /yudao-example/yudao-sso-demo-by-code/src/main/java/cn/iocoder/yudao/ssodemo/SSODemoApplication.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.ssodemo; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class SSODemoApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(SSODemoApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /yudao-example/yudao-sso-demo-by-code/src/main/java/cn/iocoder/yudao/ssodemo/client/dto/CommonResult.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.ssodemo.client.dto; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * 通用返回 9 | * 10 | * @param 数据泛型 11 | */ 12 | @Data 13 | public class CommonResult implements Serializable { 14 | 15 | /** 16 | * 错误码 17 | */ 18 | private Integer code; 19 | /** 20 | * 返回数据 21 | */ 22 | private T data; 23 | /** 24 | * 错误提示,用户可阅读 25 | */ 26 | private String msg; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /yudao-example/yudao-sso-demo-by-code/src/main/resources/application.yaml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 18080 3 | -------------------------------------------------------------------------------- /yudao-example/yudao-sso-demo-by-password/src/main/java/cn/iocoder/yudao/ssodemo/SSODemoApplication.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.ssodemo; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class SSODemoApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(SSODemoApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /yudao-example/yudao-sso-demo-by-password/src/main/java/cn/iocoder/yudao/ssodemo/client/dto/CommonResult.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.ssodemo.client.dto; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * 通用返回 9 | * 10 | * @param 数据泛型 11 | */ 12 | @Data 13 | public class CommonResult implements Serializable { 14 | 15 | /** 16 | * 错误码 17 | */ 18 | private Integer code; 19 | /** 20 | * 返回数据 21 | */ 22 | private T data; 23 | /** 24 | * 错误提示,用户可阅读 25 | */ 26 | private String msg; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /yudao-example/yudao-sso-demo-by-password/src/main/resources/application.yaml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 18080 3 | -------------------------------------------------------------------------------- /yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/core/IntArrayValuable.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.common.core; 2 | 3 | /** 4 | * 可生成 Int 数组的接口 5 | * 6 | * @author 芋道源码 7 | */ 8 | public interface IntArrayValuable { 9 | 10 | /** 11 | * @return int 数组 12 | */ 13 | int[] array(); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/core/KeyValue.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.common.core; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.NoArgsConstructor; 6 | 7 | import java.io.Serializable; 8 | 9 | /** 10 | * Key Value 的键值对 11 | * 12 | * @author 芋道源码 13 | */ 14 | @Data 15 | @NoArgsConstructor 16 | @AllArgsConstructor 17 | public class KeyValue implements Serializable { 18 | 19 | private K key; 20 | private V value; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/DocumentEnum.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.common.enums; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 文档地址 8 | * 9 | * @author 芋道源码 10 | */ 11 | @Getter 12 | @AllArgsConstructor 13 | public enum DocumentEnum { 14 | 15 | REDIS_INSTALL("https://gitee.com/zhijiantianya/ruoyi-vue-pro/issues/I4VCSJ", "Redis 安装文档"), 16 | TENANT("https://doc.iocoder.cn", "SaaS 多租户文档"); 17 | 18 | private final String url; 19 | private final String memo; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 基础的通用类,和框架无关 3 | * 4 | * 例如说,CommonResult 为通用返回 5 | */ 6 | package cn.iocoder.yudao.framework.common; 7 | -------------------------------------------------------------------------------- /yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/SortablePageParam.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.common.pojo; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | import java.util.List; 9 | 10 | @Schema(description = "可排序的分页参数") 11 | @Data 12 | @EqualsAndHashCode(callSuper = true) 13 | @ToString(callSuper = true) 14 | public class SortablePageParam extends PageParam { 15 | 16 | @Schema(description = "排序字段") 17 | private List sortingFields; 18 | 19 | } -------------------------------------------------------------------------------- /yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/collection/SetUtils.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.common.util.collection; 2 | 3 | import cn.hutool.core.collection.CollUtil; 4 | 5 | import java.util.Set; 6 | 7 | /** 8 | * Set 工具类 9 | * 10 | * @author 芋道源码 11 | */ 12 | public class SetUtils { 13 | 14 | @SafeVarargs 15 | public static Set asSet(T... objs) { 16 | return CollUtil.newHashSet(objs); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 对于工具类的选择,优先查找 Hutool 中有没对应的方法 3 | * 如果没有,则自己封装对应的工具类,以 Utils 结尾,用于区分 4 | * 5 | * ps:如果担心 Hutool 存在坑的问题,可以阅读 Hutool 的实现源码,以确保可靠性。并且,可以补充相关的单元测试。 6 | */ 7 | package cn.iocoder.yudao.framework.common.util; 8 | -------------------------------------------------------------------------------- /yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/spring/SpringUtils.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.common.util.spring; 2 | 3 | import cn.hutool.extra.spring.SpringUtil; 4 | 5 | import java.util.Objects; 6 | 7 | /** 8 | * Spring 工具类 9 | * 10 | * @author 芋道源码 11 | */ 12 | public class SpringUtils extends SpringUtil { 13 | 14 | /** 15 | * 是否为生产环境 16 | * 17 | * @return 是否生产环境 18 | */ 19 | public static boolean isProd() { 20 | String activeProfile = getActiveProfile(); 21 | return Objects.equals("prod", activeProfile); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/validation/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 使用 Hibernate Validator 实现参数校验 3 | */ 4 | package cn.iocoder.yudao.framework.common.validation; 5 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/core/rule/dept/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 基于部门的数据权限规则 3 | * 4 | * @author 芋道源码 5 | */ 6 | package cn.iocoder.yudao.framework.datapermission.core.rule.dept; 7 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/java/cn/iocoder/yudao/framework/datapermission/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 基于 JSqlParser 解析 SQL,增加数据权限的 WHERE 条件 3 | */ 4 | package cn.iocoder.yudao.framework.datapermission; 5 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | cn.iocoder.yudao.framework.datapermission.config.YudaoDataPermissionAutoConfiguration 2 | cn.iocoder.yudao.framework.datapermission.config.YudaoDeptDataPermissionAutoConfiguration -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-biz-data-permission/src/test/java/cn/iocoder/yudao/framework/datapermission/core/util/DataPermissionUtilsTest.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.datapermission.core.util; 2 | 3 | import cn.iocoder.yudao.framework.datapermission.core.aop.DataPermissionContextHolder; 4 | import org.junit.jupiter.api.Test; 5 | 6 | import static org.junit.jupiter.api.Assertions.*; 7 | 8 | public class DataPermissionUtilsTest { 9 | 10 | @Test 11 | public void testExecuteIgnore() { 12 | DataPermissionUtils.executeIgnore(() -> assertFalse(DataPermissionContextHolder.get().enable())); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-biz-ip/src/main/java/cn/iocoder/yudao/framework/ip/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * IP 拓展,支持如下功能: 3 | * 4 | * 1. IP 功能:查询 IP 对应的城市信息 5 | * 基于 https://gitee.com/lionsoul/ip2region 实现 6 | * 2. 城市功能:查询城市编码对应的城市信息 7 | * 基于 https://github.com/modood/Administrative-divisions-of-China 实现 8 | * 9 | * @author 芋道源码 10 | */ 11 | package cn.iocoder.yudao.framework.ip; 12 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-biz-ip/src/main/resources/ip2region.xdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-framework/yudao-spring-boot-starter-biz-ip/src/main/resources/ip2region.xdb -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/aop/TenantIgnore.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.tenant.core.aop; 2 | 3 | import java.lang.annotation.*; 4 | 5 | /** 6 | * 忽略租户,标记指定方法不进行租户的自动过滤 7 | * 8 | * 注意,只有 DB 的场景会过滤,其它场景暂时不过滤: 9 | * 1、Redis 场景:因为是基于 Key 实现多租户的能力,所以忽略没有意义,不像 DB 是一个 column 实现的 10 | * 2、MQ 场景:有点难以抉择,目前可以通过 Consumer 手动在消费的方法上,添加 @TenantIgnore 进行忽略 11 | * 12 | * @author 芋道源码 13 | */ 14 | @Target({ElementType.METHOD}) 15 | @Retention(RetentionPolicy.RUNTIME) 16 | @Inherited 17 | public @interface TenantIgnore { 18 | } 19 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/db/TenantBaseDO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.tenant.core.db; 2 | 3 | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | 7 | /** 8 | * 拓展多租户的 BaseDO 基类 9 | * 10 | * @author 芋道源码 11 | */ 12 | @Data 13 | @EqualsAndHashCode(callSuper = true) 14 | public abstract class TenantBaseDO extends BaseDO { 15 | 16 | /** 17 | * 多租户编号 18 | */ 19 | private Long tenantId; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/job/TenantJob.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.tenant.core.job; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * 多租户 Job 注解 10 | */ 11 | @Target({ElementType.METHOD}) 12 | @Retention(RetentionPolicy.RUNTIME) 13 | public @interface TenantJob { 14 | } 15 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/service/TenantFrameworkService.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.tenant.core.service; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * Tenant 框架 Service 接口,定义获取租户信息 7 | * 8 | * @author 芋道源码 9 | */ 10 | public interface TenantFrameworkService { 11 | 12 | /** 13 | * 获得所有租户 14 | * 15 | * @return 租户编号数组 16 | */ 17 | List getTenantIds(); 18 | 19 | /** 20 | * 校验租户是否合法 21 | * 22 | * @param id 租户编号 23 | */ 24 | void validTenant(Long id); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.env.EnvironmentPostProcessor=\ 2 | cn.iocoder.yudao.framework.tenant.core.mq.kafka.TenantKafkaEnvironmentPostProcessor 3 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | cn.iocoder.yudao.framework.tenant.config.YudaoTenantAutoConfiguration -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/dict/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 字典数据模块,提供 {@link cn.iocoder.yudao.framework.dict.core.DictFrameworkUtils} 工具类 3 | * 4 | * 通过将字典缓存在内存中,保证性能 5 | */ 6 | package cn.iocoder.yudao.framework.dict; 7 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/annotations/DictFormat.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.excel.core.annotations; 2 | 3 | import java.lang.annotation.*; 4 | 5 | /** 6 | * 字典格式化 7 | * 8 | * 实现将字典数据的值,格式化成字典数据的标签 9 | */ 10 | @Target({ElementType.FIELD}) 11 | @Retention(RetentionPolicy.RUNTIME) 12 | @Inherited 13 | public @interface DictFormat { 14 | 15 | /** 16 | * 例如说,SysDictTypeConstants、InfDictTypeConstants 17 | * 18 | * @return 字典类型 19 | */ 20 | String value(); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/core/function/ExcelColumnSelectFunction.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.excel.core.function; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * Excel 列下拉数据源获取接口 7 | * 8 | * 为什么不直接解析字典还搞个接口?考虑到有的下拉数据不是从字典中获取的所有需要做一个兼容 9 | 10 | * @author HUIHUI 11 | */ 12 | public interface ExcelColumnSelectFunction { 13 | 14 | /** 15 | * 获得方法名称 16 | * 17 | * @return 方法名称 18 | */ 19 | String getName(); 20 | 21 | /** 22 | * 获得列下拉数据源 23 | * 24 | * @return 下拉数据源 25 | */ 26 | List getOptions(); 27 | 28 | } 29 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-excel/src/main/java/cn/iocoder/yudao/framework/excel/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 基于 EasyExcel 实现 Excel 相关的操作 3 | */ 4 | package cn.iocoder.yudao.framework.excel; 5 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-excel/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | cn.iocoder.yudao.framework.dict.config.YudaoDictAutoConfiguration -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-job/src/main/java/cn/iocoder/yudao/framework/quartz/core/enums/JobDataKeyEnum.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.quartz.core.enums; 2 | 3 | /** 4 | * Quartz Job Data 的 key 枚举 5 | */ 6 | public enum JobDataKeyEnum { 7 | 8 | JOB_ID, 9 | JOB_HANDLER_NAME, 10 | JOB_HANDLER_PARAM, 11 | JOB_RETRY_COUNT, // 最大重试次数 12 | JOB_RETRY_INTERVAL, // 每次重试间隔 13 | 14 | } 15 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-job/src/main/java/cn/iocoder/yudao/framework/quartz/core/handler/JobHandler.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.quartz.core.handler; 2 | 3 | /** 4 | * 任务处理器 5 | * 6 | * @author 芋道源码 7 | */ 8 | public interface JobHandler { 9 | 10 | /** 11 | * 执行任务 12 | * 13 | * @param param 参数 14 | * @return 结果 15 | * @throws Exception 异常 16 | */ 17 | String execute(String param) throws Exception; 18 | 19 | } 20 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-job/src/main/java/cn/iocoder/yudao/framework/quartz/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 1. 定时任务,采用 Quartz 实现进程内的任务执行。 3 | * 考虑到高可用,使用 Quartz 自带的 MySQL 集群方案。 4 | * 5 | * 2. 异步任务,采用 Spring Async 异步执行。 6 | */ 7 | package cn.iocoder.yudao.framework.quartz; 8 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-job/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | cn.iocoder.yudao.framework.quartz.config.YudaoQuartzAutoConfiguration 2 | cn.iocoder.yudao.framework.quartz.config.YudaoAsyncAutoConfiguration -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/config/TracerProperties.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.tracer.config; 2 | 3 | import lombok.Data; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | 6 | /** 7 | * BizTracer配置类 8 | * 9 | * @author 麻薯 10 | */ 11 | @ConfigurationProperties("yudao.tracer") 12 | @Data 13 | public class TracerProperties { 14 | } 15 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-monitor/src/main/java/cn/iocoder/yudao/framework/tracer/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 使用 SkyWalking 组件,作为链路追踪、日志中心。 3 | * 4 | * @author 芋道源码 5 | */ 6 | package cn.iocoder.yudao.framework.tracer; 7 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-monitor/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | cn.iocoder.yudao.framework.tracer.config.YudaoTracerAutoConfiguration 2 | cn.iocoder.yudao.framework.tracer.config.YudaoMetricsAutoConfiguration -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 消息队列,支持 Redis、RocketMQ、RabbitMQ、Kafka 四种 3 | */ 4 | package cn.iocoder.yudao.framework.mq; 5 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/rabbitmq/core/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 占位符,无特殊逻辑 3 | */ 4 | package cn.iocoder.yudao.framework.mq.rabbitmq.core; -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/rabbitmq/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 消息队列,基于 RabbitMQ 提供 3 | */ 4 | package cn.iocoder.yudao.framework.mq.rabbitmq; 5 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-mq/src/main/java/cn/iocoder/yudao/framework/mq/redis/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 消息队列,基于 Redis 提供: 3 | * 1. 基于 Pub/Sub 实现广播消费 4 | * 2. 基于 Stream 实现集群消费 5 | */ 6 | package cn.iocoder.yudao.framework.mq.redis; 7 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-mq/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | cn.iocoder.yudao.framework.mq.redis.config.YudaoRedisMQProducerAutoConfiguration 2 | cn.iocoder.yudao.framework.mq.redis.config.YudaoRedisMQConsumerAutoConfiguration 3 | cn.iocoder.yudao.framework.mq.rabbitmq.config.YudaoRabbitMQAutoConfiguration -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/datasource/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 数据库连接池,采用 Druid 3 | * 多数据源,采用爆米花 4 | */ 5 | package cn.iocoder.yudao.framework.datasource; 6 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/enums/SqlConstants.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.mybatis.core.enums; 2 | 3 | import com.baomidou.mybatisplus.annotation.DbType; 4 | 5 | /** 6 | * SQL相关常量类 7 | * 8 | * @author 芋道源码 9 | */ 10 | public class SqlConstants { 11 | 12 | /** 13 | * 数据库的类型 14 | */ 15 | public static DbType DB_TYPE; 16 | 17 | public static void init(DbType dbType) { 18 | DB_TYPE = dbType; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 使用 MyBatis Plus 提升使用 MyBatis 的开发效率 3 | */ 4 | package cn.iocoder.yudao.framework.mybatis; 5 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/translate/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 使用 Easy-Trans 提升使用 VO 数据翻译的开发效率 3 | */ 4 | package cn.iocoder.yudao.framework.translate; 5 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-mybatis/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.env.EnvironmentPostProcessor=\ 2 | cn.iocoder.yudao.framework.mybatis.config.IdTypeEnvironmentPostProcessor 3 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-mybatis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration 2 | cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration 3 | cn.iocoder.yudao.framework.translate.config.YudaoTranslateAutoConfiguration -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/idempotent/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 幂等组件,参考 https://github.com/it4alla/idempotent 项目实现 3 | * 实现原理是,相同参数的方法,一段时间内,有且仅能执行一次。通过这样的方式,保证幂等性。 4 | * 5 | * 使用场景:例如说,用户快速的双击了某个按钮,前端没有禁用该按钮,导致发送了两次重复的请求。 6 | * 7 | * 和 it4alla/idempotent 组件的差异点,主要体现在两点: 8 | * 1. 我们去掉了 @Idempotent 注解的 delKey 属性。原因是,本质上 delKey 为 true 时,实现的是分布式锁的能力 9 | * 此时,我们偏向使用 Lock4j 组件。原则上,一个组件只提供一种单一的能力。 10 | * 2. 考虑到组件的通用性,我们并未像 it4alla/idempotent 组件一样使用 Redisson RMap 结构,而是直接使用 Redis 的 String 数据格式。 11 | */ 12 | package cn.iocoder.yudao.framework.idempotent; 13 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/lock4j/core/Lock4jRedisKeyConstants.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.lock4j.core; 2 | 3 | /** 4 | * Lock4j Redis Key 枚举类 5 | * 6 | * @author 芋道源码 7 | */ 8 | public interface Lock4jRedisKeyConstants { 9 | 10 | /** 11 | * 分布式锁 12 | * 13 | * KEY 格式:lock4j:%s // 参数来自 DefaultLockKeyBuilder 类 14 | * VALUE 数据格式:HASH // RLock.class:Redisson 的 Lock 锁,使用 Hash 数据结构 15 | * 过期时间:不固定 16 | */ 17 | String LOCK4J = "lock4j:%s"; 18 | 19 | } 20 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/lock4j/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 分布式锁组件,使用 https://gitee.com/baomidou/lock4j 开源项目 3 | */ 4 | package cn.iocoder.yudao.framework.lock4j; 5 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/ratelimiter/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 限流组件,基于 Redisson {@link org.redisson.api.RRateLimiter} 限流实现 3 | */ 4 | package cn.iocoder.yudao.framework.ratelimiter; -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-protection/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | cn.iocoder.yudao.framework.idempotent.config.YudaoIdempotentConfiguration 2 | cn.iocoder.yudao.framework.lock4j.config.YudaoLock4jConfiguration 3 | cn.iocoder.yudao.framework.ratelimiter.config.YudaoRateLimiterConfiguration -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-redis/src/main/java/cn/iocoder/yudao/framework/redis/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 采用 Spring Data Redis 操作 Redis,底层使用 Redisson 作为客户端 3 | */ 4 | package cn.iocoder.yudao.framework.redis; 5 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration 2 | cn.iocoder.yudao.framework.redis.config.YudaoCacheAutoConfiguration -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/operatelog/core/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 占位,无特殊作用 3 | */ 4 | package cn.iocoder.yudao.framework.operatelog.core; -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/operatelog/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 基于 mzt-log 框架 3 | * 实现操作日志功能 4 | * 5 | * @author HUIHUI 6 | */ 7 | package cn.iocoder.yudao.framework.operatelog; 8 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/annotations/PreAuthenticated.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.security.core.annotations; 2 | 3 | import java.lang.annotation.*; 4 | 5 | /** 6 | * 声明用户需要登录 7 | * 8 | * 为什么不使用 {@link org.springframework.security.access.prepost.PreAuthorize} 注解,原因是不通过时,抛出的是认证不通过,而不是未登录 9 | * 10 | * @author 芋道源码 11 | */ 12 | @Target({ElementType.METHOD}) 13 | @Retention(RetentionPolicy.RUNTIME) 14 | @Inherited 15 | @Documented 16 | public @interface PreAuthenticated { 17 | } 18 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 基于 Spring Security 框架 3 | * 实现安全认证功能 4 | * 5 | * @author 芋道源码 6 | */ 7 | package cn.iocoder.yudao.framework.security; 8 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | cn.iocoder.yudao.framework.security.config.YudaoSecurityAutoConfiguration 2 | cn.iocoder.yudao.framework.security.config.YudaoWebSecurityConfigurerAdapter 3 | cn.iocoder.yudao.framework.operatelog.config.YudaoOperateLogConfiguration -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/BaseMockitoUnitTest.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.test.core.ut; 2 | 3 | import org.junit.jupiter.api.extension.ExtendWith; 4 | import org.mockito.junit.jupiter.MockitoExtension; 5 | 6 | /** 7 | * 纯 Mockito 的单元测试 8 | * 9 | * @author 芋道源码 10 | */ 11 | @ExtendWith(MockitoExtension.class) 12 | public class BaseMockitoUnitTest { 13 | } 14 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/core/ut/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供单元测试 Unit Test 的基类 3 | */ 4 | package cn.iocoder.yudao.framework.test.core.ut; 5 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-test/src/main/java/cn/iocoder/yudao/framework/test/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 测试组件,用于单元测试、集成测试等等 3 | */ 4 | package cn.iocoder.yudao.framework.test; 5 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/ApiAccessLogFrameworkService.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.apilog.core.service; 2 | 3 | import cn.iocoder.yudao.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO; 4 | 5 | /** 6 | * API 访问日志 Framework Service 接口 7 | * 8 | * @author 芋道源码 9 | */ 10 | public interface ApiAccessLogFrameworkService { 11 | 12 | /** 13 | * 创建 API 访问日志 14 | * 15 | * @param reqDTO API 访问日志 16 | */ 17 | void createApiAccessLog(ApiAccessLogCreateReqDTO reqDTO); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/core/service/ApiErrorLogFrameworkService.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.apilog.core.service; 2 | 3 | import cn.iocoder.yudao.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO; 4 | 5 | /** 6 | * API 错误日志 Framework Service 接口 7 | * 8 | * @author 芋道源码 9 | */ 10 | public interface ApiErrorLogFrameworkService { 11 | 12 | /** 13 | * 创建 API 错误日志 14 | * 15 | * @param reqDTO API 错误日志 16 | */ 17 | void createApiErrorLog(ApiErrorLogCreateReqDTO reqDTO); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/apilog/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * API 日志:包含两类 3 | * 1. API 访问日志:记录用户访问 API 的访问日志,定期归档历史日志。 4 | * 2. 异常日志:记录用户访问 API 的系统异常,方便日常排查问题与告警。 5 | * 6 | * @author 芋道源码 7 | */ 8 | package cn.iocoder.yudao.framework.apilog; 9 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/banner/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Banner 用于在 console 控制台,打印开发文档、接口文档等 3 | * 4 | * @author 芋道源码 5 | */ 6 | package cn.iocoder.yudao.framework.banner; 7 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/core/base/handler/DesensitizationHandler.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.desensitize.core.base.handler; 2 | 3 | import java.lang.annotation.Annotation; 4 | 5 | /** 6 | * 脱敏处理器接口 7 | * 8 | * @author gaibu 9 | */ 10 | public interface DesensitizationHandler { 11 | 12 | /** 13 | * 脱敏 14 | * 15 | * @param origin 原始字符串 16 | * @param annotation 注解信息 17 | * @return 脱敏后的字符串 18 | */ 19 | String desensitize(String origin, T annotation); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/desensitize/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 脱敏组件:支持 JSON 返回数据时,将邮箱、手机等字段进行脱敏 3 | */ 4 | package cn.iocoder.yudao.framework.desensitize; 5 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/errorcode/core/generator/ErrorCodeAutoGenerator.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.errorcode.core.generator; 2 | 3 | /** 4 | * 错误码的自动生成器 5 | * 6 | * @author dylan 7 | */ 8 | public interface ErrorCodeAutoGenerator { 9 | 10 | /** 11 | * 将配置类到错误码写入数据库 12 | */ 13 | void execute(); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/errorcode/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 错误码 ErrorCode 的自动配置功能,提供如下功能: 3 | * 4 | * 1. 远程读取:项目启动时,从 system-service 服务,读取数据库中的 ErrorCode 错误码,实现错误码的提水可配置; 5 | * 2. 自动更新:管理员在管理后台修数据库中的 ErrorCode 错误码时,项目自动从 system-service 服务加载最新的 ErrorCode 错误码; 6 | * 3. 自动写入:项目启动时,将项目本地的错误码写到 system-server 服务中,方便管理员在管理后台编辑; 7 | * 8 | * @author 芋道源码 9 | */ 10 | package cn.iocoder.yudao.framework.errorcode; 11 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/jackson/core/package-info.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.jackson.core; 2 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Web 框架,全局异常、API 日志等 3 | */ 4 | package cn.iocoder.yudao.framework; 5 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/swagger/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 基于 Swagger + Knife4j 实现 API 接口文档 3 | * 4 | * @author 芋道源码 5 | */ 6 | package cn.iocoder.yudao.framework.swagger; 7 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/web/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 针对 SpringMVC 的基础封装 3 | */ 4 | package cn.iocoder.yudao.framework.web; 5 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/xss/core/clean/XssCleaner.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.xss.core.clean; 2 | 3 | /** 4 | * 对 html 文本中的有 Xss 风险的数据进行清理 5 | */ 6 | public interface XssCleaner { 7 | 8 | /** 9 | * 清理有 Xss 风险的文本 10 | * 11 | * @param html 原 html 12 | * @return 清理后的 html 13 | */ 14 | String clean(String html); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/xss/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 针对 XSS 的基础封装 3 | * 4 | * XSS 说明:https://tech.meituan.com/2018/09/27/fe-security.html 5 | */ 6 | package cn.iocoder.yudao.framework.xss; 7 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-web/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | cn.iocoder.yudao.framework.apilog.config.YudaoApiLogAutoConfiguration 2 | cn.iocoder.yudao.framework.jackson.config.YudaoJacksonAutoConfiguration 3 | cn.iocoder.yudao.framework.swagger.config.YudaoSwaggerAutoConfiguration 4 | cn.iocoder.yudao.framework.web.config.YudaoWebAutoConfiguration 5 | cn.iocoder.yudao.framework.xss.config.YudaoXssAutoConfiguration 6 | cn.iocoder.yudao.framework.banner.config.YudaoBannerAutoConfiguration 7 | cn.iocoder.yudao.framework.errorcode.config.YudaoErrorCodeAutoConfiguration -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-websocket/src/main/java/cn/iocoder/yudao/framework/websocket/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * WebSocket 框架,支持多节点的广播 3 | */ 4 | package cn.iocoder.yudao.framework.websocket; 5 | -------------------------------------------------------------------------------- /yudao-framework/yudao-spring-boot-starter-websocket/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | cn.iocoder.yudao.framework.websocket.config.YudaoWebSocketAutoConfiguration -------------------------------------------------------------------------------- /yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/api/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * bpm API 包,定义暴露给其它模块的 API 3 | */ 4 | package cn.iocoder.yudao.module.bpm.api; 5 | -------------------------------------------------------------------------------- /yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/DictTypeConstants.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.bpm.enums; 2 | 3 | /** 4 | * BPM 字典类型的枚举类 5 | * 6 | * @author 芋道源码 7 | */ 8 | public interface DictTypeConstants { 9 | 10 | String TASK_ASSIGN_RULE_TYPE = "bpm_task_assign_rule_type"; // 任务分配规则类型 11 | String TASK_ASSIGN_SCRIPT = "bpm_task_assign_script"; // 任务分配自定义脚本 12 | 13 | } 14 | -------------------------------------------------------------------------------- /yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmProcessListenerType.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.bpm.enums.definition; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * BPM 流程监听器的类型 8 | * 9 | * @author 芋道源码 10 | */ 11 | @Getter 12 | @AllArgsConstructor 13 | public enum BpmProcessListenerType { 14 | 15 | EXECUTION("execution", "执行监听器"), 16 | TASK("task", "任务执行器"); 17 | 18 | private final String type; 19 | private final String name; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/definition/BpmProcessListenerValueType.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.bpm.enums.definition; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * BPM 流程监听器的值类型 8 | * 9 | * @author 芋道源码 10 | */ 11 | @Getter 12 | @AllArgsConstructor 13 | public enum BpmProcessListenerValueType { 14 | 15 | CLASS("class", "Java 类"), 16 | DELEGATE_EXPRESSION("delegateExpression", "代理表达式"), 17 | EXPRESSION("expression", "表达式"); 18 | 19 | private final String type; 20 | private final String name; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/api/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * bpm API 实现类,定义暴露给其它模块的 API 3 | */ 4 | package cn.iocoder.yudao.module.bpm.api; 5 | -------------------------------------------------------------------------------- /yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormPageReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.form; 2 | 3 | import cn.iocoder.yudao.framework.common.pojo.PageParam; 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | import lombok.Data; 6 | import lombok.EqualsAndHashCode; 7 | import lombok.ToString; 8 | 9 | @Schema(description = "管理后台 - 动态表单分页 Request VO") 10 | @Data 11 | public class BpmFormPageReqVO extends PageParam { 12 | 13 | @Schema(description = "表单名称", example = "芋道") 14 | private String name; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOALeaveController.http: -------------------------------------------------------------------------------- 1 | ### 请求 /bpm/oa/leave/create 接口 => 成功 2 | POST {{baseUrl}}/bpm/oa/leave/create 3 | Content-Type: application/json 4 | tenant-id: 1 5 | Authorization: Bearer {{token}} 6 | 7 | { 8 | "startTime": "2022-03-01", 9 | "endTime": "2022-03-05", 10 | "type": 1, 11 | "reason": "我要请假啦啦啦!" 12 | } 13 | -------------------------------------------------------------------------------- /yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * OA 示例,用于演示外部业务接入 BPM 工作流的示例 3 | * 一般的接入方式,只需要调用 接口,后续 Admin 用户在管理后台的【待办事务】进行审批 4 | */ 5 | package cn.iocoder.yudao.module.bpm.controller.admin.oa; 6 | -------------------------------------------------------------------------------- /yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/app/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 占位 3 | */ 4 | package cn.iocoder.yudao.module.bpm.controller.app; 5 | -------------------------------------------------------------------------------- /yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供 RESTful API 给前端: 3 | * 1. admin 包:提供给管理后台 yudao-ui-admin 前端项目 4 | * 2. app 包:提供给用户 APP yudao-ui-app 前端项目,它的 Controller 和 VO 都要添加 App 前缀,用于和管理后台进行区分 5 | */ 6 | package cn.iocoder.yudao.module.bpm.controller; 7 | -------------------------------------------------------------------------------- /yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供 POJO 类的实体转换 3 | * 4 | * 目前使用 MapStruct 框架 5 | */ 6 | package cn.iocoder.yudao.module.bpm.convert; 7 | -------------------------------------------------------------------------------- /yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 属于 bpm 模块的 framework 封装 3 | * 4 | * @author 芋道源码 5 | */ 6 | package cn.iocoder.yudao.module.bpm.framework; 7 | -------------------------------------------------------------------------------- /yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/web/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * bpm 模块的 web 配置 3 | */ 4 | package cn.iocoder.yudao.module.bpm.framework.web; 5 | -------------------------------------------------------------------------------- /yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * bpm 包下,业务流程管理(Business Process Management),我们放工作流的功能,基于 Flowable 6 版本实现。 3 | * 例如说:流程定义、表单配置、审核中心(我的申请、我的待办、我的已办)等等 4 | * 5 | * bpm 解释:https://baike.baidu.com/item/BPM/1933 6 | * 7 | * 1. Controller URL:以 /bpm/ 开头,避免和其它 Module 冲突 8 | * 2. DataObject 表名:以 bpm_ 开头,方便在数据库中区分 9 | * 10 | * 注意,由于 Bpm 模块下,容易和其它模块重名,所以类名都加载 Bpm 的前缀~ 11 | */ 12 | package cn.iocoder.yudao.module.bpm; 13 | -------------------------------------------------------------------------------- /yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /yudao-module-bpm/yudao-module-bpm-biz/src/test/resources/sql/clean.sql: -------------------------------------------------------------------------------- 1 | DELETE FROM "bpm_form"; 2 | DELETE FROM "bpm_user_group"; 3 | DELETE FROM "bpm_category"; 4 | -------------------------------------------------------------------------------- /yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/api/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * crm API 包,定义暴露给其它模块的 API 3 | */ 4 | package cn.iocoder.yudao.module.crm.api; 5 | -------------------------------------------------------------------------------- /yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/api/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * crm API 实现类,定义暴露给其它模块的 API 3 | */ 4 | package cn.iocoder.yudao.module.crm.api; 5 | -------------------------------------------------------------------------------- /yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/vo/config/CrmContractConfigRespVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.crm.controller.admin.contract.vo.config; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | 6 | @Schema(description = "管理后台 - CRM 合同配置 Response VO") 7 | @Data 8 | public class CrmContractConfigRespVO { 9 | 10 | @Schema(description = "是否开启提前提醒", example = "true") 11 | private Boolean notifyEnabled; 12 | 13 | @Schema(description = "提前提醒天数", example = "2") 14 | private Integer notifyDays; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/statistics/CrmStatisticsRankController.http: -------------------------------------------------------------------------------- 1 | ### 合同金额排行榜 2 | GET {{baseUrl}}/crm/statistics-rank/get-contract-price-rank?deptId=100×[0]=2022-12-12 00:00:00×[1]=2024-12-12 23:59:59 3 | Authorization: Bearer {{token}} 4 | tenant-id: {{adminTenentId}} 5 | 6 | ### 回款金额排行榜 7 | GET {{baseUrl}}/crm/statistics-rank/get-receivable-price-rank?deptId=100×[0]=2022-12-12 00:00:00×[1]=2024-12-12 23:59:59 8 | Authorization: Bearer {{token}} 9 | tenant-id: {{adminTenentId}} -------------------------------------------------------------------------------- /yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/app/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 占位 3 | */ 4 | package cn.iocoder.yudao.module.crm.controller.app; 5 | -------------------------------------------------------------------------------- /yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供 RESTful API 给前端: 3 | * 1. admin 包:提供给管理后台 yudao-ui-admin 前端项目 4 | * 2. app 包:提供给用户 APP yudao-ui-app 前端项目,它的 Controller 和 VO 都要添加 App 前缀,用于和管理后台进行区分 5 | */ 6 | package cn.iocoder.yudao.module.crm.controller; 7 | -------------------------------------------------------------------------------- /yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供 POJO 类的实体转换 3 | * 4 | * 目前使用 MapStruct 框架 5 | */ 6 | package cn.iocoder.yudao.module.crm.convert; 7 | -------------------------------------------------------------------------------- /yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/clue/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 线索 3 | */ 4 | package cn.iocoder.yudao.module.crm.dal.dataobject.clue; 5 | -------------------------------------------------------------------------------- /yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/contact/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 联系人 3 | */ 4 | package cn.iocoder.yudao.module.crm.dal.dataobject.contact; 5 | -------------------------------------------------------------------------------- /yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/product/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 产品表 3 | */ 4 | package cn.iocoder.yudao.module.crm.dal.dataobject.product; 5 | -------------------------------------------------------------------------------- /yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/clue/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 线索 3 | */ 4 | package cn.iocoder.yudao.module.crm.dal.mysql.clue; 5 | -------------------------------------------------------------------------------- /yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/permission/package-info.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.crm.dal.mysql.permission; -------------------------------------------------------------------------------- /yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/redis/RedisKeyConstants.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.crm.dal.redis; 2 | 3 | /** 4 | * CRM Redis Key 枚举类 5 | * 6 | * @author 芋道源码 7 | */ 8 | public interface RedisKeyConstants { 9 | 10 | /** 11 | * 序号的缓存 12 | * 13 | * KEY 格式:trade_no:{prefix} 14 | * VALUE 数据格式:编号自增 15 | */ 16 | String NO = "crm:seq_no:"; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/excel/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * crm 模块的 excel 拓展封装 3 | */ 4 | package cn.iocoder.yudao.module.crm.framework.excel; -------------------------------------------------------------------------------- /yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/operatelog/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * crm 模块的 operatelog 拓展封装 3 | */ 4 | package cn.iocoder.yudao.module.crm.framework.operatelog; -------------------------------------------------------------------------------- /yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 属于 crm 模块的 framework 封装 3 | * 4 | * @author 芋道源码 5 | */ 6 | package cn.iocoder.yudao.module.crm.framework; 7 | -------------------------------------------------------------------------------- /yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/permission/core/package-info.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.crm.framework.permission.core; -------------------------------------------------------------------------------- /yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/permission/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * crm 模块的 permission 拓展封装 3 | */ 4 | package cn.iocoder.yudao.module.crm.framework.permission; -------------------------------------------------------------------------------- /yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/web/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * crm 模块的 web 拓展封装 3 | */ 4 | package cn.iocoder.yudao.module.crm.framework.web; 5 | -------------------------------------------------------------------------------- /yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/job/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 定时任务 3 | */ 4 | package cn.iocoder.yudao.module.crm.job; -------------------------------------------------------------------------------- /yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * crm 包下,客户关系管理(Customer Relationship Management)。 3 | * 例如说:客户、联系人、商机、合同、回款等等 4 | * 5 | * 1. Controller URL:以 /crm/ 开头,避免和其它 Module 冲突 6 | * 2. DataObject 表名:以 crm_ 开头,方便在数据库中区分 7 | * 8 | * 注意,由于 Crm 模块下,容易和其它模块重名,所以类名都加载 Crm 的前缀~ 9 | */ 10 | package cn.iocoder.yudao.module.crm; 11 | -------------------------------------------------------------------------------- /yudao-module-crm/yudao-module-crm-biz/src/test/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /yudao-module-erp/yudao-module-erp-api/src/main/java/cn/iocoder/yudao/module/erp/api/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * erp API 包,定义暴露给其它模块的 API 3 | */ 4 | package cn.iocoder.yudao.module.erp.api; 5 | -------------------------------------------------------------------------------- /yudao-module-erp/yudao-module-erp-api/src/main/java/cn/iocoder/yudao/module/erp/enums/DictTypeConstants.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.erp.enums; 2 | 3 | /** 4 | * ERP 字典类型的枚举类 5 | * 6 | * @author 芋道源码 7 | */ 8 | public interface DictTypeConstants { 9 | 10 | String AUDIT_STATUS = "erp_audit_status"; // 审核状态 11 | String STOCK_RECORD_BIZ_TYPE = "erp_stock_record_biz_type"; // 库存明细的业务类型 12 | 13 | } 14 | -------------------------------------------------------------------------------- /yudao-module-erp/yudao-module-erp-api/src/main/java/cn/iocoder/yudao/module/erp/enums/LogRecordConstants.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.erp.enums; 2 | 3 | /** 4 | * ERP 操作日志枚举 5 | * 目的:统一管理,也减少 Service 里各种“复杂”字符串 6 | * 7 | * @author 芋道源码 8 | */ 9 | public interface LogRecordConstants { 10 | 11 | 12 | } 13 | -------------------------------------------------------------------------------- /yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/product/vo/category/ErpProductCategoryListReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.erp.controller.admin.product.vo.category; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | 6 | @Schema(description = "管理后台 - ERP 产品分类列表 Request VO") 7 | @Data 8 | public class ErpProductCategoryListReqVO { 9 | 10 | @Schema(description = "分类名称", example = "芋艿") 11 | private String name; 12 | 13 | @Schema(description = "开启状态", example = "1") 14 | private Integer status; 15 | 16 | } -------------------------------------------------------------------------------- /yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/statistics/ErpSaleStatisticsController.http: -------------------------------------------------------------------------------- 1 | ### 请求 /erp/sale-statistics/summary 接口 => 成功 2 | GET {{baseUrl}}/erp/sale-statistics/summary 3 | Content-Type: application/json 4 | tenant-id: {{adminTenentId}} 5 | Authorization: Bearer {{token}} 6 | 7 | ### 请求 /erp/sale-statistics/time-summary 接口 => 成功 8 | GET {{baseUrl}}/erp/sale-statistics/time-summary 9 | Content-Type: application/json 10 | tenant-id: {{adminTenentId}} 11 | Authorization: Bearer {{token}} 12 | -------------------------------------------------------------------------------- /yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供 RESTful API 给前端: 3 | * 1. admin 包:提供给管理后台 yudao-ui-admin 前端项目 4 | * 2. app 包:提供给用户 APP yudao-ui-app 前端项目,它的 Controller 和 VO 都要添加 App 前缀,用于和管理后台进行区分 5 | */ 6 | package cn.iocoder.yudao.module.erp.controller; 7 | -------------------------------------------------------------------------------- /yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/redis/RedisKeyConstants.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.erp.dal.redis; 2 | 3 | /** 4 | * ERP Redis Key 枚举类 5 | * 6 | * @author 芋道源码 7 | */ 8 | public interface RedisKeyConstants { 9 | 10 | /** 11 | * 序号的缓存 12 | * 13 | * KEY 格式:seq_no:{prefix} 14 | * VALUE 数据格式:编号自增 15 | */ 16 | String NO = "erp:seq_no:"; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/framework/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 属于 erp 模块的 framework 封装 3 | * 4 | * @author 芋道源码 5 | */ 6 | package cn.iocoder.yudao.module.erp.framework; 7 | -------------------------------------------------------------------------------- /yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/framework/web/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * trade 模块的 web 配置 3 | */ 4 | package cn.iocoder.yudao.module.erp.framework.web; 5 | -------------------------------------------------------------------------------- /yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * erp 包下,企业资源管理(Enterprise Resource Planning)。 3 | * 例如说:采购、销售、库存、财务、产品等等 4 | * 5 | * 1. Controller URL:以 /erp/ 开头,避免和其它 Module 冲突 6 | * 2. DataObject 表名:以 erp_ 开头,方便在数据库中区分 7 | * 8 | * 注意,由于 Erp 模块下,容易和其它模块重名,所以类名都加载 Erp 的前缀~ 9 | */ 10 | package cn.iocoder.yudao.module.erp; 11 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/logger/ApiAccessLogApi.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.infra.api.logger; 2 | 3 | import cn.iocoder.yudao.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO; 4 | 5 | import javax.validation.Valid; 6 | 7 | /** 8 | * API 访问日志的 API 接口 9 | * 10 | * @author 芋道源码 11 | */ 12 | public interface ApiAccessLogApi { 13 | 14 | /** 15 | * 创建 API 访问日志 16 | * 17 | * @param createDTO 创建信息 18 | */ 19 | void createApiAccessLog(@Valid ApiAccessLogCreateReqDTO createDTO); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/logger/ApiErrorLogApi.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.infra.api.logger; 2 | 3 | import cn.iocoder.yudao.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO; 4 | 5 | import javax.validation.Valid; 6 | 7 | /** 8 | * API 错误日志的 API 接口 9 | * 10 | * @author 芋道源码 11 | */ 12 | public interface ApiErrorLogApi { 13 | 14 | /** 15 | * 创建 API 错误日志 16 | * 17 | * @param createDTO 创建信息 18 | */ 19 | void createApiErrorLog(@Valid ApiErrorLogCreateReqDTO createDTO); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * infra API 包,定义暴露给其它模块的 API 3 | */ 4 | package cn.iocoder.yudao.module.infra.api; 5 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/api/package-info.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.infra.api; 2 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/demo03/package-info.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.infra.controller.admin.demo.demo03; -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/demo/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 代码生成示例 3 | * 4 | * 1. demo01:单表(增删改查) 5 | * 2. demo02:单表(树形结构) 6 | * 3. demo03:主子表(标准模式)+ 主子表(ERP 模式)+ 主子表(内嵌模式) 7 | */ 8 | package cn.iocoder.yudao.module.infra.controller.admin.demo; -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/redis/RedisController.http: -------------------------------------------------------------------------------- 1 | ### 请求 /infra/redis/get-monitor-info 接口 => 成功 2 | GET {{baseUrl}}/infra/redis/get-monitor-info 3 | Authorization: Bearer {{token}} 4 | tenant-id: {{adminTenentId}} 5 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/app/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 占位 3 | */ 4 | package cn.iocoder.yudao.module.infra.controller.app; 5 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供 RESTful API 给前端: 3 | * 1. admin 包:提供给管理后台 yudao-ui-admin 前端项目 4 | * 2. app 包:提供给用户 APP yudao-ui-app 前端项目,它的 Controller 和 VO 都要添加 App 前缀,用于和管理后台进行区分 5 | */ 6 | package cn.iocoder.yudao.module.infra.controller; 7 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/convert/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供 POJO 类的实体转换 3 | * 4 | * 目前使用 MapStruct 框架 5 | */ 6 | package cn.iocoder.yudao.module.infra.convert; 7 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/db/DataSourceConfigMapper.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.infra.dal.mysql.db; 2 | 3 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 4 | import cn.iocoder.yudao.module.infra.dal.dataobject.db.DataSourceConfigDO; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | * 数据源配置 Mapper 9 | * 10 | * @author 芋道源码 11 | */ 12 | @Mapper 13 | public interface DataSourceConfigMapper extends BaseMapperX { 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenColumnListConditionEnum.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.infra.enums.codegen; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 代码生成器的字段过滤条件枚举 8 | */ 9 | @AllArgsConstructor 10 | @Getter 11 | public enum CodegenColumnListConditionEnum { 12 | 13 | EQ("="), 14 | NE("!="), 15 | GT(">"), 16 | GTE(">="), 17 | LT("<"), 18 | LTE("<="), 19 | LIKE("LIKE"), 20 | BETWEEN("BETWEEN"); 21 | 22 | /** 23 | * 条件 24 | */ 25 | private final String condition; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/enums/config/ConfigTypeEnum.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.infra.enums.config; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | @Getter 7 | @AllArgsConstructor 8 | public enum ConfigTypeEnum { 9 | 10 | /** 11 | * 系统配置 12 | */ 13 | SYSTEM(1), 14 | /** 15 | * 自定义配置 16 | */ 17 | CUSTOM(2); 18 | 19 | private final Integer type; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/enums/job/JobLogStatusEnum.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.infra.enums.job; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 任务日志的状态枚举 8 | * 9 | * @author 芋道源码 10 | */ 11 | @Getter 12 | @AllArgsConstructor 13 | public enum JobLogStatusEnum { 14 | 15 | RUNNING(0), // 运行中 16 | SUCCESS(1), // 成功 17 | FAILURE(2); // 失败 18 | 19 | /** 20 | * 状态 21 | */ 22 | private final Integer status; 23 | 24 | } 25 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/enums/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 占位 3 | */ 4 | package cn.iocoder.yudao.module.infra.enums; 5 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/codegen/config/CodegenConfiguration.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.infra.framework.codegen.config; 2 | 3 | import org.springframework.boot.context.properties.EnableConfigurationProperties; 4 | import org.springframework.context.annotation.Configuration; 5 | 6 | @Configuration(proxyBeanMethods = false) 7 | @EnableConfigurationProperties(CodegenProperties.class) 8 | public class CodegenConfiguration { 9 | } 10 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/codegen/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 代码生成器 3 | */ 4 | package cn.iocoder.yudao.module.infra.framework.codegen; 5 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/core/client/FileClientConfig.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.infra.framework.file.core.client; 2 | 3 | import com.fasterxml.jackson.annotation.JsonTypeInfo; 4 | 5 | /** 6 | * 文件客户端的配置 7 | * 不同实现的客户端,需要不同的配置,通过子类来定义 8 | * 9 | * @author 芋道源码 10 | */ 11 | @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS) 12 | // @JsonTypeInfo 注解的作用,Jackson 多态 13 | // 1. 序列化到时数据库时,增加 @class 属性。 14 | // 2. 反序列化到内存对象时,通过 @class 属性,可以创建出正确的类型 15 | public interface FileClientConfig { 16 | } 17 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/file/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 文件客户端,支持多种存储器 3 | * 4 | * 1. local:本地磁盘 5 | * 2. ftp:FTP 服务器 6 | * 3. sftp:SFTP 服务器 7 | * 4. db:数据库 8 | * 5. s3:支持 S3 协议的云存储服务,例如说 MinIO、阿里云、华为云、腾讯云、七牛云等等 9 | * 10 | * @author 芋道源码 11 | */ 12 | package cn.iocoder.yudao.module.infra.framework.file; -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/monitor/config/AdminServerConfiguration.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.infra.framework.monitor.config; 2 | 3 | import de.codecentric.boot.admin.server.config.EnableAdminServer; 4 | import org.springframework.context.annotation.Configuration; 5 | 6 | @Configuration(proxyBeanMethods = false) 7 | @EnableAdminServer 8 | public class AdminServerConfiguration { 9 | } 10 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/monitor/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 使用 Spring Boot Admin 实现简单的监控平台 3 | */ 4 | package cn.iocoder.yudao.module.infra.framework.monitor; 5 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 属于 infra 模块的 framework 封装 3 | * 4 | * @author 芋道源码 5 | */ 6 | package cn.iocoder.yudao.module.infra.framework; 7 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/security/core/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 占位 3 | */ 4 | package cn.iocoder.yudao.module.infra.framework.security.core; 5 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/framework/web/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * infra 模块的 web 配置 3 | */ 4 | package cn.iocoder.yudao.module.infra.framework.web; 5 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/mq/consumer/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 消息队列的消费者 3 | */ 4 | package cn.iocoder.yudao.module.infra.mq.consumer; 5 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/mq/message/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 消息队列的消息 3 | */ 4 | package cn.iocoder.yudao.module.infra.mq.message; 5 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/mq/producer/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 消息队列的生产者 3 | */ 4 | package cn.iocoder.yudao.module.infra.mq.producer; 5 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * infra 模块,主要提供两块能力: 3 | * 1. 我们放基础设施的运维与管理,支撑上层的通用与核心业务。 例如说:定时任务的管理、服务器的信息等等 4 | * 2. 研发工具,提升研发效率与质量。 例如说:代码生成器、接口文档等等 5 | * 6 | * 1. Controller URL:以 /infra/ 开头,避免和其它 Module 冲突 7 | * 2. DataObject 表名:以 infra_ 开头,方便在数据库中区分 8 | */ 9 | package cn.iocoder.yudao.module.infra; 10 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/websocket/message/DemoReceiveMessage.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.infra.websocket.message; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 示例:server -> client 同步消息 7 | * 8 | * @author 芋道源码 9 | */ 10 | @Data 11 | public class DemoReceiveMessage { 12 | 13 | /** 14 | * 接收人的编号 15 | */ 16 | private Long fromUserId; 17 | /** 18 | * 内容 19 | */ 20 | private String text; 21 | 22 | /** 23 | * 是否单聊 24 | */ 25 | private Boolean single; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/websocket/message/DemoSendMessage.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.infra.websocket.message; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 示例:client -> server 发送消息 7 | * 8 | * @author 芋道源码 9 | */ 10 | @Data 11 | public class DemoSendMessage { 12 | 13 | /** 14 | * 发送给谁 15 | * 16 | * 如果为空,说明发送给所有人 17 | */ 18 | private Long toUserId; 19 | /** 20 | * 内容 21 | */ 22 | private String text; 23 | 24 | } 25 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/dal/mapper.xml.vm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue/views/components/form_sub_inner.vue.vm: -------------------------------------------------------------------------------- 1 | ## 主表的 normal 和 inner 使用相同的 form 表单 2 | #parse("codegen/vue/views/components/form_sub_normal.vue.vm") -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue/views/components/list_sub_inner.vue.vm: -------------------------------------------------------------------------------- 1 | ## 子表的 erp 和 inner 使用相似的 list 列表,差异主要两点: 2 | ## 1)inner 使用 list 不分页,erp 使用 page 分页 3 | ## 2)erp 支持单个子表的新增、修改、删除,inner 不支持 4 | #parse("codegen/vue/views/components/list_sub_erp.vue.vm") -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/components/form_sub_inner.vue.vm: -------------------------------------------------------------------------------- 1 | ## 主表的 normal 和 inner 使用相同的 form 表单 2 | #parse("codegen/vue3/views/components/form_sub_normal.vue.vm") -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/components/list_sub_inner.vue.vm: -------------------------------------------------------------------------------- 1 | ## 子表的 erp 和 inner 使用相似的 list 列表,差异主要两点: 2 | ## 1)inner 使用 list 不分页,erp 使用 page 分页 3 | ## 2)erp 支持单个子表的新增、修改、删除,inner 不支持 4 | #parse("codegen/vue3/views/components/list_sub_erp.vue.vm") -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/main/resources/file/erweima.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-infra/yudao-module-infra-biz/src/main/resources/file/erweima.jpg -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/windows10/vue2_master_erp/java/ErrorCodeConstants_手动操作: -------------------------------------------------------------------------------- 1 | // TODO 待办:请将下面的错误码复制到 yudao-module-infra-api 模块的 ErrorCodeConstants 类中。注意,请给“TODO 补充编号”设置一个错误码编号!!! 2 | // ========== 学生 TODO 补充编号 ========== 3 | ErrorCode STUDENT_NOT_EXISTS = new ErrorCode(TODO 补充编号, "学生不存在"); 4 | ErrorCode STUDENT_CONTACT_NOT_EXISTS = new ErrorCode(TODO 补充编号, "学生联系人不存在"); 5 | ErrorCode STUDENT_TEACHER_NOT_EXISTS = new ErrorCode(TODO 补充编号, "学生班主任不存在"); 6 | ErrorCode STUDENT_TEACHER_EXISTS = new ErrorCode(TODO 补充编号, "学生班主任已存在"); -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/windows10/vue2_master_erp/xml/InfraStudentMapper: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/windows10/vue2_master_inner/java/ErrorCodeConstants_手动操作: -------------------------------------------------------------------------------- 1 | // TODO 待办:请将下面的错误码复制到 yudao-module-infra-api 模块的 ErrorCodeConstants 类中。注意,请给“TODO 补充编号”设置一个错误码编号!!! 2 | // ========== 学生 TODO 补充编号 ========== 3 | ErrorCode STUDENT_NOT_EXISTS = new ErrorCode(TODO 补充编号, "学生不存在"); -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/windows10/vue2_master_inner/xml/InfraStudentMapper: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/windows10/vue2_master_normal/java/ErrorCodeConstants_手动操作: -------------------------------------------------------------------------------- 1 | // TODO 待办:请将下面的错误码复制到 yudao-module-infra-api 模块的 ErrorCodeConstants 类中。注意,请给“TODO 补充编号”设置一个错误码编号!!! 2 | // ========== 学生 TODO 补充编号 ========== 3 | ErrorCode STUDENT_NOT_EXISTS = new ErrorCode(TODO 补充编号, "学生不存在"); -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/windows10/vue2_master_normal/xml/InfraStudentMapper: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/windows10/vue2_one/java/ErrorCodeConstants_手动操作: -------------------------------------------------------------------------------- 1 | // TODO 待办:请将下面的错误码复制到 yudao-module-infra-api 模块的 ErrorCodeConstants 类中。注意,请给“TODO 补充编号”设置一个错误码编号!!! 2 | // ========== 学生 TODO 补充编号 ========== 3 | ErrorCode STUDENT_NOT_EXISTS = new ErrorCode(TODO 补充编号, "学生不存在"); -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/windows10/vue2_one/xml/InfraStudentMapper: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/windows10/vue2_tree/java/InfraCategoryListReqVO: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; 2 | 3 | import lombok.*; 4 | import java.util.*; 5 | import io.swagger.v3.oas.annotations.media.Schema; 6 | import cn.iocoder.yudao.framework.common.pojo.PageParam; 7 | 8 | @Schema(description = "管理后台 - 分类列表 Request VO") 9 | @Data 10 | public class InfraCategoryListReqVO { 11 | 12 | @Schema(description = "名字", example = "芋头") 13 | private String name; 14 | 15 | } -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/windows10/vue2_tree/sql/h2: -------------------------------------------------------------------------------- 1 | -- 将该建表 SQL 语句,添加到 yudao-module-infra-biz 模块的 test/resources/sql/create_tables.sql 文件里 2 | CREATE TABLE IF NOT EXISTS "infra_category" ( 3 | "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, 4 | "name" varchar NOT NULL, 5 | "description" bigint NOT NULL, 6 | PRIMARY KEY ("id") 7 | ) COMMENT '分类表'; 8 | 9 | -- 将该删表 SQL 语句,添加到 yudao-module-infra-biz 模块的 test/resources/sql/clean.sql 文件里 10 | DELETE FROM "infra_category"; -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/windows10/vue2_tree/xml/InfraCategoryMapper: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/windows10/vue3_master_erp/java/ErrorCodeConstants_手动操作: -------------------------------------------------------------------------------- 1 | // TODO 待办:请将下面的错误码复制到 yudao-module-infra-api 模块的 ErrorCodeConstants 类中。注意,请给“TODO 补充编号”设置一个错误码编号!!! 2 | // ========== 学生 TODO 补充编号 ========== 3 | ErrorCode STUDENT_NOT_EXISTS = new ErrorCode(TODO 补充编号, "学生不存在"); 4 | ErrorCode STUDENT_CONTACT_NOT_EXISTS = new ErrorCode(TODO 补充编号, "学生联系人不存在"); 5 | ErrorCode STUDENT_TEACHER_NOT_EXISTS = new ErrorCode(TODO 补充编号, "学生班主任不存在"); 6 | ErrorCode STUDENT_TEACHER_EXISTS = new ErrorCode(TODO 补充编号, "学生班主任已存在"); -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/windows10/vue3_master_erp/xml/InfraStudentMapper: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/windows10/vue3_master_inner/java/ErrorCodeConstants_手动操作: -------------------------------------------------------------------------------- 1 | // TODO 待办:请将下面的错误码复制到 yudao-module-infra-api 模块的 ErrorCodeConstants 类中。注意,请给“TODO 补充编号”设置一个错误码编号!!! 2 | // ========== 学生 TODO 补充编号 ========== 3 | ErrorCode STUDENT_NOT_EXISTS = new ErrorCode(TODO 补充编号, "学生不存在"); -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/windows10/vue3_master_inner/xml/InfraStudentMapper: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/windows10/vue3_master_normal/java/ErrorCodeConstants_手动操作: -------------------------------------------------------------------------------- 1 | // TODO 待办:请将下面的错误码复制到 yudao-module-infra-api 模块的 ErrorCodeConstants 类中。注意,请给“TODO 补充编号”设置一个错误码编号!!! 2 | // ========== 学生 TODO 补充编号 ========== 3 | ErrorCode STUDENT_NOT_EXISTS = new ErrorCode(TODO 补充编号, "学生不存在"); -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/windows10/vue3_master_normal/xml/InfraStudentMapper: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/windows10/vue3_one/java/ErrorCodeConstants_手动操作: -------------------------------------------------------------------------------- 1 | // TODO 待办:请将下面的错误码复制到 yudao-module-infra-api 模块的 ErrorCodeConstants 类中。注意,请给“TODO 补充编号”设置一个错误码编号!!! 2 | // ========== 学生 TODO 补充编号 ========== 3 | ErrorCode STUDENT_NOT_EXISTS = new ErrorCode(TODO 补充编号, "学生不存在"); -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/windows10/vue3_one/xml/InfraStudentMapper: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/windows10/vue3_tree/java/InfraCategoryListReqVO: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.infra.controller.admin.demo.vo; 2 | 3 | import lombok.*; 4 | import java.util.*; 5 | import io.swagger.v3.oas.annotations.media.Schema; 6 | import cn.iocoder.yudao.framework.common.pojo.PageParam; 7 | 8 | @Schema(description = "管理后台 - 分类列表 Request VO") 9 | @Data 10 | public class InfraCategoryListReqVO { 11 | 12 | @Schema(description = "名字", example = "芋头") 13 | private String name; 14 | 15 | } -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/windows10/vue3_tree/sql/h2: -------------------------------------------------------------------------------- 1 | -- 将该建表 SQL 语句,添加到 yudao-module-infra-biz 模块的 test/resources/sql/create_tables.sql 文件里 2 | CREATE TABLE IF NOT EXISTS "infra_category" ( 3 | "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, 4 | "name" varchar NOT NULL, 5 | "description" bigint NOT NULL, 6 | PRIMARY KEY ("id") 7 | ) COMMENT '分类表'; 8 | 9 | -- 将该删表 SQL 语句,添加到 yudao-module-infra-biz 模块的 test/resources/sql/clean.sql 文件里 10 | DELETE FROM "infra_category"; -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/codegen/windows10/vue3_tree/xml/InfraCategoryMapper: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /yudao-module-infra/yudao-module-infra-biz/src/test/resources/sql/clean.sql: -------------------------------------------------------------------------------- 1 | DELETE FROM "infra_config"; 2 | DELETE FROM "infra_file_config"; 3 | DELETE FROM "infra_file"; 4 | DELETE FROM "infra_job"; 5 | DELETE FROM "infra_job_log"; 6 | DELETE FROM "infra_api_access_log"; 7 | DELETE FROM "infra_api_error_log"; 8 | DELETE FROM "infra_file_config"; 9 | DELETE FROM "infra_test_demo"; 10 | DELETE FROM "infra_data_source_config"; 11 | DELETE FROM "infra_codegen_table"; 12 | DELETE FROM "infra_codegen_column"; 13 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/api/category/ProductCategoryApi.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.product.api.category; 2 | 3 | import java.util.Collection; 4 | 5 | /** 6 | * 商品分类 API 接口 7 | * 8 | * @author owen 9 | */ 10 | public interface ProductCategoryApi { 11 | 12 | /** 13 | * 校验商品分类是否有效。如下情况,视为无效: 14 | * 1. 商品分类编号不存在 15 | * 2. 商品分类被禁用 16 | * 17 | * @param ids 商品分类编号数组 18 | */ 19 | void validateCategoryList(Collection ids); 20 | } 21 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/api/comment/ProductCommentApi.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.product.api.comment; 2 | 3 | import cn.iocoder.yudao.module.product.api.comment.dto.ProductCommentCreateReqDTO; 4 | 5 | /** 6 | * 产品评论 API 接口 7 | * 8 | * @author HUIHUI 9 | */ 10 | public interface ProductCommentApi { 11 | 12 | /** 13 | * 创建评论 14 | * 15 | * @param createReqDTO 评论参数 16 | * @return 返回评论创建后的 id 17 | */ 18 | Long createComment(ProductCommentCreateReqDTO createReqDTO); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/api/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 占位 3 | */ 4 | package cn.iocoder.yudao.module.product.api; -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/enums/DictTypeConstants.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.product.enums; 2 | 3 | /** 4 | * product 字典类型的枚举类 5 | * 6 | * @author HUIHUI 7 | */ 8 | public interface DictTypeConstants { 9 | 10 | String PRODUCT_SPU_STATUS = "product_spu_status"; // 商品 SPU 状态 11 | 12 | } 13 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/enums/ProductConstants.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.product.enums; 2 | 3 | /** 4 | * Product 常量 5 | * 6 | * @author HUIHUI 7 | */ 8 | public interface ProductConstants { 9 | 10 | /** 11 | * 警戒库存 TODO 警戒库存暂时为 10,后期需要使用常量或者数据库配置替换 12 | */ 13 | int ALERT_STOCK = 10; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/api/package-info.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.product.api; 2 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/brand/vo/ProductBrandCreateReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.product.controller.admin.brand.vo; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | @Schema(description = "管理后台 - 商品品牌创建 Request VO") 9 | @Data 10 | @EqualsAndHashCode(callSuper = true) 11 | @ToString(callSuper = true) 12 | public class ProductBrandCreateReqVO extends ProductBrandBaseVO { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/brand/vo/ProductBrandListReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.product.controller.admin.brand.vo; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | 6 | @Schema(description = "管理后台 - 商品品牌分页 Request VO") 7 | @Data 8 | public class ProductBrandListReqVO { 9 | 10 | @Schema(description = "品牌名称", example = "苹果") 11 | private String name; 12 | 13 | } 14 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/comment/ProductCommentController.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/comment/ProductCommentController.http -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/ProductSpuController.http: -------------------------------------------------------------------------------- 1 | ### 获得商品 SPU 明细 2 | GET {{baseUrl}}/product/spu/get-detail?id=4 3 | Authorization: Bearer {{token}} 4 | tenant-id: {{adminTenentId}} 5 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/comment/AppCommentController.http: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/comment/AppCommentController.http -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/favorite/vo/AppFavoritePageReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.product.controller.app.favorite.vo; 2 | 3 | import cn.iocoder.yudao.framework.common.pojo.PageParam; 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | import lombok.Data; 6 | 7 | @Schema(description = "用户 App - 商品收藏分页查询 Request VO") 8 | @Data 9 | public class AppFavoritePageReqVO extends PageParam { 10 | } 11 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/property/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 占位符,无时间作用,避免 package 缩进 3 | */ 4 | package cn.iocoder.yudao.module.product.controller.app.property; 5 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/property/vo/property/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 占位符,无时间作用,避免 package 缩进 3 | */ 4 | package cn.iocoder.yudao.module.product.controller.app.property.vo.property; 5 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/framework/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 属于 product 模块的 framework 封装 3 | * 4 | * @author 芋道源码 5 | */ 6 | package cn.iocoder.yudao.module.product.framework; 7 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/framework/web/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * product 模块的 web 配置 3 | */ 4 | package cn.iocoder.yudao.module.product.framework.web; 5 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * product 模块,主要实现交易相关功能 3 | * 例如:订单、退款、购物车等功能。 4 | * 5 | * 1. Controller URL:以 /product/ 开头,避免和其它 Module 冲突 6 | * 2. DataObject 表名:以 product_ 开头,方便在数据库中区分 7 | */ 8 | package cn.iocoder.yudao.module.product; 9 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-product-biz/src/test/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-product-biz/src/test/resources/sql/clean.sql: -------------------------------------------------------------------------------- 1 | DELETE FROM "product_sku"; 2 | DELETE FROM "product_spu"; 3 | DELETE FROM "product_category"; 4 | DELETE FROM "product_brand"; 5 | DELETE FROM "product_property"; 6 | DELETE FROM "product_property_value"; 7 | DELETE FROM "product_comment"; 8 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/bargain/BargainActivityApi.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.promotion.api.bargain; 2 | 3 | /** 4 | * 砍价活动 Api 接口 5 | * 6 | * @author HUIHUI 7 | */ 8 | public interface BargainActivityApi { 9 | 10 | /** 11 | * 更新砍价活动库存 12 | * 13 | * @param id 砍价活动编号 14 | * @param count 购买数量 15 | */ 16 | void updateBargainActivityStock(Long id, Integer count); 17 | 18 | } 19 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/bargain/dto/BargainValidateJoinRespDTO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.promotion.api.bargain.dto; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 校验参与砍价 Response DTO 7 | */ 8 | @Data 9 | public class BargainValidateJoinRespDTO { 10 | 11 | /** 12 | * 砍价活动编号 13 | */ 14 | private Long activityId; 15 | /** 16 | * 砍价活动名称 17 | */ 18 | private String name; 19 | 20 | /** 21 | * 砍价金额 22 | */ 23 | private Integer bargainPrice; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/combination/dto/CombinationValidateJoinRespDTO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.promotion.api.combination.dto; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 校验参与拼团 Response DTO 7 | * 8 | * @author HUIHUI 9 | */ 10 | @Data 11 | public class CombinationValidateJoinRespDTO { 12 | 13 | /** 14 | * 砍价活动编号 15 | */ 16 | private Long activityId; 17 | /** 18 | * 砍价活动名称 19 | */ 20 | private String name; 21 | 22 | /** 23 | * 拼团金额 24 | */ 25 | private Integer combinationPrice; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/coupon/dto/CouponValidReqDTO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.promotion.api.coupon.dto; 2 | 3 | import lombok.Data; 4 | 5 | import javax.validation.constraints.NotNull; 6 | 7 | /** 8 | * 优惠劵使用 Request DTO 9 | * 10 | * @author 芋道源码 11 | */ 12 | @Data 13 | public class CouponValidReqDTO { 14 | 15 | /** 16 | * 优惠劵编号 17 | */ 18 | @NotNull(message = "优惠劵编号不能为空") 19 | private Long id; 20 | 21 | /** 22 | * 用户编号 23 | */ 24 | @NotNull(message = "用户编号不能为空") 25 | private Long userId; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/api/seckill/dto/SeckillValidateJoinRespDTO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.promotion.api.seckill.dto; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 校验参与秒杀 Response DTO 7 | */ 8 | @Data 9 | public class SeckillValidateJoinRespDTO { 10 | 11 | /** 12 | * 秒杀活动名称 13 | */ 14 | private String name; 15 | /** 16 | * 总限购数量 17 | * 18 | * 目的:目前只有 trade 有具体下单的数据,需要交给 trade 价格计算使用 19 | */ 20 | private Integer totalLimitCount; 21 | 22 | /** 23 | * 秒杀金额 24 | */ 25 | private Integer seckillPrice; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/DictTypeConstants.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.promotion.enums; 2 | 3 | /** 4 | * promotion 字典类型的枚举类 5 | * 6 | * @author HUIHUI 7 | */ 8 | public class DictTypeConstants { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/article/vo/article/ArticleCreateReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.promotion.controller.admin.article.vo.article; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | @Schema(description = "管理后台 - 文章管理创建 Request VO") 9 | @Data 10 | @EqualsAndHashCode(callSuper = true) 11 | @ToString(callSuper = true) 12 | public class ArticleCreateReqVO extends ArticleBaseVO { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/article/vo/category/ArticleCategoryCreateReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.promotion.controller.admin.article.vo.category; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | @Schema(description = "管理后台 - 文章分类创建 Request VO") 9 | @Data 10 | @EqualsAndHashCode(callSuper = true) 11 | @ToString(callSuper = true) 12 | public class ArticleCategoryCreateReqVO extends ArticleCategoryBaseVO { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/banner/vo/BannerCreateReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.promotion.controller.admin.banner.vo; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | /** 9 | * @author xia 10 | */ 11 | @Schema(description = "管理后台 - Banner 创建 Request VO") 12 | @Data 13 | @EqualsAndHashCode(callSuper = true) 14 | @ToString(callSuper = true) 15 | public class BannerCreateReqVO extends BannerBaseVO { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/bargain/vo/activity/BargainActivityCreateReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.promotion.controller.admin.bargain.vo.activity; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | @Schema(description = "管理后台 - 砍价活动创建 Request VO") 9 | @Data 10 | @EqualsAndHashCode(callSuper = true) 11 | @ToString(callSuper = true) 12 | public class BargainActivityCreateReqVO extends BargainActivityBaseVO { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/coupon/vo/template/CouponTemplateCreateReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.promotion.controller.admin.coupon.vo.template; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | @Schema(description = "管理后台 - 优惠劵模板创建 Request VO") 9 | @Data 10 | @EqualsAndHashCode(callSuper = true) 11 | @ToString(callSuper = true) 12 | public class CouponTemplateCreateReqVO extends CouponTemplateBaseVO { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/diy/vo/page/DiyPageCreateReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.promotion.controller.admin.diy.vo.page; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | @Schema(description = "管理后台 - 装修页面创建 Request VO") 9 | @Data 10 | @EqualsAndHashCode(callSuper = true) 11 | @ToString(callSuper = true) 12 | public class DiyPageCreateReqVO extends DiyPageBaseVO { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/diy/vo/template/DiyTemplateCreateReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.promotion.controller.admin.diy.vo.template; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | @Schema(description = "管理后台 - 装修模板创建 Request VO") 9 | @Data 10 | @EqualsAndHashCode(callSuper = true) 11 | @ToString(callSuper = true) 12 | public class DiyTemplateCreateReqVO extends DiyTemplateBaseVO { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/reward/vo/RewardActivityCreateReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.promotion.controller.admin.reward.vo; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | @Schema(description = "管理后台 - 满减送活动创建 Request VO") 9 | @Data 10 | @EqualsAndHashCode(callSuper = true) 11 | @ToString(callSuper = true) 12 | public class RewardActivityCreateReqVO extends RewardActivityBaseVO { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/seckill/vo/config/SeckillConfigCreateReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.promotion.controller.admin.seckill.vo.config; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | @Schema(description = "管理后台 - 秒杀时段创建 Request VO") 9 | @Data 10 | @EqualsAndHashCode(callSuper = true) 11 | @ToString(callSuper = true) 12 | public class SeckillConfigCreateReqVO extends SeckillConfigBaseVO { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/activity/AppActivityController.http: -------------------------------------------------------------------------------- 1 | ### /promotion/activity/list-by-spu-ids 获得多个商品,近期参与的每个活动 2 | GET {{appApi}}/promotion/activity/list-by-spu-ids?spuIds=222&spuIds=633 3 | Authorization: Bearer {{appToken}} 4 | Content-Type: application/json 5 | tenant-id: {{appTenentId}} 6 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/article/vo/article/AppArticlePageReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.promotion.controller.app.article.vo.article; 2 | 3 | import cn.iocoder.yudao.framework.common.pojo.PageParam; 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | import lombok.Data; 6 | 7 | @Schema(description = "应用 App - 文章的分页 Request VO") 8 | @Data 9 | public class AppArticlePageReqVO extends PageParam { 10 | 11 | @Schema(description = "分类编号", example = "2048") 12 | private Long categoryId; 13 | 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/AppBargainHelpController.http: -------------------------------------------------------------------------------- 1 | ### /promotion/bargain-record/create 创建砍价助力 2 | POST {{appApi}}/promotion/bargain-help/create 3 | Authorization: Bearer test248 4 | Content-Type: application/json 5 | tenant-id: {{appTenentId}} 6 | 7 | { 8 | "recordId": 26 9 | } 10 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/AppBargainRecordController.http: -------------------------------------------------------------------------------- 1 | ### /promotion/bargain-record/create 创建砍价记录 2 | POST {{appApi}}/promotion/bargain-record/create 3 | Authorization: Bearer {{appToken}} 4 | Content-Type: application/json 5 | tenant-id: {{appTenentId}} 6 | 7 | { 8 | "activityId": 1 9 | } 10 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/coupon/vo/coupon/AppCouponTakeReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.promotion.controller.app.coupon.vo.coupon; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | 6 | import javax.validation.constraints.NotNull; 7 | 8 | @Schema(description = "用户 App - 优惠劵领取 Request VO") 9 | @Data 10 | public class AppCouponTakeReqVO { 11 | 12 | @Schema(description = "优惠劵模板编号", example = "1") 13 | @NotNull(message = "优惠劵模板编号不能为空") 14 | private Long templateId; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/framework/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 属于 promotion 模块的 framework 封装 3 | * 4 | * @author 芋道源码 5 | */ 6 | package cn.iocoder.yudao.module.promotion.framework; 7 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/framework/web/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * promotion 模块的 web 配置 3 | */ 4 | package cn.iocoder.yudao.module.promotion.framework.web; 5 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/job/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * TODO 占位,无具体含义 3 | */ 4 | package cn.iocoder.yudao.module.promotion.job; 5 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/mq/consumer/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 消息队列的消费者 3 | */ 4 | package cn.iocoder.yudao.module.promotion.mq.consumer; 5 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/mq/message/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 消息队列的消息 3 | */ 4 | package cn.iocoder.yudao.module.promotion.mq.message; 5 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/mq/producer/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 消息队列的生产者 3 | */ 4 | package cn.iocoder.yudao.module.promotion.mq.producer; 5 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * promotion 模块,我们放营销业务。 3 | * 例如说:营销活动、banner、优惠券等等 4 | * 5 | * 1. Controller URL:以 /promotion/ 开头,避免和其它 Module 冲突 6 | * 2. DataObject 表名:以 promotion_ 开头,方便在数据库中区分 7 | */ 8 | package cn.iocoder.yudao.module.promotion; 9 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-biz/src/test/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-promotion-biz/src/test/resources/sql/clean.sql: -------------------------------------------------------------------------------- 1 | DELETE FROM "market_activity"; 2 | DELETE FROM "promotion_coupon_template"; 3 | DELETE FROM "promotion_coupon"; 4 | DELETE FROM "promotion_reward_activity"; 5 | DELETE FROM "promotion_discount_activity"; 6 | DELETE FROM "promotion_discount_product"; 7 | DELETE FROM "promotion_seckill_config"; 8 | DELETE FROM "promotion_combination_activity"; 9 | DELETE FROM "promotion_article_category"; 10 | DELETE FROM "promotion_article"; 11 | DELETE FROM "promotion_diy_template"; 12 | DELETE FROM "promotion_diy_page"; -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-statistics-api/src/main/java/cn/iocoder/yudao/module/statistics/api/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * TODO 占位,无特殊含义 3 | */ 4 | package cn.iocoder.yudao.module.statistics.api; 5 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-statistics-api/src/main/java/cn/iocoder/yudao/module/statistics/enums/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * TODO 占位,无特殊含义 3 | */ 4 | package cn.iocoder.yudao.module.statistics.enums; 5 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/controller/admin/pay/vo/PaySummaryRespVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.statistics.controller.admin.pay.vo; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | 6 | @Schema(description = "管理后台 - 支付统计 Response VO") 7 | @Data 8 | public class PaySummaryRespVO { 9 | 10 | @Schema(description = "充值金额,单位分", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") 11 | private Integer rechargePrice; 12 | 13 | } 14 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/controller/app/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * TODO 芋艿:占位 3 | */ 4 | package cn.iocoder.yudao.module.statistics.controller.app; 5 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/convert/pay/PayStatisticsConvert.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.statistics.convert.pay; 2 | 3 | import cn.iocoder.yudao.module.statistics.controller.admin.pay.vo.PaySummaryRespVO; 4 | import org.mapstruct.Mapper; 5 | import org.mapstruct.factory.Mappers; 6 | 7 | /** 8 | * 支付统计 Convert 9 | * 10 | * @author owen 11 | */ 12 | @Mapper 13 | public interface PayStatisticsConvert { 14 | 15 | PayStatisticsConvert INSTANCE = Mappers.getMapper(PayStatisticsConvert.class); 16 | 17 | PaySummaryRespVO convert(Integer rechargePrice); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/dal/dataobject/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 占位 todo 3 | */ 4 | package cn.iocoder.yudao.module.statistics.dal.dataobject; 5 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/job/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * TODO 芋艿,占坑,无特殊含义 3 | */ 4 | package cn.iocoder.yudao.module.statistics.job; 5 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * statistics 模块,主要实现统计相关功能。 3 | * 例如:统计商品、会员、交易等功能。 4 | * 5 | * 1. Controller URL:以 /statistics/ 开头,避免和其它 Module 冲突 6 | * 2. DataObject 表名:以 statistics_ 为后缀,方便在数据库中区分【特殊】 7 | */ 8 | package cn.iocoder.yudao.module.statistics; 9 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/pay/bo/RechargeSummaryRespBO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.statistics.service.pay.bo; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | 6 | /** 7 | * 充值统计 Response BO 8 | */ 9 | @Data 10 | public class RechargeSummaryRespBO { 11 | 12 | /** 13 | * 充值会员数量 14 | */ 15 | private Integer rechargeUserCount; 16 | 17 | /** 18 | * 充值金额 19 | */ 20 | private Integer rechargePrice; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/trade/bo/AfterSaleSummaryRespBO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.statistics.service.trade.bo; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 售后统计 Response DTO 7 | * 8 | * @author owen 9 | */ 10 | @Data 11 | public class AfterSaleSummaryRespBO { 12 | 13 | /** 14 | * 退款订单数 15 | */ 16 | private Integer afterSaleCount; 17 | /** 18 | * 总退款金额,单位:分 19 | */ 20 | private Integer afterSaleRefundPrice; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/trade/bo/TradeOrderSummaryRespBO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.statistics.service.trade.bo; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 订单统计 Response BO 7 | * 8 | * @author owen 9 | */ 10 | @Data 11 | public class TradeOrderSummaryRespBO { 12 | 13 | /** 14 | * 创建订单数 15 | */ 16 | private Integer orderCreateCount; 17 | /** 18 | * 支付订单商品数 19 | */ 20 | private Integer orderPayCount; 21 | /** 22 | * 总支付金额,单位:分 23 | */ 24 | private Integer orderPayPrice; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-statistics-biz/src/main/java/cn/iocoder/yudao/module/statistics/service/trade/bo/TradeSummaryRespBO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.statistics.service.trade.bo; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 交易统计 Resp BO 7 | * 8 | * @author owen 9 | */ 10 | @Data 11 | public class TradeSummaryRespBO { 12 | 13 | /** 14 | * 数量 15 | */ 16 | private Integer count; 17 | 18 | /** 19 | * 合计 20 | */ 21 | private Integer summary; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/api/package-info.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.trade.api; -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/DictTypeConstants.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.trade.enums; 2 | 3 | /** 4 | * Trade 字典类型的枚举类 5 | * 6 | * @author owen 7 | */ 8 | public interface DictTypeConstants { 9 | 10 | String BROKERAGE_WITHDRAW_STATUS = "brokerage_withdraw_status"; // 佣金提现状态 11 | 12 | } 13 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/MessageTemplateConstants.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.trade.enums; 2 | 3 | // TODO @芋艿:枚举 4 | /** 5 | * 通知模板枚举类 6 | * 7 | * @author HUIHUI 8 | */ 9 | public interface MessageTemplateConstants { 10 | 11 | String ORDER_DELIVERY = "order_delivery"; // 短信模版编号 12 | 13 | String BROKERAGE_WITHDRAW_AUDIT_APPROVE = "brokerage_withdraw_audit_approve"; // 佣金提现(审核通过) 14 | String BROKERAGE_WITHDRAW_AUDIT_REJECT = "brokerage_withdraw_audit_reject"; // 佣金提现(审核不通过) 15 | 16 | } 17 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-api/src/main/java/cn/iocoder/yudao/module/trade/enums/notify/TradeNotifyEnums.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.trade.enums.notify; 2 | 3 | // TODO @芋艿:这个枚举的作用? 4 | public interface TradeNotifyEnums { 5 | } 6 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/api/package-info.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.trade.api; -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/base/member/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 占位符,可忽略 3 | */ 4 | package cn.iocoder.yudao.module.trade.controller.admin.base.member; 5 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/base/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 放置该模块通用的 VO 类 3 | */ 4 | package cn.iocoder.yudao.module.trade.controller.admin.base; 5 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/config/vo/TradeConfigSaveReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.trade.controller.admin.config.vo; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | @Schema(description = "管理后台 - 交易中心配置更新 Request VO") 9 | @Data 10 | @EqualsAndHashCode(callSuper = true) 11 | @ToString(callSuper = true) 12 | public class TradeConfigSaveReqVO extends TradeConfigBaseVO { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/express/DeliveryExpressCreateReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.express; 2 | 3 | import lombok.*; 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | 6 | @Schema(description = "管理后台 - 快递公司创建 Request VO") 7 | @Data 8 | @EqualsAndHashCode(callSuper = true) 9 | @ToString(callSuper = true) 10 | public class DeliveryExpressCreateReqVO extends DeliveryExpressBaseVO { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/delivery/vo/pickup/DeliveryPickUpStoreCreateReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.pickup; 2 | 3 | import lombok.*; 4 | import java.util.*; 5 | import io.swagger.v3.oas.annotations.media.Schema; 6 | import javax.validation.constraints.*; 7 | 8 | @Schema(description = "管理后台 - 自提门店创建 Request VO") 9 | @Data 10 | @EqualsAndHashCode(callSuper = true) 11 | @ToString(callSuper = true) 12 | public class DeliveryPickUpStoreCreateReqVO extends DeliveryPickUpStoreBaseVO { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/admin/order/TradeOrderController.http: -------------------------------------------------------------------------------- 1 | ### 获得交易订单分页 => 成功 2 | GET {{baseUrl}}/trade/order/page?pageNo=1&pageSize=10 3 | Authorization: Bearer {{token}} 4 | tenant-id: {{adminTenentId}} 5 | 6 | ### 获得交易订单分页 => 成功 7 | GET {{baseUrl}}/trade/order/get-detail?id=21 8 | Authorization: Bearer {{token}} 9 | tenant-id: {{adminTenentId}} 10 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/base/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 基础包,放一些通用的 VO 类 3 | */ 4 | package cn.iocoder.yudao.module.trade.controller.app.base; 5 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供 RESTful API 给前端: 3 | * 1. admin 包:提供给管理后台 yudao-ui-admin 前端项目 4 | * 2. app 包:提供给用户 APP yudao-ui-app 前端项目,它的 Controller 和 VO 都要添加 App 前缀,用于和管理后台进行区分 5 | */ 6 | package cn.iocoder.yudao.module.trade.controller; 7 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/aftersale/AfterSaleLogConvert.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.trade.convert.aftersale; 2 | 3 | import cn.iocoder.yudao.module.trade.dal.dataobject.aftersale.AfterSaleLogDO; 4 | import cn.iocoder.yudao.module.trade.service.aftersale.bo.AfterSaleLogCreateReqBO; 5 | import org.mapstruct.Mapper; 6 | import org.mapstruct.factory.Mappers; 7 | 8 | @Mapper 9 | public interface AfterSaleLogConvert { 10 | 11 | AfterSaleLogConvert INSTANCE = Mappers.getMapper(AfterSaleLogConvert.class); 12 | 13 | AfterSaleLogDO convert(AfterSaleLogCreateReqBO bean); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/convert/order/TradeOrderLogConvert.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.trade.convert.order; 2 | 3 | import cn.iocoder.yudao.module.trade.dal.dataobject.order.TradeOrderLogDO; 4 | import cn.iocoder.yudao.module.trade.service.order.bo.TradeOrderLogCreateReqBO; 5 | import org.mapstruct.Mapper; 6 | import org.mapstruct.factory.Mappers; 7 | 8 | @Mapper 9 | public interface TradeOrderLogConvert { 10 | 11 | TradeOrderLogConvert INSTANCE = Mappers.getMapper(TradeOrderLogConvert.class); 12 | 13 | TradeOrderLogDO convert(TradeOrderLogCreateReqBO bean); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/config/TradeConfigMapper.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.trade.dal.mysql.config; 2 | 3 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 4 | import cn.iocoder.yudao.module.trade.dal.dataobject.config.TradeConfigDO; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | * 交易中心配置 Mapper 9 | * 10 | * @author owen 11 | */ 12 | @Mapper 13 | public interface TradeConfigMapper extends BaseMapperX { 14 | 15 | } 16 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/delivery/DeliveryPickUpStoreStaffMapper.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.trade.dal.mysql.delivery; 2 | 3 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 4 | import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryPickUpStoreStaffDO; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface DeliveryPickUpStoreStaffMapper extends BaseMapperX { 9 | 10 | } 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/dal/mysql/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * TODO 占位 3 | */ 4 | package cn.iocoder.yudao.module.trade.dal.mysql; 5 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/delivery/core/client/dto/ExpressTrackRespDTO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.trade.framework.delivery.core.client.dto; 2 | 3 | import lombok.Data; 4 | 5 | import java.time.LocalDateTime; 6 | 7 | /** 8 | * 快递查询的轨迹 Resp DTO 9 | * 10 | * @author jason 11 | */ 12 | @Data 13 | public class ExpressTrackRespDTO { 14 | 15 | /** 16 | * 发生时间 17 | */ 18 | private LocalDateTime time; 19 | 20 | /** 21 | * 快递状态 22 | */ 23 | private String content; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/order/config/TradeOrderConfig.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.trade.framework.order.config; 2 | 3 | import org.springframework.boot.context.properties.EnableConfigurationProperties; 4 | import org.springframework.context.annotation.Configuration; 5 | 6 | // TODO @LeeYan9: 可以直接给 TradeOrderProperties 一个 @Component生效哈 7 | /** 8 | * @author LeeYan9 9 | * @since 2022-09-15 10 | */ 11 | @Configuration 12 | @EnableConfigurationProperties(TradeOrderProperties.class) 13 | public class TradeOrderConfig { 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 属于 trade 模块的 framework 封装 3 | * 4 | * @author 芋道源码 5 | */ 6 | package cn.iocoder.yudao.module.trade.framework; 7 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/framework/web/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * trade 模块的 web 配置 3 | */ 4 | package cn.iocoder.yudao.module.trade.framework.web; 5 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * trade 模块,product 模块,主要实现商品相关功能 3 | * 例如:品牌、商品分类、spu、sku等功能。 4 | * 5 | * 1. Controller URL:以 /product/ 开头,避免和其它 Module 冲突 6 | * 2. DataObject 表名:以 product_ 开头,方便在数据库中区分 7 | */ 8 | package cn.iocoder.yudao.module.trade; 9 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/service/message/TradeMessageService.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.trade.service.message; 2 | 3 | import cn.iocoder.yudao.module.trade.service.message.bo.TradeOrderMessageWhenDeliveryOrderReqBO; 4 | 5 | /** 6 | * Trade 消息 service 接口 7 | * 8 | * @author HUIHUI 9 | */ 10 | public interface TradeMessageService { 11 | 12 | /** 13 | * 订单发货时发送通知 14 | * 15 | * @param reqBO 发送消息 16 | */ 17 | void sendMessageWhenDeliveryOrder(TradeOrderMessageWhenDeliveryOrderReqBO reqBO); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-biz/src/test/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /yudao-module-mall/yudao-module-trade-biz/src/test/resources/sql/clean.sql: -------------------------------------------------------------------------------- 1 | DELETE FROM trade_order; 2 | DELETE FROM trade_order_item; 3 | DELETE FROM trade_after_sale; 4 | DELETE FROM trade_after_sale_log; 5 | DELETE FROM trade_brokerage_user; 6 | DELETE FROM trade_brokerage_record; 7 | DELETE FROM "trade_brokerage_withdraw"; 8 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/config/MemberConfigApi.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.member.api.config; 2 | 3 | import cn.iocoder.yudao.module.member.api.config.dto.MemberConfigRespDTO; 4 | 5 | /** 6 | * 用户配置 API 接口 7 | * 8 | * @author owen 9 | */ 10 | public interface MemberConfigApi { 11 | 12 | /** 13 | * 获得积分配置 14 | * 15 | * @return 积分配置 16 | */ 17 | MemberConfigRespDTO getConfig(); 18 | } 19 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * member API 包,定义暴露给其它模块的 API 3 | */ 4 | package cn.iocoder.yudao.module.member.api; 5 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/DictTypeConstants.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.member.enums; 2 | 3 | /** 4 | * Member 字典类型的枚举类 5 | * 6 | * @author owen 7 | */ 8 | public interface DictTypeConstants { 9 | 10 | /** 11 | * 会员经验记录 - 业务类型 12 | */ 13 | String MEMBER_EXPERIENCE_BIZ_TYPE = "member_experience_biz_type"; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/message/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 消息队列的消息 3 | */ 4 | package cn.iocoder.yudao.module.member.message; 5 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/message/user/MemberUserCreateMessage.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.member.message.user; 2 | 3 | import lombok.Data; 4 | 5 | import javax.validation.constraints.NotNull; 6 | 7 | /** 8 | * 会员用户创建消息 9 | * 10 | * @author owen 11 | */ 12 | @Data 13 | public class MemberUserCreateMessage { 14 | 15 | /** 16 | * 用户编号 17 | */ 18 | @NotNull(message = "用户编号不能为空") 19 | private Long userId; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/api/package-info.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.member.api; 2 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/address/package-info.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.member.controller.admin.address; 2 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/config/vo/MemberConfigSaveReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.member.controller.admin.config.vo; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | @Schema(description = "管理后台 - 会员配置保存 Request VO") 9 | @Data 10 | @EqualsAndHashCode(callSuper = true) 11 | @ToString(callSuper = true) 12 | public class MemberConfigSaveReqVO extends MemberConfigBaseVO { 13 | } 14 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupCreateReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.member.controller.admin.group.vo; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | @Schema(description = "管理后台 - 用户分组创建 Request VO") 9 | @Data 10 | @EqualsAndHashCode(callSuper = true) 11 | @ToString(callSuper = true) 12 | public class MemberGroupCreateReqVO extends MemberGroupBaseVO { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/group/vo/MemberGroupSimpleRespVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.member.controller.admin.group.vo; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import lombok.ToString; 6 | 7 | @Schema(description = "管理后台 - 用户分组 Response VO") 8 | @Data 9 | @ToString(callSuper = true) 10 | public class MemberGroupSimpleRespVO { 11 | 12 | @Schema(description = "编号", example = "6103") 13 | private Long id; 14 | 15 | @Schema(description = "等级名称", example = "芋艿") 16 | private String name; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelCreateReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.member.controller.admin.level.vo.level; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | @Schema(description = "管理后台 - 会员等级创建 Request VO") 9 | @Data 10 | @EqualsAndHashCode(callSuper = true) 11 | @ToString(callSuper = true) 12 | public class MemberLevelCreateReqVO extends MemberLevelBaseVO { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/level/vo/level/MemberLevelListReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.member.controller.admin.level.vo.level; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import lombok.ToString; 6 | 7 | @Schema(description = "管理后台 - 会员等级列表筛选 Request VO") 8 | @Data 9 | @ToString(callSuper = true) 10 | public class MemberLevelListReqVO { 11 | 12 | @Schema(description = "等级名称", example = "芋艿") 13 | private String name; 14 | 15 | @Schema(description = "状态", example = "1") 16 | private Integer status; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/signin/vo/config/MemberSignInConfigCreateReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.member.controller.admin.signin.vo.config; 2 | 3 | import lombok.*; 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | 6 | @Schema(description = "管理后台 - 签到规则创建 Request VO") 7 | @Data 8 | @EqualsAndHashCode(callSuper = true) 9 | @ToString(callSuper = true) 10 | public class MemberSignInConfigCreateReqVO extends MemberSignInConfigBaseVO { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/tag/vo/MemberTagCreateReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.member.controller.admin.tag.vo; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | @Schema(description = "管理后台 - 会员标签创建 Request VO") 9 | @Data 10 | @EqualsAndHashCode(callSuper = true) 11 | @ToString(callSuper = true) 12 | public class MemberTagCreateReqVO extends MemberTagBaseVO { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/address/vo/AppAddressCreateReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.member.controller.app.address.vo; 2 | import io.swagger.v3.oas.annotations.media.Schema; 3 | import lombok.*; 4 | 5 | @Schema(description = "用户 APP - 用户收件地址创建 Request VO") 6 | @Data 7 | @EqualsAndHashCode(callSuper = true) 8 | @ToString(callSuper = true) 9 | public class AppAddressCreateReqVO extends AppAddressBaseVO { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/AppMemberUserController.http: -------------------------------------------------------------------------------- 1 | ### 请求 /member/user/profile/get 接口 => 没有权限 2 | GET {{appApi}}/member/user/get 3 | Authorization: Bearer test245 4 | tenant-id: {{appTenentId}} 5 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供 RESTful API 给前端: 3 | * 1. admin 包:提供给管理后台 yudao-ui-admin 前端项目 4 | * 2. app 包:提供给用户 APP yudao-ui-app 前端项目,它的 Controller 和 VO 都要添加 App 前缀,用于和管理后台进行区分 5 | */ 6 | package cn.iocoder.yudao.module.member.controller; 7 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/convert/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供 POJO 类的实体转换 3 | * 4 | * 目前使用 MapStruct 框架 5 | */ 6 | package cn.iocoder.yudao.module.member.convert; 7 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/config/MemberConfigMapper.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.member.dal.mysql.config; 2 | 3 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 4 | import cn.iocoder.yudao.module.member.dal.dataobject.config.MemberConfigDO; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | * 积分设置 Mapper 9 | * 10 | * @author QingX 11 | */ 12 | @Mapper 13 | public interface MemberConfigMapper extends BaseMapperX { 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * DAL = Data Access Layer 数据访问层 3 | * 1. data object:数据对象 4 | * 2. redis:Redis 的 CRUD 操作 5 | * 3. mysql:MySQL 的 CRUD 操作 6 | * 7 | * 其中,MySQL 的表以 member_ 作为前缀 8 | */ 9 | package cn.iocoder.yudao.module.member.dal; 10 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/redis/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 占位,后续有类后,可以删除,避免 package 无法提交到 Git 上 3 | */ 4 | package cn.iocoder.yudao.module.member.dal.redis; 5 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/framework/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 属于 member 模块的 framework 封装 3 | * 4 | * @author 芋道源码 5 | */ 6 | package cn.iocoder.yudao.module.member.framework; 7 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/framework/web/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * member 模块的 web 配置 3 | */ 4 | package cn.iocoder.yudao.module.member.framework.web; 5 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/mq/consumer/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 消息队列的消费者 3 | */ 4 | package cn.iocoder.yudao.module.member.mq.consumer; 5 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/mq/message/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 消息队列的消息 3 | */ 4 | package cn.iocoder.yudao.module.member.mq.message; 5 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/mq/producer/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 消息队列的生产者 3 | */ 4 | package cn.iocoder.yudao.module.member.mq.producer; 5 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * member 模块,我们放会员业务。 3 | * 例如说:会员中心等等 4 | * 5 | * 1. Controller URL:以 /member/ 开头,避免和其它 Module 冲突 6 | * 2. DataObject 表名:以 member_ 开头,方便在数据库中区分 7 | */ 8 | package cn.iocoder.yudao.module.member; 9 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/test/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /yudao-module-member/yudao-module-member-biz/src/test/resources/sql/clean.sql: -------------------------------------------------------------------------------- 1 | DELETE FROM "member_user"; 2 | DELETE FROM "member_address"; 3 | DELETE FROM "member_tag"; 4 | DELETE FROM "member_level"; 5 | DELETE FROM "member_group"; -------------------------------------------------------------------------------- /yudao-module-mp/yudao-module-mp-api/src/main/java/cn/iocoder/yudao/module/mp/enums/message/MpAutoReplyMatchEnum.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.mp.enums.message; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 公众号消息自动回复的匹配模式 8 | * 9 | * @author 芋道源码 10 | */ 11 | @Getter 12 | @AllArgsConstructor 13 | public enum MpAutoReplyMatchEnum { 14 | 15 | ALL(1, "完全匹配"), 16 | LIKE(2, "半匹配"), 17 | ; 18 | 19 | /** 20 | * 匹配 21 | */ 22 | private final Integer match; 23 | /** 24 | * 匹配的名字 25 | */ 26 | private final String name; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /yudao-module-mp/yudao-module-mp-api/src/main/java/cn/iocoder/yudao/module/mp/enums/message/MpAutoReplyTypeEnum.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.mp.enums.message; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 公众号消息自动回复的类型 8 | * 9 | * @author 芋道源码 10 | */ 11 | @Getter 12 | @AllArgsConstructor 13 | public enum MpAutoReplyTypeEnum { 14 | 15 | SUBSCRIBE(1, "关注时回复"), 16 | MESSAGE(2, "收到消息回复"), 17 | KEYWORD(3, "关键词回复"), 18 | ; 19 | 20 | /** 21 | * 来源 22 | */ 23 | private final Integer type; 24 | /** 25 | * 类型的名字 26 | */ 27 | private final String name; 28 | 29 | } 30 | -------------------------------------------------------------------------------- /yudao-module-mp/yudao-module-mp-api/src/main/java/cn/iocoder/yudao/module/mp/enums/message/MpMessageSendFromEnum.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.mp.enums.message; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 微信公众号消息的发送来源 8 | * 9 | * @author 芋道源码 10 | */ 11 | @Getter 12 | @AllArgsConstructor 13 | public enum MpMessageSendFromEnum { 14 | 15 | USER_TO_MP(1, "粉丝发送给公众号"), 16 | MP_TO_USER(2, "公众号发给粉丝"), 17 | ; 18 | 19 | /** 20 | * 来源 21 | */ 22 | private final Integer from; 23 | /** 24 | * 来源的名字 25 | */ 26 | private final String name; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /yudao-module-mp/yudao-module-mp-api/src/main/java/cn/iocoder/yudao/module/mp/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * mp 模块,我们放微信微信公众号。 3 | * 例如说:提供微信公众号的账号、菜单、粉丝、标签、消息、自动回复、素材、模板通知、运营数据等功能 4 | * 5 | * 1. Controller URL:以 /mp/ 开头,避免和其它 Module 冲突 6 | * 2. DataObject 表名:以 mp_ 开头,方便在数据库中区分 7 | */ 8 | package cn.iocoder.yudao.module.mp; 9 | -------------------------------------------------------------------------------- /yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/account/vo/MpAccountCreateReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.mp.controller.admin.account.vo; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | @Schema(description = "管理后台 - 公众号账号创建 Request VO") 9 | @Data 10 | @EqualsAndHashCode(callSuper = true) 11 | @ToString(callSuper = true) 12 | public class MpAccountCreateReqVO extends MpAccountBaseVO { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/material/MpMaterialController.http: -------------------------------------------------------------------------------- 1 | ### 请求 /mp/material/page 接口 => 成功 2 | GET {{baseUrl}}/mp/material/page?permanent=true&pageNo=1&pageSize=10 3 | Content-Type: application/json 4 | Authorization: Bearer {{token}} 5 | tenant-id: {{adminTenentId}} 6 | -------------------------------------------------------------------------------- /yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/message/MpAutoReplyController.http: -------------------------------------------------------------------------------- 1 | ### 请求 /mp/message/page 接口 => 成功 2 | GET {{baseUrl}}/mp/auto-reply/page?accountId=1&pageNo=1&pageSize=10 3 | Content-Type: application/json 4 | Authorization: Bearer {{token}} 5 | tenant-id: {{adminTenentId}} 6 | -------------------------------------------------------------------------------- /yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/news/MpFreePublishController.http: -------------------------------------------------------------------------------- 1 | ### 请求 /mp/free-publish/page 接口 => 成功 2 | GET {{baseUrl}}/mp/free-publish/page?accountId=1&pageNo=1&pageSize=10 3 | Content-Type: application/json 4 | Authorization: Bearer {{token}} 5 | tenant-id: {{adminTenentId}} 6 | 7 | ### 请求 /mp/free-publish/submit 接口 => 成功 8 | POST {{baseUrl}}/mp/free-publish/submit?accountId=1&mediaId=r6ryvl6LrxBU0miaST4Y-vilmd7iS51D8IPddxflWrau0hIQ2ovY8YanO5jlgUcM 9 | Content-Type: application/json 10 | Authorization: Bearer {{token}} 11 | tenant-id: {{adminTenentId}} 12 | 13 | {} 14 | -------------------------------------------------------------------------------- /yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/user/MpUserController.http: -------------------------------------------------------------------------------- 1 | ### 请求 /mp/user/sync 接口 => 成功 2 | POST {{baseUrl}}/mp/user/sync?accountId=1 3 | Content-Type: application/json 4 | Authorization: Bearer {{token}} 5 | tenant-id: {{adminTenentId}} 6 | 7 | ### 请求 /mp/user/update 接口 => 成功 8 | PUT {{baseUrl}}/mp/user/update 9 | Content-Type: application/json 10 | Authorization: Bearer {{token}} 11 | tenant-id: {{adminTenentId}} 12 | 13 | { 14 | "id": "3", 15 | "nickname": "test", 16 | "remark": "测试备注", 17 | "tagIds": [103, 104] 18 | } 19 | -------------------------------------------------------------------------------- /yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供 RESTful API 给前端: 3 | * 1. admin 包:提供给管理后台 yudao-ui-admin 前端项目 4 | * 2. app 包:提供给用户 APP yudao-ui-app 前端项目,它的 Controller 和 VO 都要添加 App 前缀,用于和管理后台进行区分 5 | */ 6 | package cn.iocoder.yudao.module.mp.controller; 7 | -------------------------------------------------------------------------------- /yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/framework/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 属于 mp 模块的 framework 封装 3 | * 4 | * @author 芋道源码 5 | */ 6 | package cn.iocoder.yudao.module.mp.framework; 7 | -------------------------------------------------------------------------------- /yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/framework/web/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * mp 模块的 web 配置 3 | */ 4 | package cn.iocoder.yudao.module.mp.framework.web; 5 | -------------------------------------------------------------------------------- /yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * mp 模块,我们放微信微信公众号。 3 | * 例如说:提供微信公众号的账号、菜单、粉丝、标签、消息、自动回复、素材、模板通知、运营数据等功能 4 | * 5 | * 1. Controller URL:以 /mp/ 开头,避免和其它 Module 冲突 6 | * 2. DataObject 表名:以 mp_ 开头,方便在数据库中区分 7 | */ 8 | package cn.iocoder.yudao.module.mp; 9 | -------------------------------------------------------------------------------- /yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/handler/other/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 本包内的 handler 都是一些不重要的,所以放在 other 其它里 3 | */ 4 | package cn.iocoder.yudao.module.mp.service.handler.other; 5 | -------------------------------------------------------------------------------- /yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/notify/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 占位符,无特殊作用 3 | */ 4 | package cn.iocoder.yudao.module.pay.api.notify; 5 | -------------------------------------------------------------------------------- /yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/transfer/PayTransferApi.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.pay.api.transfer; 2 | 3 | import cn.iocoder.yudao.module.pay.api.transfer.dto.PayTransferCreateReqDTO; 4 | 5 | import javax.validation.Valid; 6 | 7 | /** 8 | * 转账单 API 接口 9 | * 10 | * @author jason 11 | */ 12 | public interface PayTransferApi { 13 | 14 | /** 15 | * 创建转账单 16 | * 17 | * @param reqDTO 创建请求 18 | * @return 转账单编号 19 | */ 20 | Long createTransfer(@Valid PayTransferCreateReqDTO reqDTO); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/DictTypeConstants.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.pay.enums; 2 | 3 | /** 4 | * Pay 字典类型的枚举类 5 | * 6 | * @author 芋道源码 7 | */ 8 | public interface DictTypeConstants { 9 | 10 | String CHANNEL_CODE = "pay_channel_code"; // 支付渠道编码 11 | 12 | String ORDER_STATUS = "pay_order_status"; // 支付渠道 13 | 14 | String REFUND_STATUS = "pay_order_status"; // 退款状态 15 | 16 | String NOTIFY_STATUS = "pay_notify_status"; // 回调状态 17 | 18 | } 19 | -------------------------------------------------------------------------------- /yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/notify/PayNotifyTypeEnum.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.pay.enums.notify; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 支付通知类型 8 | * 9 | * @author 芋道源码 10 | */ 11 | @Getter 12 | @AllArgsConstructor 13 | public enum PayNotifyTypeEnum { 14 | 15 | ORDER(1, "支付单"), 16 | REFUND(2, "退款单"), 17 | TRANSFER(3, "转账单") 18 | ; 19 | 20 | /** 21 | * 类型 22 | */ 23 | private final Integer type; 24 | /** 25 | * 名字 26 | */ 27 | private final String name; 28 | 29 | } 30 | -------------------------------------------------------------------------------- /yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/app/vo/PayAppCreateReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.pay.controller.admin.app.vo; 2 | import io.swagger.v3.oas.annotations.media.Schema; 3 | import lombok.*; 4 | 5 | @Schema(description = "管理后台 - 支付应用信息创建 Request VO") 6 | @Data 7 | @EqualsAndHashCode(callSuper = true) 8 | @ToString(callSuper = true) 9 | public class PayAppCreateReqVO extends PayAppBaseVO { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/demo/vo/order/PayDemoOrderCreateReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.pay.controller.admin.demo.vo.order; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | 6 | import javax.validation.constraints.NotNull; 7 | 8 | @Schema(description = "管理后台 - 示例订单创建 Request VO") 9 | @Data 10 | public class PayDemoOrderCreateReqVO { 11 | 12 | @Schema(description = "商品编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "17682") 13 | @NotNull(message = "商品编号不能为空") 14 | private Long spuId; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/wallet/vo/rechargepackage/WalletRechargePackageCreateReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.rechargepackage; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import lombok.ToString; 7 | 8 | @Schema(description = "管理后台 - 充值套餐创建 Request VO") 9 | @Data 10 | @EqualsAndHashCode(callSuper = true) 11 | @ToString(callSuper = true) 12 | public class WalletRechargePackageCreateReqVO extends WalletRechargePackageBaseVO { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/wallet/vo/transaction/PayWalletTransactionPageReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.transaction; 2 | 3 | import cn.iocoder.yudao.framework.common.pojo.PageParam; 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | import lombok.Data; 6 | 7 | @Schema(description = "管理后台 - 钱包流水分页 Request VO") 8 | @Data 9 | public class PayWalletTransactionPageReqVO extends PageParam { 10 | 11 | @Schema(description = "钱包编号", example = "1") 12 | private Long walletId; 13 | 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/wallet/vo/wallet/PayWalletUserReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | 6 | import javax.validation.constraints.NotNull; 7 | 8 | @Schema(description = "管理后台 - 用户钱包明细 Request VO") 9 | @Data 10 | public class PayWalletUserReqVO { 11 | 12 | @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") 13 | @NotNull(message = "用户编号不能为空") 14 | private Long userId; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/order/vo/AppPayOrderSubmitRespVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.pay.controller.app.order.vo; 2 | 3 | import cn.iocoder.yudao.module.pay.controller.admin.order.vo.PayOrderSubmitRespVO; 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | import lombok.AllArgsConstructor; 6 | import lombok.Builder; 7 | import lombok.Data; 8 | import lombok.NoArgsConstructor; 9 | import lombok.experimental.Accessors; 10 | 11 | @Schema(description = "用户 APP - 支付订单提交 Response VO") 12 | @Data 13 | public class AppPayOrderSubmitRespVO extends PayOrderSubmitRespVO { 14 | 15 | } 16 | -------------------------------------------------------------------------------- /yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/app/refund/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * TODO 芋艿:占个位置,没啥用 3 | */ 4 | package cn.iocoder.yudao.module.pay.controller.app.refund; 5 | -------------------------------------------------------------------------------- /yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供 RESTful API 给前端: 3 | * 1. admin 包:提供给管理后台 yudao-ui-admin 前端项目 4 | * 2. app 包:提供给用户 APP yudao-ui-app 前端项目,它的 Controller 和 VO 都要添加 App 前缀,用于和管理后台进行区分 5 | */ 6 | package cn.iocoder.yudao.module.pay.controller; 7 | -------------------------------------------------------------------------------- /yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/convert/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供 POJO 类的实体转换 3 | * 4 | * 目前使用 MapStruct 框架 5 | */ 6 | package cn.iocoder.yudao.module.pay.convert; 7 | -------------------------------------------------------------------------------- /yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/framework/job/core/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 占位 3 | */ 4 | package cn.iocoder.yudao.module.pay.framework.job.core; 5 | -------------------------------------------------------------------------------- /yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/framework/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 属于 pay 模块的 framework 封装 3 | * 4 | * @author 芋道源码 5 | */ 6 | package cn.iocoder.yudao.module.pay.framework; 7 | -------------------------------------------------------------------------------- /yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/framework/pay/config/PayConfiguration.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.pay.framework.pay.config; 2 | 3 | import org.springframework.boot.context.properties.EnableConfigurationProperties; 4 | import org.springframework.context.annotation.Configuration; 5 | 6 | @Configuration(proxyBeanMethods = false) 7 | @EnableConfigurationProperties(PayProperties.class) 8 | public class PayConfiguration { 9 | } 10 | -------------------------------------------------------------------------------- /yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/framework/web/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * pay 模块的 web 配置 3 | */ 4 | package cn.iocoder.yudao.module.pay.framework.web; 5 | -------------------------------------------------------------------------------- /yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * pay 模块,我们放支付业务,提供业务的支付能力。 3 | * 例如说:商户、应用、支付、退款等等 4 | * 5 | * 1. Controller URL:以 /pay/ 开头,避免和其它 Module 冲突 6 | * 2. DataObject 表名:以 pay_ 开头,方便在数据库中区分 7 | * 8 | * 注意,由于 Pay 模块和 Trade 模块,容易重名,所以类名都加载 Pay 的前缀~ 9 | */ 10 | package cn.iocoder.yudao.module.pay; 11 | -------------------------------------------------------------------------------- /yudao-module-pay/yudao-module-pay-biz/src/test-integration/java/cn/iocoder/yudao/module/pay/service/package-info.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.pay.service; 2 | -------------------------------------------------------------------------------- /yudao-module-pay/yudao-module-pay-biz/src/test/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /yudao-module-pay/yudao-module-pay-biz/src/test/resources/sql/clean.sql: -------------------------------------------------------------------------------- 1 | DELETE FROM pay_app; 2 | DELETE FROM pay_channel; 3 | DELETE FROM pay_order; 4 | DELETE FROM pay_order_extension; 5 | DELETE FROM pay_refund; 6 | DELETE FROM pay_notify_task; 7 | DELETE FROM pay_notify_log; 8 | -------------------------------------------------------------------------------- /yudao-module-pay/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/exception/PayException.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.framework.pay.core.client.exception; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | 6 | /** 7 | * 支付系统异常 Exception 8 | */ 9 | @Data 10 | @EqualsAndHashCode(callSuper = true) 11 | public class PayException extends RuntimeException { 12 | 13 | public PayException(Throwable cause) { 14 | super(cause); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /yudao-module-pay/yudao-spring-boot-starter-biz-pay/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | cn.iocoder.yudao.framework.pay.config.YudaoPayAutoConfiguration -------------------------------------------------------------------------------- /yudao-module-report/yudao-module-report-api/src/main/java/cn/iocoder/yudao/module/report/api/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 占位,避免 api 目录无文件时,git 无法提交 3 | */ 4 | package cn.iocoder.yudao.module.report.api; 5 | -------------------------------------------------------------------------------- /yudao-module-report/yudao-module-report-api/src/main/java/cn/iocoder/yudao/module/report/enums/ErrorCodeConstants.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.report.enums; 2 | 3 | import cn.iocoder.yudao.framework.common.exception.ErrorCode; 4 | 5 | /** 6 | * Report 错误码枚举类 7 | * 8 | * report 系统,使用 1-003-000-000 段 9 | */ 10 | public interface ErrorCodeConstants { 11 | 12 | // ========== GoView 模块 1-003-000-000 ========== 13 | ErrorCode GO_VIEW_PROJECT_NOT_EXISTS = new ErrorCode(1_003_000_000, "GoView 项目不存在"); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/controller/admin/ajreport/package-info.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.report.controller.admin.ajreport; 2 | -------------------------------------------------------------------------------- /yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/controller/admin/goview/vo/project/GoViewProjectCreateReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.report.controller.admin.goview.vo.project; 2 | 3 | import lombok.*; 4 | import io.swagger.v3.oas.annotations.media.Schema; 5 | import javax.validation.constraints.*; 6 | 7 | @Schema(description = "管理后台 - GoView 项目创建 Request VO") 8 | @Data 9 | public class GoViewProjectCreateReqVO { 10 | 11 | @Schema(description = "项目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") 12 | @NotEmpty(message = "项目名称不能为空") 13 | private String name; 14 | 15 | } 16 | -------------------------------------------------------------------------------- /yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/controller/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供 RESTful API 给前端: 3 | * 1. admin 包:提供给管理后台 yudao-ui-admin 前端项目 4 | * 2. app 包:提供给用户 APP yudao-ui-app 前端项目,它的 Controller 和 VO 都要添加 App 前缀,用于和管理后台进行区分 5 | */ 6 | package cn.iocoder.yudao.module.report.controller; 7 | -------------------------------------------------------------------------------- /yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/convert/ajreport/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * TODO 占位,后续删除 3 | */ 4 | package cn.iocoder.yudao.module.report.convert.ajreport; 5 | -------------------------------------------------------------------------------- /yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/dal/dataobject/ajreport/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * TODO 芋艿:占位,待删除 3 | */ 4 | package cn.iocoder.yudao.module.report.dal.dataobject.ajreport; 5 | -------------------------------------------------------------------------------- /yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/dal/mysql/ajreport/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * TODO 芋艿:占位,待删除 3 | */ 4 | package cn.iocoder.yudao.module.report.dal.mysql.ajreport; 5 | -------------------------------------------------------------------------------- /yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/framework/jmreport/core/web/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 占位,后续会基于 Filter 实现积木报表的认证等功能,替代 {@link cn.iocoder.yudao.module.report.framework.jmreport.core.service.JmReportTokenServiceImpl} 3 | */ 4 | package cn.iocoder.yudao.module.report.framework.jmreport.core.web; 5 | -------------------------------------------------------------------------------- /yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/framework/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 属于 report 模块的 framework 封装 3 | * 4 | * @author 芋道源码 5 | */ 6 | package cn.iocoder.yudao.module.report.framework; 7 | -------------------------------------------------------------------------------- /yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/framework/security/core/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 占位 3 | */ 4 | package cn.iocoder.yudao.module.report.framework.security.core; 5 | -------------------------------------------------------------------------------- /yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * report 模块,主要实现数据可视化报表等功能: 3 | * 1. 基于「积木报表」实现,打印设计、报表设计、图形设计、大屏设计等。URL 前缀是 /jmreport,表名前缀是 jimu_ 4 | * 5 | * 由于「积木报表」的大屏设计器需要收费,后续会自研,对应的是: 6 | * 1. Controller URL:以 /report/ 开头,避免和其它 Module 冲突 7 | * 2. DataObject 表名:以 report_ 开头,方便在数据库中区分 8 | */ 9 | package cn.iocoder.yudao.module.report; 10 | -------------------------------------------------------------------------------- /yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/service/ajreport/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * TODO 芋艿:占位,待删除 3 | */ 4 | package cn.iocoder.yudao.module.report.service.ajreport; 5 | -------------------------------------------------------------------------------- /yudao-module-report/yudao-module-report-biz/src/main/java/cn/iocoder/yudao/module/report/service/goview/GoViewDataService.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.report.service.goview; 2 | 3 | import cn.iocoder.yudao.module.report.controller.admin.goview.vo.data.GoViewDataRespVO; 4 | 5 | /** 6 | * GoView 数据 Service 接口 7 | * 8 | * @author 芋道源码 9 | */ 10 | public interface GoViewDataService { 11 | 12 | /** 13 | * 使用 SQL 查询数据 14 | * 15 | * @param sql SQL 语句 16 | * @return 数据 17 | */ 18 | GoViewDataRespVO getDataBySQL(String sql); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /yudao-module-report/yudao-module-report-biz/src/test/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /yudao-module-report/yudao-module-report-biz/src/test/resources/sql/clean.sql: -------------------------------------------------------------------------------- 1 | DELETE FROM "report_go_view_project"; -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/errorcode/dto/ErrorCodeRespDTO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.api.errorcode.dto; 2 | 3 | import lombok.Data; 4 | 5 | import java.time.LocalDateTime; 6 | 7 | /** 8 | * 错误码的 Response DTO 9 | * 10 | * @author 芋道源码 11 | */ 12 | @Data 13 | public class ErrorCodeRespDTO { 14 | 15 | /** 16 | * 错误码编码 17 | */ 18 | private Integer code; 19 | /** 20 | * 错误码错误提示 21 | */ 22 | private String message; 23 | /** 24 | * 更新时间 25 | */ 26 | private LocalDateTime updateTime; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/LoginLogApi.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.api.logger; 2 | 3 | import cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO; 4 | 5 | import javax.validation.Valid; 6 | 7 | /** 8 | * 登录日志的 API 接口 9 | * 10 | * @author 芋道源码 11 | */ 12 | public interface LoginLogApi { 13 | 14 | /** 15 | * 创建登录日志 16 | * 17 | * @param reqDTO 日志信息 18 | */ 19 | void createLoginLog(@Valid LoginLogCreateReqDTO reqDTO); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/logger/dto/OperateLogPageReqDTO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.api.logger.dto; 2 | 3 | import cn.iocoder.yudao.framework.common.pojo.PageParam; 4 | import lombok.Data; 5 | 6 | /** 7 | * 操作日志分页 Request DTO 8 | * 9 | * @author HUIHUI 10 | */ 11 | @Data 12 | public class OperateLogPageReqDTO extends PageParam { 13 | 14 | /** 15 | * 模块类型 16 | */ 17 | private String type; 18 | /** 19 | * 模块数据编号 20 | */ 21 | private Long bizId; 22 | 23 | /** 24 | * 用户编号 25 | */ 26 | private Long userId; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * System API 包,定义暴露给其它模块的 API 3 | */ 4 | package cn.iocoder.yudao.module.system.api; 5 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/permission/RoleApi.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.api.permission; 2 | 3 | import java.util.Collection; 4 | 5 | /** 6 | * 角色 API 接口 7 | * 8 | * @author 芋道源码 9 | */ 10 | public interface RoleApi { 11 | 12 | /** 13 | * 校验角色们是否有效。如下情况,视为无效: 14 | * 1. 角色编号不存在 15 | * 2. 角色被禁用 16 | * 17 | * @param ids 角色编号数组 18 | */ 19 | void validRoleList(Collection ids); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialWxPhoneNumberInfoRespDTO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.api.social.dto; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 微信小程序的手机信息 Response DTO 7 | * 8 | * @author 芋道源码 9 | */ 10 | @Data 11 | public class SocialWxPhoneNumberInfoRespDTO { 12 | 13 | /** 14 | * 用户绑定的手机号(国外手机号会有区号) 15 | */ 16 | private String phoneNumber; 17 | 18 | /** 19 | * 没有区号的手机号 20 | */ 21 | private String purePhoneNumber; 22 | /** 23 | * 区号 24 | */ 25 | private String countryCode; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/tenant/TenantApi.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.api.tenant; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 多租户的 API 接口 7 | * 8 | * @author 芋道源码 9 | */ 10 | public interface TenantApi { 11 | 12 | /** 13 | * 获得所有租户 14 | * 15 | * @return 租户编号数组 16 | */ 17 | List getTenantIdList(); 18 | 19 | /** 20 | * 校验租户是否合法 21 | * 22 | * @param id 租户编号 23 | */ 24 | void validateTenant(Long id); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/common/SexEnum.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.enums.common; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 性别的枚举值 8 | * 9 | * @author 芋道源码 10 | */ 11 | @Getter 12 | @AllArgsConstructor 13 | public enum SexEnum { 14 | 15 | /** 男 */ 16 | MALE(1), 17 | /** 女 */ 18 | FEMALE(2), 19 | /* 未知 */ 20 | UNKNOWN(3); 21 | 22 | /** 23 | * 性别 24 | */ 25 | private final Integer sex; 26 | 27 | } 28 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/mail/MailSendStatusEnum.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.enums.mail; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 邮件的发送状态枚举 8 | * 9 | * @author wangjingyi 10 | * @since 2022/4/10 13:39 11 | */ 12 | @Getter 13 | @AllArgsConstructor 14 | public enum MailSendStatusEnum { 15 | 16 | INIT(0), // 初始化 17 | SUCCESS(10), // 发送成功 18 | FAILURE(20), // 发送失败 19 | IGNORE(30), // 忽略,即不发送 20 | ; 21 | 22 | private final int status; 23 | 24 | } 25 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/notice/NoticeTypeEnum.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.enums.notice; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 通知类型 8 | * 9 | * @author 芋道源码 10 | */ 11 | @Getter 12 | @AllArgsConstructor 13 | public enum NoticeTypeEnum { 14 | 15 | NOTICE(1), 16 | ANNOUNCEMENT(2); 17 | 18 | /** 19 | * 类型 20 | */ 21 | private final Integer type; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/notify/NotifyTemplateTypeEnum.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.enums.notify; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 通知模板类型枚举 8 | * 9 | * @author HUIHUI 10 | */ 11 | @Getter 12 | @AllArgsConstructor 13 | public enum NotifyTemplateTypeEnum { 14 | 15 | /** 16 | * 系统消息 17 | */ 18 | SYSTEM_MESSAGE(2), 19 | /** 20 | * 通知消息 21 | */ 22 | NOTIFICATION_MESSAGE(1); 23 | 24 | private final Integer type; 25 | 26 | } 27 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/oauth2/OAuth2ClientConstants.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.enums.oauth2; 2 | 3 | /** 4 | * OAuth2.0 客户端的通用枚举 5 | * 6 | * @author 芋道源码 7 | */ 8 | public interface OAuth2ClientConstants { 9 | 10 | String CLIENT_ID_DEFAULT = "default"; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/permission/MenuTypeEnum.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.enums.permission; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 菜单类型枚举类 8 | * 9 | * @author 芋道源码 10 | */ 11 | @Getter 12 | @AllArgsConstructor 13 | public enum MenuTypeEnum { 14 | 15 | DIR(1), // 目录 16 | MENU(2), // 菜单 17 | BUTTON(3) // 按钮 18 | ; 19 | 20 | /** 21 | * 类型 22 | */ 23 | private final Integer type; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/permission/RoleTypeEnum.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.enums.permission; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | @Getter 7 | @AllArgsConstructor 8 | public enum RoleTypeEnum { 9 | 10 | /** 11 | * 内置角色 12 | */ 13 | SYSTEM(1), 14 | /** 15 | * 自定义角色 16 | */ 17 | CUSTOM(2); 18 | 19 | private final Integer type; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SmsReceiveStatusEnum.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.enums.sms; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 短信的接收状态枚举 8 | * 9 | * @author 芋道源码 10 | * @date 2021/2/1 13:39 11 | */ 12 | @Getter 13 | @AllArgsConstructor 14 | public enum SmsReceiveStatusEnum { 15 | 16 | INIT(0), // 初始化 17 | SUCCESS(10), // 接收成功 18 | FAILURE(20), // 接收失败 19 | ; 20 | 21 | private final int status; 22 | 23 | } 24 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SmsSendStatusEnum.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.enums.sms; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 短信的发送状态枚举 8 | * 9 | * @author zzf 10 | * @date 2021/2/1 13:39 11 | */ 12 | @Getter 13 | @AllArgsConstructor 14 | public enum SmsSendStatusEnum { 15 | 16 | INIT(0), // 初始化 17 | SUCCESS(10), // 发送成功 18 | FAILURE(20), // 发送失败 19 | IGNORE(30), // 忽略,即不发送 20 | ; 21 | 22 | private final int status; 23 | 24 | } 25 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/sms/SmsTemplateTypeEnum.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.enums.sms; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 短信的模板类型枚举 8 | * 9 | * @author 芋道源码 10 | */ 11 | @Getter 12 | @AllArgsConstructor 13 | public enum SmsTemplateTypeEnum { 14 | 15 | VERIFICATION_CODE(1), // 验证码 16 | NOTICE(2), // 通知 17 | PROMOTION(3), // 营销 18 | ; 19 | 20 | /** 21 | * 类型 22 | */ 23 | private final int type; 24 | 25 | } 26 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptListReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | 6 | @Schema(description = "管理后台 - 部门列表 Request VO") 7 | @Data 8 | public class DeptListReqVO { 9 | 10 | @Schema(description = "部门名称,模糊匹配", example = "芋道") 11 | private String name; 12 | 13 | @Schema(description = "展示状态,参见 CommonStatusEnum 枚举类", example = "1") 14 | private Integer status; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dict/DictDataController.http: -------------------------------------------------------------------------------- 1 | ### 请求 /menu/list 接口 => 成功 2 | GET {{baseUrl}}/system/dict-data/list-all-simple 3 | Authorization: Bearer {{token}} 4 | tenant-id: {{adminTenentId}} 5 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/errorcode/ErrorCodeController.http: -------------------------------------------------------------------------------- 1 | ### 创建错误码 2 | POST {{baseUrl}}/inra/error-code/create 3 | Authorization: Bearer {{token}} 4 | Content-Type: application/json 5 | tenant-id: {{adminTenentId}} 6 | 7 | { 8 | "code": 200, 9 | "message": "成功", 10 | "group": "test", 11 | "type": 1 12 | } 13 | 14 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/ip/AreaController.http: -------------------------------------------------------------------------------- 1 | ### 获得地区树 2 | GET {{baseUrl}}/system/area/tree 3 | Authorization: Bearer {{token}} 4 | tenant-id: {{adminTenentId}} 5 | 6 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/logger/OperateLogController.http: -------------------------------------------------------------------------------- 1 | ### 请求 /system/operate-log/page 接口 => 成功 2 | GET {{baseUrl}}/system/operate-log/page 3 | Authorization: Bearer {{token}} 4 | tenant-id: {{adminTenentId}} 5 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/mail/MailTemplateController.http: -------------------------------------------------------------------------------- 1 | ### 请求 /system/mail-template/send-mail 接口 => 成功 2 | POST {{baseUrl}}/system/mail-template/send-mail 3 | Authorization: Bearer {{token}} 4 | Content-Type: application/json 5 | tenant-id: {{adminTenentId}} 6 | 7 | { 8 | "templateCode": "test_01", 9 | "mail": "7685413@qq.com", 10 | "templateParams": { 11 | "key01": "value01", 12 | "key02": "value02" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/OAuth2UserController.http: -------------------------------------------------------------------------------- 1 | ### 请求 /system/oauth2/user/get 接口 => 成功 2 | GET {{baseUrl}}/system/oauth2/user/get 3 | Authorization: Bearer 47f9c74ec11041f193b777ebb95c3b0d 4 | tenant-id: {{adminTenentId}} 5 | 6 | ### 请求 /system/oauth2/user/update 接口 => 成功 7 | PUT {{baseUrl}}/system/oauth2/user/update 8 | Content-Type: application/json 9 | Authorization: Bearer 47f9c74ec11041f193b777ebb95c3b0d 10 | tenant-id: {{adminTenentId}} 11 | 12 | { 13 | "nickname": "芋道源码" 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/MenuController.http: -------------------------------------------------------------------------------- 1 | ### 请求 /menu/list 接口 => 成功 2 | GET {{baseUrl}}/system/menu/list 3 | Authorization: Bearer {{token}} 4 | tenant-id: {{adminTenentId}} 5 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/vo/menu/MenuListReqVO.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu; 2 | 3 | import io.swagger.v3.oas.annotations.media.Schema; 4 | import lombok.Data; 5 | 6 | @Schema(description = "管理后台 - 菜单列表 Request VO") 7 | @Data 8 | public class MenuListReqVO { 9 | 10 | @Schema(description = "菜单名称,模糊匹配", example = "芋道") 11 | private String name; 12 | 13 | @Schema(description = "展示状态,参见 CommonStatusEnum 枚举类", example = "1") 14 | private Integer status; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sensitiveword/SensitiveWordController.http: -------------------------------------------------------------------------------- 1 | ### 请求 /system/sensitive-word/validate-text 接口 => 成功 2 | GET {{baseUrl}}/system/sensitive-word/validate-text?text=XXX&tags=短信&tags=蔬菜 3 | Authorization: Bearer {{token}} 4 | tenant-id: {{adminTenentId}} 5 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/sms/SmsTemplateController.http: -------------------------------------------------------------------------------- 1 | ### 请求 /system/sms-template/send-sms 接口 => 成功 2 | POST {{baseUrl}}/system/sms-template/send-sms 3 | Authorization: Bearer {{token}} 4 | Content-Type: application/json 5 | tenant-id: {{adminTenentId}} 6 | 7 | { 8 | "templateCode": "test_01", 9 | "mobile": "15601691390", 10 | "templateParams": { 11 | "operation": "value01", 12 | "code": "value02" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserController.http: -------------------------------------------------------------------------------- 1 | ### 请求 /system/user/page 接口 => 没有权限 2 | GET {{baseUrl}}/system/user/page?pageNo=1&pageSize=10 3 | Authorization: Bearer {{token}} 4 | #Authorization: Bearer test100 5 | tenant-id: {{adminTenentId}} 6 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/UserProfileController.http: -------------------------------------------------------------------------------- 1 | ### 请求 /system/user/profile/get 接口 => 没有权限 2 | GET {{baseUrl}}/system/user/profile/get 3 | Authorization: Bearer {{token}} 4 | tenant-id: {{adminTenentId}} 5 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供 RESTful API 给前端: 3 | * 1. admin 包:提供给管理后台 yudao-ui-admin 前端项目 4 | * 2. app 包:提供给用户 APP yudao-ui-app 前端项目,它的 Controller 和 VO 都要添加 App 前缀,用于和管理后台进行区分 5 | */ 6 | package cn.iocoder.yudao.module.system.controller; 7 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 提供 POJO 类的实体转换 3 | * 4 | * 目前使用 MapStruct 框架 5 | */ 6 | package cn.iocoder.yudao.module.system.convert; 7 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/oauth2/OAuth2CodeMapper.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.dal.mysql.oauth2; 2 | 3 | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; 4 | import cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2CodeDO; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | @Mapper 8 | public interface OAuth2CodeMapper extends BaseMapperX { 9 | 10 | default OAuth2CodeDO selectByCode(String code) { 11 | return selectOne(OAuth2CodeDO::getCode, code); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * DAL = Data Access Layer 数据访问层 3 | * 1. data object:数据对象 4 | * 2. redis:Redis 的 CRUD 操作 5 | * 3. mysql:MySQL 的 CRUD 操作 6 | * 7 | * 其中,MySQL 的表以 system_ 作为前缀 8 | */ 9 | package cn.iocoder.yudao.module.system.dal.mysql; 10 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/captcha/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 验证码拓展 3 | * 4 | * 基于 aj-captcha 实现滑块验证码,文档:https://ajcaptcha.beliefteam.cn/captcha-doc/ 5 | * 6 | * @author 星语 7 | */ 8 | package cn.iocoder.yudao.module.system.framework.captcha; -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/datapermission/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * system 模块的数据权限配置 3 | */ 4 | package cn.iocoder.yudao.module.system.framework.datapermission; 5 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/operatelog/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 占位文件,避免文件夹缩进 3 | */ 4 | package cn.iocoder.yudao.module.system.framework.operatelog; -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 属于 system 模块的 framework 封装 3 | * 4 | * @author 芋道源码 5 | */ 6 | package cn.iocoder.yudao.module.system.framework; 7 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/sms/core/enums/SmsTemplateAuditStatusEnum.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.framework.sms.core.enums; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | 6 | /** 7 | * 短信模板的审核状态枚举 8 | * 9 | * @author 芋道源码 10 | */ 11 | @AllArgsConstructor 12 | @Getter 13 | public enum SmsTemplateAuditStatusEnum { 14 | 15 | CHECKING(1), 16 | SUCCESS(2), 17 | FAIL(3); 18 | 19 | private final Integer status; 20 | 21 | } 22 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/web/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * system 模块的 web 配置 3 | */ 4 | package cn.iocoder.yudao.module.system.framework.web; 5 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/package-info.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.job; 2 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * system 模块下,我们放通用业务,支撑上层的核心业务。 3 | * 例如说:用户、部门、权限、数据字典等等 4 | * 5 | * 1. Controller URL:以 /system/ 开头,避免和其它 Module 冲突 6 | * 2. DataObject 表名:以 system_ 开头,方便在数据库中区分 7 | */ 8 | package cn.iocoder.yudao.module.system; 9 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/member/MemberService.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.service.member; 2 | 3 | /** 4 | * Member Service 接口 5 | * 6 | * @author 芋道源码 7 | */ 8 | public interface MemberService { 9 | 10 | /** 11 | * 获得会员用户的手机号码 12 | * 13 | * @param id 会员用户编号 14 | * @return 手机号码 15 | */ 16 | String getMemberUserMobile(Long id); 17 | 18 | /** 19 | * 获得会员用户的邮箱 20 | * 21 | * @param id 会员用户编号 22 | * @return 邮箱 23 | */ 24 | String getMemberUserEmail(Long id); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/member/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * yudao-module-member 模块的适配,解除 yudao-module-system 对它们的依赖 3 | */ 4 | package cn.iocoder.yudao.module.system.service.member; 5 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tenant/handler/TenantInfoHandler.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.service.tenant.handler; 2 | 3 | import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO; 4 | 5 | /** 6 | * 租户信息处理 7 | * 目的:尽量减少租户逻辑耦合到系统中 8 | * 9 | * @author 芋道源码 10 | */ 11 | public interface TenantInfoHandler { 12 | 13 | /** 14 | * 基于传入的租户信息,进行相关逻辑的执行 15 | * 例如说,创建用户时,超过最大账户配额 16 | * 17 | * @param tenant 租户信息 18 | */ 19 | void handle(TenantDO tenant); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tenant/handler/TenantMenuHandler.java: -------------------------------------------------------------------------------- 1 | package cn.iocoder.yudao.module.system.service.tenant.handler; 2 | 3 | import java.util.Set; 4 | 5 | /** 6 | * 租户菜单处理 7 | * 目的:尽量减少租户逻辑耦合到系统中 8 | * 9 | * @author 芋道源码 10 | */ 11 | public interface TenantMenuHandler { 12 | 13 | /** 14 | * 基于传入的租户菜单【全】列表,进行相关逻辑的执行 15 | * 例如说,返回可分配菜单的时候,可以移除多余的 16 | * 17 | * @param menuIds 菜单列表 18 | */ 19 | void handle(Set menuIds); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/util/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 每个模块的 util 包,放专属当前模块的 Utils 工具类 3 | */ 4 | package cn.iocoder.yudao.module.system.util; 5 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/META-INF/services/com.xingyuv.captcha.service.CaptchaCacheService: -------------------------------------------------------------------------------- 1 | cn.iocoder.yudao.module.system.framework.captcha.core.RedisCaptchaServiceImpl 2 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/original/bg1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/original/bg1.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/original/bg2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/original/bg2.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/original/bg3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/original/bg3.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/original/bg4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/original/bg4.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/original/bg5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/original/bg5.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/original/bg6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/original/bg6.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/original/bg7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/original/bg7.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/original/bg8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/original/bg8.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/original/bg9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/original/bg9.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/1.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/10.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/11.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/12.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/13.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/14.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/15.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/16.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/17.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/18.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/19.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/8.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/11/9.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/2.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/3.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/jigsaw/slidingBlock/4.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/pic-click/bg1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/pic-click/bg1.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/pic-click/bg10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/pic-click/bg10.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/pic-click/bg2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/pic-click/bg2.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/pic-click/bg3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/pic-click/bg3.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/pic-click/bg4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/pic-click/bg4.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/pic-click/bg5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/pic-click/bg5.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/pic-click/bg6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/pic-click/bg6.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/pic-click/bg7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/pic-click/bg7.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/pic-click/bg8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/pic-click/bg8.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/main/resources/images/pic-click/bg9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/talkpoin/ruoyi-spring-boot-all/0f3548c74766cb1eb83efdfdfb890935a0da6f55/yudao-module-system/yudao-module-system-biz/src/main/resources/images/pic-click/bg9.png -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/test-integration/java/cn/iocoder/yudao/module/system/service/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 占位 3 | */ 4 | package cn.iocoder.yudao.module.system.service; 5 | -------------------------------------------------------------------------------- /yudao-module-system/yudao-module-system-biz/src/test/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /yudao-server/Dockerfile: -------------------------------------------------------------------------------- 1 | ## AdoptOpenJDK 停止发布 OpenJDK 二进制,而 Eclipse Temurin 是它的延伸,提供更好的稳定性 2 | ## 感谢复旦核博士的建议!灰子哥,牛皮! 3 | FROM eclipse-temurin:8-jre 4 | 5 | ## 创建目录,并使用它作为工作目录 6 | RUN mkdir -p /yudao-server 7 | WORKDIR /yudao-server 8 | ## 将后端项目的 Jar 文件,复制到镜像中 9 | COPY ./target/yudao-server.jar app.jar 10 | 11 | ## 设置 TZ 时区 12 | ENV TZ=Asia/Shanghai 13 | ## 设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖 14 | ENV JAVA_OPTS="-Xms512m -Xmx512m -Djava.security.egd=file:/dev/./urandom" 15 | 16 | ## 应用参数 17 | ENV ARGS="" 18 | 19 | ## 暴露后端项目的 48080 端口 20 | EXPOSE 48080 21 | 22 | ## 启动后端项目 23 | CMD java ${JAVA_OPTS} -jar app.jar $ARGS 24 | --------------------------------------------------------------------------------